【正文】
看成高程地形,那么就可以知道該如何處理水了。 glVertex3f(xrange2MAX,1,zrange1MAX)。材質(zhì)也三個和光一樣的顏色屬性:環(huán)境光,散射光以及鏡面反射光。這是實現(xiàn)飛機的上下俯沖效果; glTranslatef(planeX,planeY,planeZ)。 Throttle*=.99。減速時同樣如此。 glLoadIdentity()。 在本文中,是通過鍵盤對飛機進行控制,對鍵盤的處理有很多中方法,本文是采用一個數(shù)組,數(shù)組存儲了鍵盤的 ASCII值,當某一按鍵按下時,就會產(chǎn)生一個按鍵事件,并放入到消息隊列中,程序中的回調(diào)函數(shù)處理這類事件, 使它產(chǎn)生程序設計的功能。同樣的還有在控制視點的過程中也會用到矢量運算,在本論文中,飛機默認是一直向前飛行,此時就會利用漫游原理,在不進行任何其他的操作時,飛機是沿著( 0, 0, z)一直向前飛行,此時對于視點的控制就會利用 gllookat()函數(shù),此函數(shù)包括視點,視點方向,以及向上的向量,通過在程序中設定相應的變量值,就可以實現(xiàn)這些效果。 glVertex3f(xrange1MAX,1,zrange1MAX)。水的繪制過程中,首先 基于 OpenGL 三維飛行器程序設計與仿真 繪制一個一組相連接的三角形組成的邊 帶,在繪制過程中,順便為每個頂點指定紋理坐標: glBegin(GL_TRIANGLE_STRIP)。因此定義紋理坐標時,應該每個四邊形對應一個紋理,像下面這樣: 頂點 0 頂點 1 glTexCoord2f(,0) glTexCoord2f(,0) 頂點 2 頂點 3 glTexCoord2f(,0) glTexCoord2f(,0) 其他頂點 圖 43 高程紋理 坐標生成過程 每個四邊形對應一個紋理,這樣就可以得到一個精致的,看起來平滑的地形。 在實際使用中,我們可以將一個 256*256的灰度圖載入到內(nèi)存中,其圖中的每 一位像素值表示高程中的一個柵格位置,由此而確定每一個柵格位置處的高度。 在自動生成生成紋理時,可以調(diào)用: 基于 OpenGL 三維飛行器程序設計與仿真 Gltexgeni(GL_s,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)。下圖便是繪制成型的天空盒。 由于飛機模型是由基本的多邊形圖形組合而成的,所以在繪制飛機的過程中,需要頻繁的調(diào)用繪制基本圖形的函數(shù),所以可以為其創(chuàng)建一個顯示列表,將繪制函數(shù)放在這些顯示列表中,在程序中可以隨時調(diào)用顯示列表來完成圖形的繪制,大大節(jié)約開銷。 glLookAt(視點,目標點,視點方向 ),其中視點是一個三維坐標量。如果想要使用多個紋理對象,那么每次要使用不同的紋理時都要調(diào)用 glBindTexture()函數(shù)來綁定相應的紋理對象。 // If Not Return NULL } File=fopen(Filename,r)。在本文的仿真中,紋理圖案使用的是現(xiàn)成的圖片。 3D空間中平行的直線在觀察者眼里并不總是平行的。這種投影世紀定義了可視區(qū)域,并建立裁剪平面。原因是視圖變換的效果相當于根據(jù)視覺坐標系統(tǒng)移動當前所使用的坐標系統(tǒng)。 視圖變換 視圖變換是場景所應用的第一個變換。在介紹其他坐標變換之前,先說OpenGL中兩個基本的變換,這兩個變換在其他變換中起著重要的作用,是其他的變換的基礎(chǔ)。但是 RC 不同于其他的 DC, 它只需要一個句柄就可以任意調(diào)用 OpenGL 函數(shù) , 而其他 DC 調(diào)用每個 GDI 函數(shù)時都需要一個句柄。 基于 OpenGL 三維飛行器程序設計與仿真 3. 程序涉及知識詳解 基本框架 構(gòu)建應用程序框架 應用 Visual C++ 建立一個基于 MFC 的應用程序框架 , 并將 VC 庫文件、 和 。第二種方法對紋理的要求非常高,如果紋理使用得不好,在一個比較大的多邊形上的紋理就容易產(chǎn)生拉伸變形的副作用。 然后在場景中加入了天空紋理,構(gòu)建了簡單的天空環(huán)境,同時使用霧化、光照等效果使空地作戰(zhàn)環(huán)境產(chǎn)生真實感,最后將制作飛行器,該飛行器是由基本的圖形組合而成的,最后根據(jù)運動軌跡方程實時計算出飛機的飛行位置,對運動模型進行實時繪制。 本文研究的目的及主要內(nèi)容 由于計算機軟硬技術(shù)水平的限制,科學計算在早起只能以批處理方式實現(xiàn),而不能進行交互處理,對于大量的輸出數(shù)據(jù),只能人工方式處理,或者用繪圖工具輸出二維圖形,這種處理方式不僅效率低下,而且丟失大量的信息。 在 Windows操作系統(tǒng)中, OpenGL可以完全替代圖形設備接口,圖形設計接口的設計使得對于 Windows程序員來說圖形硬件是完全不可見的,它提供了抽象層從而避免了程序員處理與硬件相關(guān)的問題。是為游戲,造型以及 CAD之類的圖形應用程序而設計的。怎樣把海底地貌地形通過計算機形象地、直觀地顯示出來 , 實現(xiàn)飛行器場景的逼真顯現(xiàn) , 就是本系統(tǒng)的研究目的。最后還針對實際制作過程中提出了一些建議以及改進的方法。 【關(guān)鍵字】 OpenGL; C++;飛行器;紋理貼圖;仿真 【論文類型】 設計性 基于 OpenGL 三維飛行器程序設計與仿真 Title: Aircraft program design and simulation based an OpenGL Major: Name: Signature: Supervisor: Signature: Abstract The paper uses C + + programming design and simulate the scene of aircraft flight based on the OpenGL and apply Visual C + + to using the real aircraft to train new operators ,the risks and costs are high when in the actual manipulation, so at home and abroad,the effective method of training operators is through the training simulators in the laboratory .The article uses texture mapping method to achieve a simulation of the sky and the ground, aircraft polygons and use the keyboard to the operation of the aircraft, at the same time ,adding the fog and light to increase the realism of the results of the program is in line with the expectations, further more ,it have a significance effect on the actual manipulation .Finally, for the actual process of making a number of remendations as well as improved methods. 【 Key words】 OpenGL。 目前 , OpenGL 在虛擬現(xiàn)實領(lǐng)域是功能較強 , 最具發(fā)展前途的實現(xiàn)工具。它有意識的只提供底層的繪制程序功能,這就使得程序員有了更多的控制權(quán)和靈活性。但是圖形設備接口是為一般的應用程序而提供的,因此不能滿足游戲所必須的速度要求。近年來,隨著計算機的普及和科學技術(shù)的迅速發(fā)展,天氣,衛(wèi)星以及地震勘測領(lǐng)域中的數(shù)據(jù)量越來越大,可視化技術(shù)就成為科學研究中必不可少的手段。 基于 OpenGL 三維飛行器程序設計與仿真 2. 程序功能概述 這一章節(jié)主要介紹飛行器飛行的具體場景的構(gòu)建以及在程序中它們是如何生成的,還有就是主要介紹程序各個部分的功能以及場景中與飛行器相關(guān)的其他模型的構(gòu)建過程。此外,霧化設置也會產(chǎn)生問題,如果霧的設置靠近觀察點,則天空的顏色會變淡甚至沒有。同時還要修改工程 中的相關(guān)參數(shù) ,即將 _CONLOLE改為 _WINDOWS,在 link項,在對象、模塊欄的前面加上 OpenGL 函數(shù)庫的調(diào)用有效。使用時先通過 wglCreateContext ( ) 函數(shù)創(chuàng)建一個 RC,然后調(diào)用 wglMakeCurrent ( ) 函數(shù)啟動它 , 就可在所定義的窗口內(nèi)調(diào)用 OpenGL 函數(shù)繪制飛行器了。為了進行變換,基本就是用變換矩陣乘以想要變換的點,得到的結(jié)果 就是變換過的新的點,比如有一個點 P和變換矩陣 M,那么為了用變換矩陣 M來變換點 P,從而得到結(jié)西安科技大學畢業(yè)論文 11 果點 P’,應該像下面這樣做 : PMP *39。它用于確定場景的拍攝點。然后,根據(jù)最新修改的坐標系統(tǒng)進行其他所有的后續(xù)變換。裁剪平面是 3D空間的平面方程式, OpenGL用它來確定幾何圖形能否被觀察者所看到。透視投影的優(yōu)點是不必判斷直線將在什么地方交匯,也不必操心遠處的物體是如何變小的。紋理可以是 2D, 3D, 4D紋理等,但我們文中使用的是 2D紋理,它通常是從圖像或者圖片文 件中載入的,文中使用的是從一幅 256*256的現(xiàn)成圖片中載入紋理數(shù)據(jù),它是在程序運行是才生成紋理。 // Check To See If The File Exists if (File) Does The File Exist? { fclose(File)。 最后當紋理對象被綁定到其數(shù)據(jù)上以后,可以調(diào)用 glBindTexture()函數(shù)來將此紋理設置為當前的紋理狀態(tài),這樣在繪制多邊形完成后,就可以調(diào)用相應的紋理來進行貼圖。 X 量的變化就像是我們在場景中橫向移動, Y 量的變化就像是我們的身體高度的變化, Z 量的變化就像是我們在場景中前后移動。 顯示列表使用之前先要創(chuàng)建,這個可以使用 glGenList()函數(shù)來完成此項任務,然后將相關(guān)的命令放入相應的顯示列表。 (2)球形天空 在本文中,天空主要是繪制一個球,其他場景都包含在這個球內(nèi)。 Gltexgeni(GL_t,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S)??梢杂蒙鲜龌叶葓D中的每一位的顏色值來指定每一個柵格的高度。完成后的基本圖形如下: 西安科技大學畢業(yè)論文 23 圖 44 高程地形的生成畫面 (2)網(wǎng)格法 網(wǎng)格法主要是利用 OpenGL中的基本劃線函數(shù)繪制類似棋盤格式的畫面,這個做法主要運用 OpenGL中的 glbegain()和 glend()函數(shù),其中 glbegain()函數(shù)中的參數(shù)選擇有許多種,在網(wǎng)格法中采用的是 GL_LINES,即劃線模式。 glTexCoord2f(xtexa2,ytexa2)。 glEnd()。 在本文中,將視點的位置設在飛機上,視點將隨飛機的移 動而移動和旋轉(zhuǎn),飛機的方向是由俯仰,偏動還側(cè)偏來實現(xiàn)的,也就是相當于飛機的旋轉(zhuǎn)角度,相應的程序如下: void planeview( GLfloat planeX,GLfloat ploatY,GLfloatZ,GLfloat roll,GLfloat pitch,GLfloat yaw) { glRotatef(roll,)。這樣我們就可以簡單方便的操作鍵盤,在文中主要運用了一下幾個按鍵,方向鍵上下左右分別控制飛機的上下左右飛行,具體實現(xiàn)如下: if(nChar==VK_UP) { pitch = 15 / (ABS(Speed)+1)。 glTranstratef(,_throttle)。 同時,飛機可以實現(xiàn)加速和減速,飛機的加速和減速實際上就是向前移