freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于opengl的臺球游戲設(shè)計(jì)-資料下載頁

2024-11-08 00:54本頁面
  

【正文】 TYPE param); 定義光照計(jì)算中用到的當(dāng)前材質(zhì)。 face 可以是 GL_FRONT、 GL_BACK、GL_FRONT_AND_BACK,它表明當(dāng)前材質(zhì)應(yīng)該應(yīng)用到的物體的哪一個面上; pname 說明了一個特定的材質(zhì); param 是材質(zhì)的具體數(shù)值,如函數(shù)為向量形式,則 param 是一組值的指針,反之為參數(shù)值本身。非向量形式僅用于設(shè)置 GL_SHININESS。 pname 參數(shù)值具體內(nèi)容見表 。 表 函數(shù) glMaterial*()參數(shù) pname Table pname of function glMaterial* 參數(shù)名 缺省值 說明 GL_AMBIENT (,) 材料的環(huán)境光顏色 GL_DIFFUSE (,) 材料的漫反射光顏色 GL_SPECULAR (,) 材料鏡面反射光顏色 GL_SHININESS 鏡面指數(shù)(光亮度) GL_EMISSION (,) 材料的輻射光顏色 GL_AMBIENT_AND_DIFFUSE 材料的環(huán)境光和漫反射顏色 需要指出的是, OpenGL 用材料對光的紅、藍(lán)、綠三原色的反射率來近似定義材料的顏色。 像光源一樣,材料顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定了材料對環(huán)境光、漫反射光和鏡面反射光的反射程度 。在進(jìn)行光照計(jì)算時,材料對環(huán)境光的反射率與 每個進(jìn)入光源的環(huán)境光結(jié)合,對漫反射光和鏡面反射光的反射率與每個光源的滿反射光結(jié)合,對鏡面光的反射率與每個進(jìn)入光源的鏡面反射光結(jié)合。對漫反射光與環(huán)境光的反射程度決定了材料的顏色,并且它們很相似。 完成對母球, 7 個藍(lán)球, 8 個紅球 的材質(zhì)顏色和光照的設(shè)置。 ( 4) 球體 繪制 球體繪使用了 OpenGL 中 實(shí)用工具包( GLUT), GLUT 提供了下描述繪圖函數(shù),可以避免在程序中編寫繪制這些模型的代碼。這些函數(shù)渲染圖形時使用的都是直接模式。對于每個三維模型,都提供了兩個繪制函數(shù):一個用于繪制沒有面發(fā)現(xiàn)的線框圖,另一個用于繪制帶有著色和面法線的填充圖。 如果使用了光照,應(yīng)使用后一個函數(shù)。函數(shù)為: void glutSolidSphere(Gldouble radius,GLint slices,Glint stachs); 經(jīng)過以上幾步的實(shí)現(xiàn)完成母球 , 7 個藍(lán)球, 8 個紅球的繪制,并且初始化他們開始的靜止?fàn)顟B(tài)的位置。 23 具體的代碼: if (m_bVisible[0]) {//白球的繪制 glShadeModel(GL_FLAT)。//明暗處理 glPushMatrix()。 glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2])。 float ambient0[4] = {,}。//幾種光源設(shè)置 float diffuse0[4] = {,}。 float specular0[] = {,}。 float shininess0 = 。 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient0)。 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse0)。//材質(zhì)處理 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular0)。 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess0)。 glutSolidSphere(BALL_RADIUS,20,16)。//球體的繪制 glPopMatrix()。 } float ambient1[4] = {,}。 float diffuse1[4] = {,}。 float specular1[] = {,}。 float shininess1 = 。 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient1)。 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse1)。 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular1)。 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess1)。 for (int i = 1。 i9。 i++) if (m_bVisible[i]) {//8 個紅球 glShadeModel(GL_SMOOTH)。 glPushMatrix()。 24 glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2])。 glutSolidSphere(BALL_RADIUS,20,16)。 glPopMatrix()。 } float ambient3[4] = {,}。 float diffuse3[4] = {,}。 float specular3[] = {,}。 float shininess3 = 。 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient3)。 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse3)。 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular3)。 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess3)。 for (i = 9。 i16。 i++) if (m_bVisible[i]) {//7 個藍(lán)球 glShadeModel(GL_FLAT)。 glPushMatrix()。 glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2])。 glutSolidSphere(BALL_RADIUS,20,16)。 glPopMatrix()。 } glPopMatrix()。 } 使用 OpenGL 具體實(shí)現(xiàn)繪制方向箭頭 在這個模塊中,將用到的 OpenGL 提供的一些庫函數(shù),這些庫函數(shù)主要涉及的箭頭描繪的相關(guān)內(nèi)容。 ● glGetIntegerv(GLenum pname, GLint *params ): 此函數(shù)獲得整型狀態(tài)變量的值。參數(shù) pname 是一個符號常量,指定了要返回哪個狀態(tài)變量的值;參數(shù) params 是一個指針,它指向一個指定類型的數(shù)組,該數(shù)組中存儲了返回的數(shù)據(jù)。 ● glDisable(GLenum cap):該函數(shù)用于關(guān)閉 光 照。 25 ● glEnable(GLenum cap):該函數(shù)用于打開光照。 ● glBegin(GLenum mode):該函數(shù)用于繪制箭頭的線條。參數(shù) mode 可以取得值是GL_LINES, GL_TRIANGLES,分別用于繪制多組雙頂點(diǎn)線段和繪制多組獨(dú)立填充三角形。 ● glVertex3f(): 該函數(shù)用于三維坐標(biāo)頂點(diǎn)的定義。 ● glEnd(void): 該函數(shù)用于關(guān)閉線段和三角形的繪制。 ● glTranslatef(TYPE x,TYPE y,TYPE z): 此函數(shù)將一個矩陣與當(dāng)前矩陣相乘,以便將物體平移 x, y, z 指定的距離。 ● glLineWidth(GLfloat width ):此函數(shù)以像素為單位設(shè)置線寬;參數(shù)的值必須大于,默認(rèn)值為 。 ● glColor3f(TYPE r,TYPE g,TYPE b): 此函數(shù)指定了接受什么樣的顏色;參數(shù)類型為浮點(diǎn)數(shù)的版本,參數(shù)的取值范圍為 。 ● glMaterialMode(GLenum mode): 此函數(shù) 指定了修改模型視點(diǎn)矩陣、投影矩陣還是紋理映射。參數(shù) mode 的取值是 GL_MODELVIEW。 ● glPushMatrix():此函數(shù)將指定的材質(zhì)的所有屬性壓入屬性堆棧。 ● glPopMatrix(): 此函數(shù)將恢復(fù)所有這些變量的值。 箭頭的實(shí)現(xiàn)關(guān)鍵代碼: glGetIntegerv(GL_RENDER_MODE , amp。mode)。 glDisable(GL_LIGHTING)。 glMatrixMode(GL_MODELVIEW)。 glPushMatrix()。 glTranslatef(, TABLE_HEIGHT/+*BALL_RADIUS, )。 glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2])。 glColor3f(,)。 glLineWidth()。 glRotatef(angle,)。 glBegin(GL_LINES)。 glVertex3f(,)。 glVertex3f(m_fStrength,)。 glEnd()。 26 glTranslatef(m_fStrength,)。 glBegin(GL_TRIANGLES)。 glVertex3f(, , )。 glVertex3f(, , )。 glVertex3f(, , )。 glEnd()。 glPopMatrix()。 glEnable(GL_LIGHTING)。 glLineWidth()。 利用 OpenGL 實(shí)現(xiàn)變換 OpenGL 變換包括了計(jì)算機(jī)圖形學(xué)中最基本的三維變換,即幾何變換、投影變換、裁剪變換和視口變換,以及針對 OpenG 的特殊變換的概念和用法,比如相機(jī)變換,矩陣堆棧。 相機(jī)變換,在真實(shí)世界里,所有的物體都是三維的。但是這些三維物體在計(jì)算機(jī)世界中卻必須以二維平面物體的形式表現(xiàn)出來。實(shí)際上,從三維空間到二維平面,就如同用相機(jī)拍照一樣,通常都要經(jīng)歷以 下幾個步驟:視點(diǎn)變換、模型變換、投影變換和視口變換。 完成相機(jī)的變換需要結(jié)構(gòu)體: struct VECTOR { float x, y, z。 }; //矢量結(jié)構(gòu)體 struct EYE { VECTOR origin。 //視點(diǎn)初始位置 VECTOR center。 //視點(diǎn)中心位置 VECTOR up。 //視點(diǎn)指向上位置 VECTOR axisX。 //視點(diǎn)坐標(biāo)中 X 軸的位置 VECTOR axisY。 //視點(diǎn)坐標(biāo)中 Y 軸的位置 VECTOR axisZ。 //視點(diǎn)坐標(biāo)中 Z 軸的位置 27 }; ( 1) 視點(diǎn)變換 視點(diǎn)變換改變視點(diǎn)的位置和方向。視點(diǎn)變換相當(dāng)于固定三腳架并將相機(jī)對準(zhǔn)物體。使用相機(jī)拍照的時,需要移動相機(jī)并使之對準(zhǔn)某個方向;與此相反,視點(diǎn)變換通常由平移和旋轉(zhuǎn)組成。為使最終的圖像或照片中包含特定的場景,可以移動相機(jī),也沿相反的方向移動所有的物體。 最后,需要注意的是,必須在調(diào)用模型變換函數(shù)之前調(diào)用視點(diǎn)變換函數(shù),以確保首先對物體模型變換。 使用模型變換函數(shù),即 glTranslatef()和 glRotatef()??蓪⑦@些變換的效果視為移動相機(jī);也可將其 視為相機(jī)被固定,并相對于相機(jī)移動所有的物體。 使用實(shí)用庫函數(shù)定義一條視線,該函數(shù)封裝了一系列的旋轉(zhuǎn)和平移函數(shù)。 在全景掃描時,函數(shù) gluLookAt()很有用。當(dāng)視景體在 X 軸和 Y 軸方向均對稱時,指定的點(diǎn)( eyex, eyey, eyez)通常位于屏幕圖像的中央;這樣可以使用一系列變換函數(shù)來逐漸移動該點(diǎn),從而實(shí)現(xiàn)對場景的全景掃描。 gluLookAt()函數(shù)如下: void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx, GLdouble centery,GLdouble centerz,GLdouble upx, GLdouble upy, GLdouble upz); 該函數(shù)定義一個視點(diǎn)矩陣 ,并將其右乘當(dāng)前矩陣。視點(diǎn)由參數(shù) eyex、 eyey 和 eyez指定。參數(shù) centerx、 centery 和 centerz 指定了視線上的一個點(diǎn),通常位于場景中央。蠶食 upx、 upy 和 upz 指定向上的方向,即從視景體底部到頂部的方向。 gluLoadIdentity()函數(shù),以消除當(dāng)前視 點(diǎn)變換的影響。 ( 2) 模型變換 在 OpenGL 中,有三個進(jìn)行模型變換函數(shù): glTranslatef()、 glRotatef()和 glScale()。這些函數(shù)通過移動、旋轉(zhuǎn)或縮放或反射來變換物體(或坐標(biāo))。這些函數(shù)的作用相當(dāng)于生成一個合適的平移矩陣、轉(zhuǎn)動矩陣或縮放矩陣,然后調(diào)用函數(shù) glMAterialf(),并將該矩陣作為參數(shù);然而,與使用函數(shù) glMaterialf()相比,使用
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1