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

正文內(nèi)容

飛行姿態(tài)的三維動態(tài)實時顯示本科畢業(yè)論文(編輯修改稿)

2024-10-01 18:38 本頁面
 

【文章內(nèi)容簡介】 )。本章將詳細(xì)地講述顯 示列表的基本概論、創(chuàng)建、執(zhí)行、管理以及多級顯示列表的應(yīng)用等內(nèi)容 。 5 顯示列表的優(yōu)勢 OpenGL 顯示列表的設(shè)計能優(yōu)化程序運行性能,尤其是網(wǎng)絡(luò)性能。它被設(shè)計成命令高速緩存,而不是動態(tài)數(shù)據(jù)庫緩存。也就是說,一旦建立了顯示列表,就不能修改它。因為若顯示列表可以被修改,則顯示列表的搜索、內(nèi)存管理的執(zhí)行等開銷會降低性能。 采用顯示列表方式繪圖一般要比瞬時方式快,尤其是顯示列表方式可以大量地提高網(wǎng)絡(luò)性能,即當(dāng)通過網(wǎng)絡(luò)發(fā)出繪圖命令時,由于顯示列表駐留在服務(wù)器中,因而使網(wǎng)絡(luò)的負(fù)擔(dān)減輕到最小。另外,在單用戶的機(jī)器上,顯示列表同樣可以提高效率。因為一旦顯示列表被處理成適合于圖形硬件的格式,則不同的 OpenGL 實現(xiàn)對命令的優(yōu)化程度也不同。例如旋轉(zhuǎn)矩陣函數(shù) glRotate*(),若將它置于顯示列表中,則可大大提高性能。因為旋轉(zhuǎn)矩陣的計算并不簡單,包含有平方、三角函數(shù)等復(fù)雜運算,而在顯示列表中,它只被存儲為最終的旋轉(zhuǎn)矩陣,于是執(zhí)行起來如 同硬件執(zhí)行函數(shù)glMultMatrix()一樣快。一般來說,顯示列表能將許多相鄰的矩陣變換結(jié)合成單個的矩陣乘法,從而加快速度。 顯示列表的適用場合 并不是只要調(diào)用顯示列表就能優(yōu)化程序性能。因為調(diào)用顯示列表本身時程序也有一些開銷,若一個顯示列表太小,這個開銷將超過顯示列表的優(yōu)越性。下面給出顯示列表能最大優(yōu)化的場合: 矩陣操作 大部分矩陣操作需要 OpenGL 計算逆矩陣,矩陣及其逆矩陣都可以保存在顯示列表中。 光柵位圖和圖像 程序 定義的光柵數(shù)據(jù)不一定是適合硬件處理的理想格式。當(dāng)編譯組織一個顯 列表時,OpenGL 可能把數(shù)據(jù)轉(zhuǎn)換成硬件能夠接受的數(shù)據(jù),這可以有效地提高畫位圖的速度。 光、材質(zhì)和光照模型 當(dāng)用一個比較復(fù)雜的光照環(huán)境繪制場景時,可以為場景中的每個物體改變材質(zhì)。但是材質(zhì)計算較多,因此設(shè)置材質(zhì)可能比較慢。若把材質(zhì)定義放在顯示列表中,則每次改換材質(zhì)時就不必重新計算了。因為計算結(jié)果存儲在表中,因此能更快地繪制光照場景。 紋理 因為硬件的紋理格式可能與 OpenGL 格式不一致,若把紋理定義放在顯示列表中,則在編譯顯示列表時就能對格式進(jìn)行轉(zhuǎn)換,而不是在執(zhí)行中進(jìn)行,這樣就能大大提高效率。 多邊形的圖案填充模式 即可 將定義的圖案放在顯示列表中。 6 創(chuàng)建顯示列表 OpenGL 提供類似于繪制圖元的結(jié)構(gòu)即 glBegin()與 glEnd()的形式創(chuàng)建顯示列表,其相應(yīng)的函數(shù)為: void glNewList(GLuint list,GLenum mode)。 說明一個顯示列表的開始,其后的 OpenGL 函數(shù)存入顯示列表中,直至調(diào)用結(jié)束表的函數(shù)(見下面)。參數(shù) list 是一個正整數(shù),它標(biāo)志唯一的顯示列表。參數(shù) mode 的可能值有 GL_COMPILE 和 GL_COMPILE_AND_EXECUTE。若要使后面的函數(shù)語句只存入而不執(zhí) 行,則用 GL_COMPILE;若要使后面的函數(shù)語句存入表中且按瞬時方式執(zhí)行一次,則用 GL_COMPILE_AND_EXECUTE。 void glEndList(void)。 標(biāo)志顯示列表的結(jié)束。 執(zhí)行顯示列表 在建立顯示列表以后就可以調(diào)用執(zhí)行顯示列表的函數(shù)來執(zhí)行它,并且允許在程序中多次執(zhí)行同一顯示列表,同時也可以與其它函數(shù)的瞬時方式混合使用。顯示列表執(zhí)行的函數(shù)形式如下: void glCallList(GLuint list)。 執(zhí)行顯示列表。參數(shù) list 指定被執(zhí)行的顯示列表。顯示列表中的函數(shù)語句按它們被存放的順序依次執(zhí)行;若 list 沒有定義,則不會產(chǎn)生任何事情。 管理顯示列表 在上一節(jié)例子中,我們使用了一個正整數(shù)作為顯示列表的索引。但是在實際應(yīng)用中,一般不采用這種方式,尤其在創(chuàng)建多個顯示列表的情況下。如果這樣做,則有可能選用某個正在被占用的索引,并且覆蓋這個已經(jīng)存在的顯示列表,對程序運行造成危害。為了避免意外刪除,可以調(diào)用函數(shù) glGenList()來產(chǎn)生一個沒有用過的顯示列表,或調(diào)用 glIsList()來決定是否指定的顯示列表被占用。此外,在管理顯示列表的過程中,還可調(diào)用函數(shù) glDeleteLists()來刪除一個或一個范圍內(nèi)的顯示列表。下面分別介紹這些函數(shù): GLuint glGenList(GLsizei range)。 分配 range 個相鄰的未被占用的顯示列表索引。這個函數(shù)返回的是一個正整數(shù)索引值,它是一組連續(xù)空索引的第一個值。返回的索引都標(biāo)志為空且已被占用,以后再調(diào)用這個函數(shù)時不再返回這些索引。若申請索引的指定數(shù)目不能滿足或 range 為 0則函數(shù)返回 0。 7 GLboolean glIsList(GLuint list)。 詢問顯示列表是否已被占用的情況。若索引 list 已被占用,則函數(shù)返回 TURE;反之,返回 FAULSE。 void glDeleteLists(GLuint list,GLsizei range)。 刪除一組連續(xù)的顯示列表,即從參數(shù) list 所指示的顯示列表開始,刪除 range個顯示列表,并且刪除后的這些索引重新有效。若刪除一個沒有建立的顯示列表則忽略刪除操作。 當(dāng)建立一個與已經(jīng)存在的顯示列表索引相同的顯示列表時, OpenGL 將自動刪除舊表。 3 三維模型操作及場景繪制原理 8 3 三維模型操作及場景繪制原理 構(gòu)建應(yīng)用程序框架 應(yīng)用 Visual C++ 建立一個基于 MFC 的應(yīng)用程序框架 , 并將 VC 庫文件 、 和 包含在應(yīng)用程序中。同時還要修改工程中的相關(guān)參數(shù) , 即將 _CONLOLE 改為 _WINDOWS, 在 link 項,在對象、模塊欄的前面加上 為使 OpenGL 函數(shù)庫的調(diào)用有效。接下來應(yīng)設(shè)置渲染窗口。 OpenGL 的渲染處理完全不同于 Windows 的圖形設(shè)備接口 GDI。要使 Windows 的窗口格式為 OpenGL 所接受 ,需進(jìn)行下面的其他設(shè)置。 建立圖形操作描述表 OpenGL 作圖窗口必須設(shè)置為 WM_CLIPSIBLINGS 和 WM_CLIPCHILDREN 風(fēng)格。在Windows98/2020 系統(tǒng)下 , 窗口程序首先要處理設(shè)備描述表 (Device Contexts, DC), 它包括若干在窗口上如何顯示圖形的信息。而在 OpenGL 程序中 , 必須創(chuàng)建圖形操作描述表 ,這是 DC 中專用于 OpenGL 的一種。但是 RC不同于其他的 DC,它只需要一個句柄就可以任意調(diào)用 OpenGL 函數(shù) , 而其他 DC調(diào)用每個 GDI 函數(shù)時都需要一個句柄。使用時先通過 wglCreateContext () 函數(shù)創(chuàng)建一個 RC,然后調(diào)用 wglMakeCurrent() 函數(shù)啟動它 , 就可在所定義的窗口內(nèi)調(diào)用 OpenGL 函數(shù)繪制飛行器了。 設(shè)置像素格式 像素格式是對 Win32 API 的另一種擴(kuò)展,它指定了設(shè)備的繪圖屬性 , 包括繪圖界面的顏色表示模式、顏色位數(shù)、累積緩存區(qū)、深度緩存區(qū)和模板緩存區(qū)的位數(shù)。每個OpenGL 顯示設(shè)備都支持某一特定的像素格式。在繪制創(chuàng)建環(huán)境之前,像素格式 必須被設(shè)置和創(chuàng)建。像素格式用 PIXELFORMATDESCRIPTOR 結(jié)構(gòu)來表示 , 通過設(shè)置這結(jié)構(gòu)的成員值 使之支持 OpenGL。建立了圖形操作描述表并初始化 PIXELFORMATDESCRIPTOR結(jié)構(gòu)后 , 下一步就是將此結(jié)構(gòu)傳遞給 ChoosePixelFormat()函數(shù),此函數(shù)會為設(shè)備描述表選擇像素格式 , 最后調(diào)用 SetPixelFormat()將其設(shè)置為當(dāng)前像素格式。 9 坐標(biāo)變換 變換允許我們移動,旋轉(zhuǎn)和操作 3D 世界中的實體。在介紹其他坐標(biāo)變換之前,先說 OpenGL 中兩個基本的變換,這兩個變換 在其他變換中起著重要的作用,是其他的變換的基礎(chǔ)。為了進(jìn)行變換,基本就是用變換矩陣乘以想要變換的點,得到的結(jié)果就是變換過的新的點,比如有一個點 P和變換矩陣 M,那么為了用變換矩陣 M來變換點 P,從而得到結(jié)果點 P’ ,應(yīng)該像下面這樣做 : 1) 為了進(jìn)行變換,我們要使用在線性代數(shù)中被稱為的齊次坐標(biāo)。 首先說 OpenGL 中的平移:要對一個點進(jìn)行平移變換,只需要將每個坐標(biāo)軸的增量值 加上要平移的點的原始坐標(biāo)就行了。也就是一系列 點和矩陣相乘的操作:例如: 有個平移矩陣 : 如果要用這個矩陣平移一個點,只要用這個矩陣乘以這個點的矢量矩陣,就像下面這樣: 10 在本文中,飛機(jī)在沒有任何操作的情況下一直沿 z 軸飛行,這個操作過程調(diào)用的是 OpenGL 中的 gltranslate()函數(shù),它的內(nèi)部就封裝了上述的處理過程,對飛機(jī)模型所處 的位置進(jìn)行上述變換,使得飛機(jī)一直向前飛行; 接下來說旋轉(zhuǎn)變換: 旋轉(zhuǎn)變換主要運用了三角學(xué),而且關(guān)于每個坐標(biāo)軸的旋轉(zhuǎn)都有相應(yīng)的不同的變換矩陣: 關(guān)于 x 坐標(biāo)軸的旋轉(zhuǎn)變換矩陣定義如下: 在關(guān)于 x軸旋轉(zhuǎn)過程中,其 x軸保持不變,關(guān)于 y軸的選裝也是同樣的道理,要保持 y軸的坐標(biāo)值不變,其變換矩陣如下所示: 同樣,關(guān)于 z軸的旋轉(zhuǎn),保持 z軸值不變: 如果要讓一個點繞某一坐標(biāo)軸旋轉(zhuǎn),就用此坐標(biāo)軸的旋轉(zhuǎn) 矩陣 乘以這個點,例如,講一個點繞 z軸旋轉(zhuǎn),就像下面這樣: 11 然后用這個點去和 Z 軸的變換矩陣相乘,即得到這一點旋轉(zhuǎn)后的結(jié)果: 在飛機(jī)左右旋轉(zhuǎn)或者滾降的過程中,飛機(jī)所在位置都是圍繞 Y軸或者 X軸在旋 轉(zhuǎn),雖然可以直接調(diào)用 OpenGL 中的 glrotate()函數(shù),但這個函數(shù)內(nèi)部的計算過程全部類似于上面的處理過程。 定義了頂點以后,但在屏幕上顯示他們之前一共會發(fā)生 3中類型的變換:視圖變換,模型變換和投影變換。其中一些關(guān)鍵名詞的意思如下: 視圖:指定觀察者或照相機(jī)的位置; 模型:在場景中移動物體; 模型視圖:描述視圖和模型變換的對偶性; 投影:改變可視區(qū)域的大小或者重新設(shè)置它的形狀; 視口:這是一種偽變換,只是對窗口上的最終輸出進(jìn)行縮放; 視覺坐標(biāo)是進(jìn)行變換的一個非常重要的概念,它是根據(jù)觀察者的角度而言的,與可能發(fā)生的變換無關(guān),我們可以把它看成是“絕對的”屏幕坐標(biāo)。因此,視覺坐標(biāo)表示一種固定的坐標(biāo)系統(tǒng)。 視圖變換 視圖變換是場景所應(yīng)用的第一個變換。它用于確定場景的拍攝點。在默認(rèn)情況下,在透視投影中,觀察者是從原點向 Z 軸的負(fù)方向望去。這個觀察點系相對于視覺坐標(biāo)系統(tǒng)進(jìn)行移動,以提供一個特定的拍攝點。當(dāng)觀察點位于原點時,場景中所繪制的 Z值為正的物體就位于觀察者的后面。視圖變換允許把觀察點放在自己所希望的任何位置,并允許在任何方向上觀察場景。確定視圖變換就像是在場景中放置照相機(jī)病讓他指向某個方向。作為總體原則,在進(jìn)行任何變換之前必須先指定視圖變換。原因是視圖變換的效果相當(dāng)于根據(jù)視覺坐標(biāo)系統(tǒng)移動當(dāng)前所使用的坐標(biāo)系統(tǒng)。然后,根據(jù)最新修改的坐標(biāo)系統(tǒng)進(jìn)行其他所有的后續(xù)變換。從本質(zhì)上說,它只是在繪制物體之前應(yīng)用到一個虛擬物體之上的一種模型變換。 模型變換 模型變換用于對模型以及模型內(nèi)部的特定物體進(jìn)行操縱。它可以移動物體, 12 對它們進(jìn)行旋轉(zhuǎn),或者 對它們進(jìn)行縮放。場景或者物體的最終外觀很大程度上取決于模型變換的應(yīng)用順序。對于移動和旋轉(zhuǎn),情況更是如此。 投影變換 投影變換是在模型視圖變換之后應(yīng)用到物體的頂點之上的。這種投影實際 定義了可視區(qū)域,并建立裁剪平面。裁剪平面是 3D 空間的平面方程式, OpenGL用它來確定幾何圖形能否被觀察者所看到。更為具體的說,投影變換制訂了一個完成的場景(在所有的模型變換都已經(jīng) 完成之后)投影到屏幕上的最終圖像,它主要包括正投影以及透視投影, 在本文中主要利用透視投影。在正投影中,屏幕上所繪制的所有多邊形都按照指定的相對大小出現(xiàn)。直線和多邊形使用平行線直接映射到 2D 屏幕上。這意味著不管物體有多遠(yuǎn),都仍然按照相同的大小進(jìn)行繪制,平面的出現(xiàn)屏幕上。這種類型的頭型通常用于渲染二維圖像和二維圖形。透視投影所顯示的場景更接近真實,他的標(biāo)志性特點就是透視縮短,他會使遠(yuǎn)處的物體看上去比相同大小的近處物體更小一些。 3D 空間中平行的直線在觀察者眼里并不總是平行的。透視投影的優(yōu)點是不必判斷直線將在什么地方交匯,也不必操心遠(yuǎn)處的物體是如何變小的。我們所需要做的就是用模 型視圖變換指定場景,然后應(yīng)用透視視圖。 視區(qū)變換 視口變換:當(dāng)上面的操作全部完成以后,最后所獲得的是場景的而為投影,將被投影到屏幕上的某個窗口。這種到窗口坐標(biāo)的映射是最后一個完成的變換,成為視口變換。通常,顏色緩沖區(qū)和窗口像素之間存在著一對一的對應(yīng)關(guān)系。 紋理映射 紋理 究其本質(zhì),紋理就是有些圖案,其范圍可能包括了從條紋和簡單的形狀到自然圖案,可以是程序員自己生成的,也可以是現(xiàn)成的圖片。也可以說,紋理就是一個函數(shù) textture(s,t),對于 s 和 t 在 0 到 1之間的取值產(chǎn)生一個顏色或者亮度值。在本文的仿真中,紋理圖案使用的是現(xiàn)成的圖片。紋理可以是 2D, 3D,4D紋理等,但我們文中使用的是 2D 紋理,它通常是從圖像或者圖片文件中載入的,文中使用的是從一幅 256*256 的現(xiàn)成圖片中
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1