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

正文內(nèi)容

基于opengl的飛機虛擬場景漫游模擬畢業(yè)論文(編輯修改稿)

2024-12-14 00:54 本頁面
 

【文章內(nèi)容簡介】 GLfloat fogColor[4]= {, , , }。//此處設(shè)置 霧的顏色 、//和系統(tǒng)的背景色一致,效果比較明顯 fogMode = GL_LINEAR。 //采用、線性變化的霧化效果 glFogi (GL_FOG_MODE, fogMode)。 glFogfv (GL_FOG_COLOR, fogColor)。 //設(shè)置霧的顏色 , 與背景匹配 glFogf (GL_FOG_DENSITY,)。 //設(shè)置霧的稠密度 glHint (GL_FOG_HINT, GL_DONT_CARE)。 glFogf(GL_FOG_START, )。 // 霧氣的開 始位置 glFogf(GL_FOG_END,)。 // 霧氣的結(jié)束位置 } }else{ 基于 OpenGL 的飛機虛擬場景漫游模擬 9 glDisable(GL_FOG)。//禁用霧 } } 光照 光照的概述 虛擬場景要模擬現(xiàn)實 , 有一個很重要的地方就是要考慮光照。如同真實生活中一樣,物體因為有光照而構(gòu)成了我們五彩斑斕的世界。同樣,在虛擬場景中物體如果只有本身色彩而沒有光照的話,就會給人晦暗,不真實的感覺。 OpenGL 在模擬現(xiàn)實光照條件方面擁有獨特的光照模型,物體如果不能自己 發(fā)光的話,那么它就會接收三種不同類型的光的照射:散射光、環(huán)境光、鏡面光當然真實生活中是沒有這樣的光的。運用這三種類型的光可以模擬出物體的表面在接收不同的光照而產(chǎn)生不同的效果。散射光有自己特定的方向,而環(huán)境光沒有特定的方向,因此物體被環(huán)境光照射話其物體的表面都會均勻的照亮,當物體被散射光照射的時候要看入射光線的角度,入射光線如果直接的照在物體表面,如用手電筒直接照在門上,那么看起來物體看起來就會很亮,如果入射光線是通過某個較大的角度照射的話,如使用臺燈看書,那么物體看起來就相對暗點。鏡面光不同于散射光,環(huán)境光 它雖然也是按特定的方向發(fā)射但是其反射的角度太銳利一致,如同現(xiàn)實生活中的聚光燈,根據(jù)這個原理我在課題中加了光照的功能。 光照的使用 在場景中使用光照,首先要調(diào)用 glEnable(GL_LIGHTING)來啟用光照,接著要設(shè)置光源, OpenGL 支持 8 個光源, GL_LIGHT0 至 GL_LIGHT7 表示這 8 個光源。盡管 OpenGL 可能支持更多的光源,但為了運行速度的快速一般只使用這 8個光源。而使用光源必須設(shè)置光源的位置 [10]。在本課題中的光照功能相關(guān)代碼如下: glEnable(GL_LIGHTING)。//光的參數(shù)設(shè)置 GLfloat LightPosition[]={ , , , }。 //光源位置 GLfloat LightAmbient[]= { , , , }。 //環(huán)境光參數(shù) , R,G,B 各//取一半,顯示灰色 GLfloat LightDiffuse[]= { , , , }。// 散射光參數(shù) , R,G,B 取//最高值 1,顯示最強亮度 glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient)。//設(shè)置并啟用光照 1和 環(huán)境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse)。//設(shè)置并啟用光照 1和 散射光 上面的 LightPosition 是一個四維數(shù)組,數(shù)組里的前 3 個參數(shù)分別 為光源位置的 X、 Y、福州大學陽光學院本科生畢業(yè)設(shè)計(論文) 10 開始讀入文件頭信息MS 3 D 文件 ?處理主塊信息讀取實體信息讀取材質(zhì) 、 關(guān)鍵幀數(shù)據(jù) 、 多邊形等信息形成顯示列表結(jié)束YNZ 分量, 第四個參數(shù) 有兩個取值,當此參數(shù)取值為 1 時,光源的位置就是前 3 個參數(shù)所指定的位置,而當取值為 1時,則表示光源位于距離三維場景無限遠的地方,前 3個參數(shù)不起作用。 為了保證光線能夠照在飛機的上,我將光源的位置朝著觀察者,一般 將顯示器的屏幕所處的位置看做 Z軸的 點, 因此 在 Z軸上的位移定為 。 MS3D 模型載入 MilkShape3D 是一款有名的建模工具,而 MS3D 是 其特有的 模型格式 。 飛機是一個相當復雜的幾何模型,如果要用組合圖形來實現(xiàn) 那么 工作量非常大且真實感很差,因此系統(tǒng)采用 MS3D 模型來構(gòu)建飛機 , MS3D 文件是由文件頭信息、材質(zhì)信息、多邊形信息等組成的。對 MS3D 文件格式的三維模型讀取以打開二進制文件的方式,將文件的數(shù)據(jù)讀到計算機內(nèi)存中,用 OpenGL 中的渲染方法將模型顯示出來 [11]。 讀取 MS3D 文件的流 程圖如圖 31所示。 圖 31 讀取 MS3D 文件的流程 圖 基于 OpenGL 的飛機虛擬場景漫游模擬 11 4 漫游系統(tǒng)實現(xiàn) 天空的渲染和繪制 天空主要通過運用了“天空球 ”來實現(xiàn),在場景中構(gòu)建一個球體,并往此球體上面貼張帶有天空的 bmp 格式的圖像,此圖像帶有云彩圖案,可以增強真實感 [12]。 OpenGL 提供三種不同的二次曲面:圓盤,圓柱體,球體。函數(shù) gluNewQuadric()和 gluDeleteQuadric()用來創(chuàng)建和刪除這些二次曲面。其主要主要過程是,首先要通過函數(shù) GLUquadricObj 創(chuàng)建一 個新的二次曲面對象;然后調(diào)用 glEnable 及 glBindTexture 函數(shù)實現(xiàn)開啟和綁定紋理;接著通過 gluSphere()函數(shù)創(chuàng)建球體的模型。 gluSphere() 函數(shù)原型為 : void gluSpere(GLUquadricObj* obj,GLdouble radius,GLint slices,GLint stacks)。參數(shù) radius 代表球體的半徑,參數(shù) obj 代表二次曲面對象,并以此對象為原點,參數(shù) slices 和 stgacks 代表行經(jīng)線(球體為坐標系,縱軸為經(jīng)線)和行緯線(球體為坐標系,橫軸為 緯線)。 相關(guān) 代碼如下 : GLUquadricObj *skyqiu。 //二次方程對象 // 繪制藍天白云背景 球面上做紋理映射 if(skyflag==true) { glEnable(GL_TEXTURE_2D)。//開啟紋理 glPushMatrix()。 //綁定紋理圖, texture[0]為天空貼圖對應的紋理名字 glBindTexture(GL_TEXTURE_2D, texture[0])。 glRotatef(90,1,0,0)。 //繞 x軸旋轉(zhuǎn) 90 度角 glColor4f(1,1,1,1)。 gluSphere(skyqiu,1000,32,32)。 glPopMatrix()。 glDisable(GL_TEXTURE_2D)。 } 地形的實現(xiàn) 在 OpenGL 里, X 軸、 Z 軸是在平面坐標上,因此,繪制地圖只需在 XZ 平面上繪制即可。系統(tǒng)采用的是在 XZ 平面上繪制 64*64 的四邊形的格子,結(jié)合紋理映射,往四邊形上貼一幅帶有草地地圖的圖像。繪制過程:首先初始化地形 坐標點 , 把 y 坐標置為 0,通過福州大學陽光學院本科生畢業(yè)設(shè)計(論文) 12 在 X、 X、 Z、 Z 軸上 以 0 為起點, 各取 32個坐標點 乘以比例值, 然后 通過 雙 循環(huán) 計算出XZ 平面上所有的 點的 坐標值 ,形成地形平面 ,如圖 41所示。 接下來按逆時針順序把 XZ 平面分成 64個網(wǎng)格同時運用 紋理映射 把地形貼圖映射到網(wǎng)格上 ,為了正確的把紋理映射到 網(wǎng)格 ,必須 調(diào)用 glTexCoord2f()函數(shù)將 紋理圖的四個角正確的映射到 網(wǎng)格的四個點 上 , 即構(gòu)成了平面地圖 [13]。 Y Z 32 X X 32 0 32 32 Z 圖 41 地形平面分析 圖 相關(guān) 代碼如下所示 : define XQUARE 64 //64個格子 define ZQUARE 64 define SIZES 256 //格子大小 256 void CPlaneView::InitTerrain(void) { int x,z。 double xp,zp。 //初始化 坐標 for(z=0。zZQUARE。z++) { zp=(double)z((double)ZQUARE /2)。 //Z軸取正負 32 個坐標點 zp=zp*SIZES 。 //乘以比例系數(shù) for(x=0。xXQUARE。x++) { xp=(double)x((double)ZQUARE /2)。 //Z 軸取正負 32個坐標點 基于 OpenGL 的飛機虛擬場景漫游模擬 13 xp=xp*SIZES 。 Terrain[x][z].x=xp。 Terrain[x][z].y=0。 Terrain[x][z].z=zp。 } } } void CPlaneView::DrawTerrain(void) { register int x,z。 glEnable(GL_TEXTURE_2D)。 //綁定紋理, tree 值可通過按鍵 M改變,從而切換地圖 glBindTexture( GL_TEXTURE_2D, texture[tree] )。 for(z=0。zZQUARE1。z++) { for(x=0。xXQUARE1。x++) { glBegin(GL_QUADS)。//繪制四邊形方式 glTexCoord2d( , )。//紋理的左下 //繪制 ? ?zx, 處的頂點 glVertex3f(Terrain[x][z].x,Terrain[x][z].y,Terrain[x][z].z)。 glTexCoord2d( , )。//紋理的左上 //繪制 ? ?1, ?zx 處的頂點 glVertex3f(Terrain[x][z+1].x,Terrain[x][z+1].y,Terrain[x][z+1].z)。 glTexCoord2d( , )。//紋理的右上 //繪制 ? ?1,1 ?? zx 處的頂點 glVertex3f(Terrain[x+1][z+1].x,Terrain[x+1][z+1].y,Terrain[x+1][z+1].z)。 glTexCoord2d( , )。 //紋理的右下 //繪制 //? ?zx ,1? 處的頂點 glVertex3f(Terrain[x+1][z].x,Terrain[x+1][z].y,Terrain[x+1][z]. z)。 glEnd()。} } glDisable(GL_TEXTURE_2D)。 福州大學陽光學院本科生畢業(yè)設(shè)計(論文) 14 } 三維場景漫游的實現(xiàn) 雙緩沖技術(shù)概述 OpenGL 能夠?qū)崿F(xiàn)動畫制作的一個重要技術(shù)就是運用了雙緩沖技術(shù),猶如放映電影一樣,膠片一片一片快速的放映,就能給人感覺畫面會動,雙緩存也是同樣的原理。它分配了前 臺緩存和后臺緩存,在前臺緩存進行圖像顯示的同時,后臺緩存會繪制下一幅圖像,繪制結(jié)束后會將后臺緩存里的內(nèi)容顯示。計算機的計算速度非常的快,可以在人眼察覺不出的時間里讓顯示圖像不斷地連續(xù)變化,這樣就實現(xiàn)了動畫效果。而 SwapBuffers()函數(shù)可以交換兩個緩存,雙緩存技術(shù)主要是調(diào)
點擊復制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1