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

正文內(nèi)容

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

2025-10-01 18:38 本頁(yè)面
 

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