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

正文內(nèi)容

基于opengl的三維飛行器程序設(shè)計(jì)與仿真_畢業(yè)論文(參考版)

2025-07-06 14:25本頁面
  

【正文】 基于 OpenGL 三維飛。 同時(shí),飛機(jī)可以實(shí)現(xiàn)加速和減速,飛機(jī)的加速和減速實(shí)際上就是向前移動時(shí)的位置增量,位置增量增加,向前速度加快,位置增量減少,向前速度減慢,具體是通過控制飛機(jī)的加減速因子來實(shí)現(xiàn)的,就是調(diào)用一個(gè)簡單的 if語句來進(jìn)行控制: If(nchar=VK_UP) Throttle*=.99 Speed=speed*4。 glTranstratef(,_throttle)。//減速 } 不進(jìn)行任何按鍵的操作情況下,飛機(jī)沿 z軸方向始終直線飛行,具體的控制使用 OpenGL中的平移變換來進(jìn)行,具體來說就是調(diào)用 OpenGL中的 glTranslate()來實(shí)現(xiàn),在文中具體的 控制如下: glMtrixMode(GL_MODELVIEM)。 } if(nChar==VK_RIGHT) { zprot = 5/(ABS(Speed)+1)。 } if(nChar==VK_LEFT) { zprot += 5/(ABS(Speed)+1)。這樣我們就可以簡單方便的操作鍵盤,在文中主要運(yùn)用了一下幾個(gè)按鍵,方向鍵上下左右分別控制飛機(jī)的上下左右飛行,具體實(shí)現(xiàn)如下: if(nChar==VK_UP) { pitch = 15 / (ABS(Speed)+1)。當(dāng)我們按下一個(gè)按鍵的時(shí)候,就會產(chǎn)生一個(gè)相關(guān)事件,在程序中為每一個(gè)相關(guān)事件設(shè)置一個(gè)回調(diào)函數(shù)來處理這個(gè)事件。這是將飛機(jī)移動到某處 } 基于 OpenGL 三維飛行器程序設(shè)計(jì)與仿真 然后設(shè)定鍵盤,通過鍵盤控制飛機(jī)的飛行狀態(tài),完成后我們就可以使用鍵盤是實(shí)現(xiàn)飛機(jī)的左右上下的飛行狀態(tài)。這是實(shí)現(xiàn)飛機(jī)的左右旋轉(zhuǎn); glRotatef(pitch,)。 在本文中,將視點(diǎn)的位置設(shè)在飛機(jī)上,視點(diǎn)將隨飛機(jī)的移 動而移動和旋轉(zhuǎn),飛機(jī)的方向是由俯仰,偏動還側(cè)偏來實(shí)現(xiàn)的,也就是相當(dāng)于飛機(jī)的旋轉(zhuǎn)角度,相應(yīng)的程序如下: void planeview( GLfloat planeX,GLfloat ploatY,GLfloatZ,GLfloat roll,GLfloat pitch,GLfloat yaw) { glRotatef(roll,)。 在飛機(jī)的漫游過程中,會涉及到許多矢量數(shù)據(jù),矢量數(shù)據(jù)在飛機(jī)的旋轉(zhuǎn),視點(diǎn)的控制過程中發(fā)揮 著重要的作用,具體來說就是飛機(jī)在向左向右旋轉(zhuǎn)的過程中飛機(jī)會有右側(cè)身的效果,這時(shí)就要調(diào)用函數(shù) glRotate(r,x,y,z)來產(chǎn)生這一效果。它的設(shè)置和光照的設(shè)置差不多,只不過不是同一個(gè)函數(shù)而已,設(shè)置材質(zhì)屬性的函數(shù)像下面這樣: Void glmaterialf(GLenum face ,GLenum pname, TYPE param) 其中 face指定了此材質(zhì)如何應(yīng)用到物體的多邊形,可以是前面,外面等, pname通知 OpenGL將要設(shè)置材質(zhì)的哪一個(gè)屬性,這個(gè)屬性和光照的完全一樣,最后這個(gè)參數(shù)可以是標(biāo)量,也可以是數(shù)組,這個(gè)要根據(jù)函數(shù)本身的名字來定。 接下來,由于飛機(jī)是清一色的白色,不能達(dá)到真正模擬真實(shí)飛機(jī)的效果,因此我們必須使用紋理貼圖來實(shí)現(xiàn)效果,由于在繪制三角形的過程中,為每個(gè)三角形都定義了紋理坐標(biāo),所以只需要將飛機(jī)外表圖片文件讀到內(nèi)存中,然后利用紋 理貼圖的一些函數(shù)將飛機(jī)紋理貼到生成的飛機(jī)模型上,這樣就可以構(gòu)造出真實(shí)的飛機(jī),飛行器模型如下圖: 正面: 圖 48 飛機(jī)的正面 反面: 基于 OpenGL 三維飛行器程序設(shè)計(jì)與仿真 圖 49 飛機(jī)的反面 材質(zhì)屬性的設(shè)置 對飛行器的出來還包括為其設(shè)置材料屬性,這些屬性決定了飛機(jī)材質(zhì)反射相應(yīng)的光分量的程度, OpenGL根據(jù)材質(zhì)對紅綠藍(lán)光的反射來近似模擬材質(zhì)顏色。 glEnd()。 glTexCoord2f(xtexa,ytexa)。 glTexCoord2f(xtexa,ytexa2)。 glTexCoord2f(xtexa2,ytexa)。 glTexCoord2f(xtexa2,ytexa2)。然后再將一個(gè)水的紋理應(yīng)用到此多邊形,使得場景更加具有真實(shí)感。 我們將在場景中定義一個(gè)高度,以此作為其中水的海平面,可以是使用一個(gè) if語句進(jìn)行判斷,假如某處的高度大于給定的高度值,則這塊地域無水,假如某塊的高度小于給定高度值,則這塊地域顯示水。 完成后的圖像如下圖: 基于 OpenGL 三維飛行器程序設(shè)計(jì)與仿真 圖 45 網(wǎng)格法生成的地面 (3)三角形條帶法 在 OpenGL中有一種繪制圖形的方法,叫做 GL_TRANGLES_LINES,即就是本文中一直采用的繪制三角形條帶模式 ,本文中采用的就是一種最基本的網(wǎng)格法,即就是利用OpenGL的劃線函數(shù)畫出一個(gè)類似網(wǎng)格的平面圖,然后利用地面的構(gòu)成算法來隨機(jī)產(chǎn)生山的地面起伏高度,最終就可以產(chǎn)生隨機(jī)起伏的地面 地面的高度數(shù)據(jù)是利用下面的公式計(jì)算的: )44()1,1()1,1(),1()1,1(.)1,1(5075151( ) %.),(??????????????????f i e l djif i e l djif i e l djif i e l djif i e l dyjif i e l dr a n dyjif i e l d 用數(shù)學(xué)術(shù)語表述就是: ( 1)用兩個(gè) for循環(huán)分別控制 x和 z分量,每次給定一個(gè)隨機(jī)的高度; ( 2)從 z軸開始按列依次進(jìn)行計(jì)算,每列中每一點(diǎn)的高度值都是由其他相鄰的四點(diǎn)的高度值與步驟一中的隨機(jī)高度值相加得到; ( 3)設(shè)定條件,在每次計(jì)算的過程中,假如行數(shù)和列數(shù)的值小于給定條件值,則令行數(shù)西安科技大學(xué)畢業(yè)論文 25 和列數(shù)決定的這點(diǎn)的高度值為 0,所以接近邊緣的高度值均為每次的隨機(jī)高度; ( 4)重復(fù)以上步驟,直到所有平面點(diǎn)都被賦予高度值; 具體實(shí)現(xiàn)過程是: 地面草地的數(shù)據(jù)被存儲為一個(gè)二維的 265*265的點(diǎn)數(shù)組,數(shù)組中的點(diǎn)代表了 x方向上的 255個(gè)四邊形和 y方向上的 255個(gè)四邊形,在程序中,為這些四邊形指定紋理坐標(biāo),從而使草地的紋理能正確的被顯示出來 .在本文中,繪制地面的過程如下: 繪制完成后的地面總體模型如下: 圖 46 三角帶法生成的地面 地面中的水 為了完成這部分的內(nèi)容,我們想想象一下水在自然界中是什么樣子的,海平面的定義就是地球上海洋的平均高度。完成后的基本圖形如下: 西安科技大學(xué)畢業(yè)論文 23 圖 44 高程地形的生成畫面 (2)網(wǎng)格法 網(wǎng)格法主要是利用 OpenGL中的基本劃線函數(shù)繪制類似棋盤格式的畫面,這個(gè)做法主要運(yùn)用 OpenGL中的 glbegain()和 glend()函數(shù),其中 glbegain()函數(shù)中的參數(shù)選擇有許多種,在網(wǎng)格法中采用的是 GL_LINES,即劃線模式。 基于 OpenGL 三維飛行器程序設(shè)計(jì)與仿真 頂點(diǎn) 0 頂點(diǎn) 1 頂點(diǎn) 2 頂點(diǎn) 3 其他頂點(diǎn) 圖: 42 高程地形繪制示意圖 在對地形進(jìn)行紋理映射時(shí),每四個(gè)頂點(diǎn)就要制定一個(gè)紋理,因?yàn)榧y理的形狀是矩形,而四個(gè)頂點(diǎn)就會定義一個(gè)由兩個(gè)三角形組成的四邊形。 為 了 繪 制 地 形 圖 , 我 們 需 要 對 于 沿 z 軸 方 向 的 每 一 行 柵 格 值 使 用GL_TRIANGLE_ATRIP。 在為每個(gè)柵格位置指定頂點(diǎn)坐標(biāo)時(shí),需要基于正在設(shè)置的坐標(biāo)分量而將其柵格位置索引與圖尺度比例因子相乘,例如,當(dāng)定義了一個(gè)頂點(diǎn)的 x軸坐標(biāo)分量時(shí),就要先取得其沿軸的柵格位置并將其與尺度比例因子相乘??梢杂蒙鲜龌叶葓D中的每一位的顏色值來指定每一個(gè)柵格的高度。本 文中的地面本身是被一個(gè)表示草地的簡單紋理所映射,同時(shí)使用了一些水的紋理來增強(qiáng)場景的真實(shí)感。 此天空完成后的大體模型如下所示: 圖 41 場景中的天空 西安科技大學(xué)畢業(yè)論文 21 地面 地面的生成 地面模型的生成 有很多的方法,究其本質(zhì)都是產(chǎn)生網(wǎng)格模型,網(wǎng)格模型都是由一些平面的塊組成的,每個(gè)塊都應(yīng)用不同的紋理,這樣每個(gè)塊只有一個(gè)單獨(dú)的法向量,但擁有其自己的紋理坐標(biāo),所以,在地面的繪制過程中,每個(gè)塊的數(shù)據(jù)可以像類似下面這樣: 1)塊頂點(diǎn)的數(shù)量; 2)塊法向的索引; 3)頂點(diǎn)索引的列表; 4)紋理坐標(biāo)索引的列表; 下面介紹幾種不同的經(jīng)常使用的地形的構(gòu)成方法: ( 1)高程地形 高程地形是指由高程柵格組成的地表或地形系統(tǒng)。 這些函數(shù),同時(shí)需要指定( s,t)坐標(biāo),這個(gè)生成坐標(biāo)的過程可以由 GL_SPHERE_MAP紋理函數(shù)來完成,它的計(jì)算過程如下: (1)u是從原點(diǎn)指向頂點(diǎn)的單位向量(在視覺坐標(biāo)中); (2)n’ 是當(dāng)前法線向量,在變換為視覺坐標(biāo)之后; (3)r是反射向量( x,y,z) ,它是通過 u2n’ n’ u這個(gè)公式計(jì)算的。 Gltexgeni(GL_t,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S)。在為天空貼紋理圖時(shí),需要知道紋理坐標(biāo),在 OpenGL中需要調(diào)用環(huán)境紋理貼圖算法,這個(gè)算法在球體表面上找到一個(gè)與被渲染的物體上的點(diǎn)具有相同正切面的點(diǎn),并且把球體上的這個(gè)點(diǎn)的顏色繪制成那個(gè)物體上對應(yīng)的點(diǎn)的顏色。在本文中,這個(gè)實(shí)現(xiàn)過程如下: gluSphere(quadratic,MAX*50,20,20)。在用計(jì)算機(jī)仿真 3D天空時(shí),半球型天空模型顯然符合真實(shí)世界的天空模型。 (2)球形天空 在本文中,天空主要是繪制一個(gè)球,其他場景都包含在這個(gè)球內(nèi)。構(gòu)成天空盒的載體是一個(gè)長方體,在它的前后左右上 5個(gè)面貼有天空遠(yuǎn)景的五幅圖片,這五幅圖片必須有一個(gè)規(guī)律,即就是: 1).圖形為 BMP位圖格式,尺寸(像素點(diǎn))為 2的 N次方( 32,64??); 2).頂圖的 4邊與前后左右圖的上 邊相連; 3).前后左右的 4幅圖必須首尾相連; 在編程的時(shí)候,按順序標(biāo)記紋理坐標(biāo)就可以構(gòu)造出所謂的天空盒,以此來模擬真實(shí)的天空。 屏幕顯示 在 OpenGL中,三維圖形最終要顯示在屏幕上,而屏幕是一個(gè)二維平面,在這個(gè)將三維圖形變成二維圖形時(shí)要經(jīng)歷以下過程: 基于 OpenGL 三維飛行器程序設(shè)計(jì)與仿真 圖 32 頂點(diǎn)變換軌道 這中間涉及的一些知識將在上面已經(jīng)詳細(xì)介紹,這里主要是了解計(jì)算機(jī)顯示三維場景的大致流程,其中主要涉及上述的三種變換:視圖變換,模型變換以及投影變換 透視分割 歸一化設(shè)備 坐標(biāo) 視圖變換 窗 窗口坐標(biāo) ( x,y) 模型視圖矩陣 投影矩陣 剪裁坐標(biāo) 定點(diǎn)坐標(biāo) (x,y,z,w) 眼坐標(biāo) 西安科技大學(xué)畢業(yè)論文 19 4. 場景的構(gòu)建 在本文中,對于飛行器的仿真,場景構(gòu)建可謂是重中之重,構(gòu)建出好的模型對于仿真的真實(shí)性以及實(shí)效性都有很大的幫助,場景的構(gòu)建大的方面主要涉及飛機(jī)的構(gòu)建,天空的構(gòu)建,地面的生成,以及像光照,霧等效果的實(shí)現(xiàn),下面就依次來講述文中各個(gè)模型是 如何生成的。由于創(chuàng)建一個(gè)顯示列表需要為其分配內(nèi)存,因此當(dāng)不在使用換一個(gè)顯示列表的時(shí)候,可以直接將其銷毀以防止內(nèi)存泄露。 顯示列表使用之前先要創(chuàng)建,這個(gè)可以使用 glGenList()函數(shù)來完成此項(xiàng)任務(wù),然后將相關(guān)的命令放入相應(yīng)的顯示列表。Y軸和 X軸它們兩個(gè)都垂直于 Z軸, X明顯的垂直于up向量,因?yàn)?up向量一般情況下都是沿 Y軸向上的,這個(gè)向量規(guī)定了我們視點(diǎn)向上的方向,因此可以得知 X軸垂直于 up和 Z的叉積;當(dāng) X軸計(jì)算出來以后,剩下的就是 Y軸向量,它必須垂直于 X軸和 Z軸,也就是等于 X軸和 Z軸分量的叉積,得出這幾個(gè)坐標(biāo)軸分量的向量以后,就可以重新構(gòu)建坐標(biāo)系,也就是可以實(shí)現(xiàn)視點(diǎn)的移動,這就是 glLookAt()可以實(shí)現(xiàn)視點(diǎn)移動的原理 顯示列表
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1