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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、行投影和透視投影。在平行投影中,遠(yuǎn)處的物體和近處的物體是一樣大的,這種投影主要運(yùn)用在計算機(jī)輔助設(shè)計(CAD )上,由于這種投影沒有立體感,所以一般情況下使用透視投影。在透視投影中,遠(yuǎn) 處的物體會變得較小,因此在透視投影中,可視空間是一個平頭截體(或臺體)。下圖表明了投影變換的原理。 當(dāng)3D 空間中的圖形經(jīng)過投影成為2D 圖形之后,我們還要把圖形縮放到窗口或屏幕上。這個過程被稱為視見空間變換。對于一般的游戲來說,視見空間應(yīng)該是整個屏幕或窗體。但是視見空間也可以 是它的子集。2.2. 7 光柵化當(dāng)2D 圖形的所有變換都完成之后,就要把它們柵格化以顯示在屏幕上,或保存為BMP 圖片。柵格化其實是把變換得到的2D 矢量圖轉(zhuǎn)化為位圖的過程。2.2. 8 繪制在這一步中,將由Wi n dows GDI 把光柵化的圖形顯示在屏幕上。2.3 OpenGL的命名規(guī)則在OpenGL1.1庫中,包含了大約300多個API 函數(shù)。為了方便程序員記憶和使用,這些函數(shù)都按照一定的規(guī)則進(jìn)行命名。例如,函數(shù)gl Ve rt e x 用于傳入頂點數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論