OpenGL完全教程 第二章 OpenGL 工作機(jī)制_第1頁(yè)
OpenGL完全教程 第二章 OpenGL 工作機(jī)制_第2頁(yè)
OpenGL完全教程 第二章 OpenGL 工作機(jī)制_第3頁(yè)
OpenGL完全教程 第二章 OpenGL 工作機(jī)制_第4頁(yè)
OpenGL完全教程 第二章 OpenGL 工作機(jī)制_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、OpenGL 完全教程 第二章 OpenGL 工作機(jī)制作者:何詠 日期:2006-2-3 20:49:10 點(diǎn)擊:3513如需轉(zhuǎn)載本文,請(qǐng)聲明作者及出處。第二章 OpenGL 工作機(jī)制要使用好OpenGL,了解它的工作機(jī)制是非常必要的。學(xué)習(xí)完本章內(nèi)容之后,你就能理解上一章示例程序中在繪圖之前那些工作的意義了。在本章內(nèi)容中,你將了解:如何在OpenGL 中表示3D 物體OpenGL 的渲染流水線OpenGL 中函數(shù)的命名規(guī)則2.1 OpenGL中3D 物體的表示在3D 空間中,場(chǎng)景是物體或模型的集合。在3D 圖形渲染中,所有的物體都是由三角形構(gòu)成的。這是因?yàn)橐粋€(gè)三角形可以表示一個(gè)平面,而3D 物

2、體就是由一個(gè)或多個(gè)平面構(gòu)成的。比如下圖表示了一個(gè)非常復(fù)雜的3D地形,它門(mén)也不過(guò)是由許許多多三角形表示的。 渲染后的地形面貌復(fù)雜的地形也是由三角形構(gòu)成的(圖片來(lái)自 本站 Terrian Editor因此,在OpenGL 中,我們只要指定一個(gè)或多個(gè)三角形,就可以表示任意3D 物體。那么如何指定三角形呢?OpenGL提供三種指定三角形的方法:即單個(gè)三角形、三角條形和三角扇形。指定單個(gè)三角形。這是最簡(jiǎn)單,最直接的方法。即調(diào)用特定的OpenGL 函數(shù),傳入三個(gè)頂點(diǎn)坐標(biāo),指定一個(gè)三角形。如下圖: 三角條形。這種方式適合于同時(shí)繪制多個(gè)三角形,且這些三角形之間至少存在一條公共邊。一個(gè)三角條形是在單個(gè)三角形的基

3、礎(chǔ)上,再指定一個(gè)或多個(gè)頂點(diǎn)。這些頂點(diǎn)按照次序同上一頂點(diǎn)一起構(gòu)成一 個(gè)新的三角形。下圖演示了這種推進(jìn)過(guò)程。 三角扇形。三角扇形中,所有頂點(diǎn)按照一個(gè)中心點(diǎn)成扇形排列。如下圖,是一個(gè)以V1為中心點(diǎn)的三角扇形。 既然使用三角形就可以表示任何圖形,為什么還要使用三角條形和三角扇形呢?這是因?yàn)樵贠penGL 渲染流水線中,對(duì)于每個(gè)頂點(diǎn)都要進(jìn)行變換運(yùn)算 。而對(duì)于一些連接在一起的三角形組來(lái)說(shuō),使用三角條形或三角扇形就減少了頂點(diǎn)的數(shù)目,這意味著減少了對(duì)頂點(diǎn)的運(yùn)算,因此提高了渲染速度。例如,上圖中第三個(gè)三角扇形,該扇形描述了4個(gè)三角形。如果把這四個(gè)三角形都一一作為單個(gè)三角形傳給OpenGL 的話,我們需要3*4=

4、12個(gè)頂點(diǎn),而使用了三角扇形之后,我們只使用了6個(gè)頂點(diǎn)。這節(jié)約了一半的運(yùn)算量!2.2 OpenGL 的渲染流水線當(dāng)我們把要繪制的三角形傳給OpenGL 之后,OpenGL還要做許多工作以完成3D 空間到屏幕的投影。這一系列的過(guò)程被稱為OpenGL 的渲染流水線。一般地,OpenGL的渲染流程如下: 當(dāng)一個(gè)場(chǎng)景確定之后,如果我們想移動(dòng)某個(gè)物體,或者要實(shí)現(xiàn)場(chǎng)景內(nèi)的漫游,就必須進(jìn)行模型視圖的變換。模型視圖變換可以根據(jù)需要,移動(dòng)或旋轉(zhuǎn)一個(gè)或多個(gè)物體。例如,如果我們想在3D 空間中沿著Z 軸向前走的話,只需要把所有物體向-Z方向移動(dòng)n 個(gè)單位即可。如果我們要 向左看,就應(yīng)該把所有物體沿著Y 軸渲染向右旋

5、轉(zhuǎn)N 個(gè)角度。下圖演示了這個(gè)過(guò)程。 在一些封閉的3D 物體中,朝著物體內(nèi)部的面總是不可見(jiàn)的。對(duì)于這些永遠(yuǎn)不可見(jiàn)的平面,我們可以使用背面隱藏忽略對(duì)它的繪制以提高渲染速度。為了實(shí)現(xiàn)背面隱藏,我們?cè)诶L制三角形的時(shí)候必須注意三角形的繞法。一般的,OpenGL 默認(rèn)為逆時(shí)針 纏繞的面是正面。如下圖所示的三角形中,如果把頂點(diǎn)按照V1->V3->V2的順序傳給OpenGL,那么OpenGL 就會(huì)認(rèn)為這個(gè)三角形朝著屏幕的面是正面。 使用背面隱藏,就要求我們?cè)诎褕D形傳給OpenGL 的時(shí)候要始終遵守正面使用逆時(shí)針繞法的規(guī)定。要開(kāi)啟背面隱藏的功能,只需調(diào)用函數(shù):glE n abl e(GL_CULL

6、_FACE ;當(dāng)然,我們也可以改變OpenGL 的設(shè)置,決定是對(duì)物體的正面還是背面進(jìn)行隱藏。調(diào)用如下函數(shù):glCullFac e(GL_FRO NT ;來(lái)隱藏正面,也可調(diào)用glCullFac e(GL_BACK ;來(lái)隱藏背面。如果你開(kāi)啟了光照渲染,并且為每個(gè)頂點(diǎn)指定了它的法線,在此過(guò)程中,OpenGL將根據(jù)頂點(diǎn)的法線和光源的位置及性質(zhì)重新計(jì)算頂點(diǎn)的顏色。使用光照效果可以大大提高畫(huà)面的真實(shí)性。我們將在第六章 中講到光照。剪裁就是把那些不在視見(jiàn)空間,或者一半在可視空間中的物體剔除或剪裁,以保證不該出現(xiàn)在屏幕上的圖形就不出現(xiàn)。要把一個(gè)3D 空間中的物體顯示在屏幕上,就要進(jìn)行投影。投影又有兩種方式:平

7、行投影和透視投影。在平行投影中,遠(yuǎn)處的物體和近處的物體是一樣大的,這種投影主要運(yùn)用在計(jì)算機(jī)輔助設(shè)計(jì)(CAD )上,由于這種投影沒(méi)有立體感,所以一般情況下使用透視投影。在透視投影中,遠(yuǎn) 處的物體會(huì)變得較小,因此在透視投影中,可視空間是一個(gè)平頭截體(或臺(tái)體)。下圖表明了投影變換的原理。 當(dāng)3D 空間中的圖形經(jīng)過(guò)投影成為2D 圖形之后,我們還要把圖形縮放到窗口或屏幕上。這個(gè)過(guò)程被稱為視見(jiàn)空間變換。對(duì)于一般的游戲來(lái)說(shuō),視見(jiàn)空間應(yīng)該是整個(gè)屏幕或窗體。但是視見(jiàn)空間也可以 是它的子集。2.2. 7 光柵化當(dāng)2D 圖形的所有變換都完成之后,就要把它們柵格化以顯示在屏幕上,或保存為BMP 圖片。柵格化其實(shí)是把變換得到的2D 矢量圖轉(zhuǎn)化為位圖的過(guò)程。2.2. 8 繪制在這一步中,將由Wi n dows GDI 把光柵化的圖形顯示在屏幕上。2.3 OpenGL的命名規(guī)則在OpenGL1.1庫(kù)中,包含了大約300多個(gè)API 函數(shù)。為了方便程序員記憶和使用,這些函數(shù)都按照一定的規(guī)則進(jìn)行命名。例如,函數(shù)gl Ve rt e x 用于傳入頂點(diǎn)數(shù)據(jù),而gl Ve rt e x 又有g(shù)l Ve rt e x 2i , gl Ve rt e x 3f , gl Ve rt e x 2f , gl Ve rt e x 2d , gl V

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論