【正文】
機(jī)游戲由以前的非圖形的到絢麗的圖形界面,從二維的到三維的,無不見證計(jì)算機(jī)圖形學(xué)的迅猛發(fā)展,以及 它給人們帶來的各種便利。三維互動(dòng)式場景建模更是計(jì)算機(jī)三維圖形應(yīng)用所必須解決的問題。 OpenGL 是優(yōu)秀且功能強(qiáng)大的圖形庫 ,利用 OpenGL進(jìn)行 三維 建模 ,從而 能夠 實(shí)現(xiàn) 各種 仿真 。 OpenGL 作為 一項(xiàng)開放性的標(biāo)準(zhǔn)、主攻專業(yè)圖形應(yīng)用和 3D游戲 開發(fā)的 圖形 API, 即便 其發(fā)展 處于目前的低潮狀態(tài), OpenGL仍然牢牢把持著專業(yè)繪圖 領(lǐng)域,而 DirectX 在此毫無競爭力,功能更強(qiáng)大的OpenGL 無疑將繼續(xù)保持壟斷性地位。 因此, 研究 OpenGL 圖形庫的結(jié)構(gòu)和實(shí)現(xiàn)原理,深入了解 OpenGL 的各種機(jī)制,有一定的商業(yè)價(jià)值。 1 緒論 課題的來源 隨著計(jì)算機(jī)的普及,計(jì)算機(jī)圖形已不再是稀罕物,它是所有計(jì)算機(jī)用戶界面的一個(gè)組成部分,并且對(duì)于二維( 2D)、三維( 3D)和更高維對(duì)象的可視化是不可或缺的,諸如教育、科學(xué)、工程、醫(yī)學(xué)、商業(yè)、軍事、廣告和娛樂等各種各樣的領(lǐng)域都離不開計(jì)算機(jī)圖形。正因?yàn)橛?jì)算機(jī)圖形與我們?nèi)粘I钊绱嗣芮?,美國SGI 公司為圖形工作站開發(fā)了功能強(qiáng)大的三維圖形和模型庫―― OpenGL(即開放性圖形庫, Open Graphics Library)。而這個(gè)圖形學(xué)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)誕生,又更加促進(jìn)了圖形學(xué)應(yīng)用范圍迅速擴(kuò)大,其 中很重要的影響就是在 簡單的物品擺放和材質(zhì)渲染 方面。如何渲染出一個(gè)逼真的場景,是現(xiàn)在圖形學(xué)領(lǐng)域一個(gè)重要的研究方向。 OpenGL 提供強(qiáng)大的圖形處理功能,使 簡單的三維 場景 制作 變得方便、靈活,效果更加逼真。本文基于 OpenGL 開發(fā)了一個(gè) 簡單的三維場景 ,并在這個(gè)場景中 添加了 材質(zhì)渲染,燈光,運(yùn)動(dòng)軌跡效果 。 三維建模 的意義 20 世紀(jì)中后期, 隨著 計(jì)算機(jī)技術(shù) 的 飛速發(fā)展,計(jì)算機(jī)描述現(xiàn)實(shí)世界的方式越來越豐富:從聲音到圖像再到視頻,計(jì)算機(jī)所能表示的世界越來越復(fù)雜。三維模型作為一種新的媒體形式進(jìn)入了人們的生活 、 學(xué)習(xí) 和工作 中, 并且很快被普通大眾所接受。它在影視娛樂,建筑,機(jī)械制造,醫(yī)療,軍事,電子商務(wù),虛擬現(xiàn)實(shí),考古等很多方面都得到了越來越廣泛的應(yīng)用。 在影視娛樂中,基于三維建模技術(shù)的 CG(計(jì)算機(jī)圖形學(xué) )影片 (如圖 )層出不窮, CG 技術(shù)已經(jīng)在這個(gè)領(lǐng)域得到了廣泛的應(yīng)用。將三維建模技術(shù)應(yīng)用到電影,可以讓電影導(dǎo)演能有更廣泛的想象空間來實(shí)現(xiàn)現(xiàn)實(shí) 生活 中無法完成的場面,從而降低影片制作中的風(fēng)險(xiǎn)和為影片減少開支。 圖 影片 “最終幻想 ”場景 圖 游戲 “完美世界 ”人物模型 CPU的發(fā)展一直跟不上 GPU 的發(fā)展,這是三維游戲推動(dòng)的結(jié)果。三維游戲雖然和民生關(guān)系不大,但是確是一種具有強(qiáng)有力號(hào)召力的娛樂方式。計(jì)算機(jī)圖形學(xué)技術(shù)的發(fā)展很大程度上得益于三維游戲的發(fā)展需求,隨著 GPU 的不斷發(fā)展,三維游戲中的畫面越來越美觀和真實(shí)。圖 展示了一個(gè)游戲人物模型,這種簡單的人物模型最開始就是由網(wǎng)格模型組成,再通過對(duì)模型貼圖和渲染而達(dá)到這種效果。很明顯,在這種大型的游戲中數(shù)據(jù)的處理過程是非常復(fù)雜的。 三維建模技術(shù)也廣泛應(yīng)用電子商務(wù)領(lǐng)域。如圖 所示是耐克鞋官方主頁上提供的一種服務(wù),客戶可以通過 IE 瀏覽器來設(shè)計(jì)和訂購自己 的產(chǎn)品。這是目前電子商務(wù)領(lǐng)域比較熱門的一種服務(wù),其中就涉及到三維建模以及模型的傳輸?shù)燃夹g(shù)。 圖 耐克官方主頁提供的訂購服務(wù) 圖 文物模型的虛擬拼接 在考古學(xué)領(lǐng)域,可以對(duì)破損的文物進(jìn)行采樣 和 收集數(shù)據(jù),然后通過三維建模技術(shù)復(fù)原文物模型。圖 現(xiàn)實(shí)的是北京大學(xué)虛擬化實(shí)驗(yàn)室對(duì)洛陽龍門石窟古陽洞高樹龕中的破損佛像的數(shù)據(jù)進(jìn)行搜集然后再三維建模從而得到的完整的模型。 在醫(yī)療領(lǐng)域,三維建模技術(shù)很久以前就得到了廣泛的應(yīng)用。使用 CT 或者M(jìn)RI(核磁共震 )技術(shù)可以得到人體各個(gè)部位的橫截面的圖 像,然后通過三維建模技術(shù)可以對(duì)這些圖像合并成各種人體組織的三維模型。這種三維模型能比二維的平面圖像更加準(zhǔn)確,從而讓醫(yī)務(wù)人員能更加準(zhǔn)確的對(duì)病情進(jìn)行診斷。 在建筑和機(jī)械制造等領(lǐng)域,三維建模技術(shù)的作用更不用說, CAD 技術(shù)在工業(yè)設(shè)計(jì)領(lǐng)域已經(jīng)應(yīng)用了幾十年。在軍事和虛擬現(xiàn)實(shí)等領(lǐng)域三維建模技術(shù)也有廣泛的應(yīng)用,例如航天員可以在虛擬的航天環(huán)境下進(jìn)行模擬訓(xùn)練。 上面的里例子充分說明了三維建模技術(shù)已經(jīng)深入到社會(huì)各個(gè)方面,對(duì)人們的生活已經(jīng)產(chǎn)生了巨大的影響。因此,三維建模具有非常重要的意義。 三維場景 建立 概述 及其意義 隨著計(jì)算機(jī)信息技術(shù)的高速發(fā)展,計(jì)算機(jī)三維動(dòng)畫技術(shù)被廣泛地應(yīng)用于許多方面。利用計(jì)算機(jī)和三維動(dòng)畫軟件的強(qiáng)大功能,通過三維建模、材質(zhì)及動(dòng)畫 的設(shè)定可以將真實(shí)世界中的各種對(duì)象在計(jì)算機(jī)中真實(shí)再現(xiàn)。 但是三維動(dòng)畫在中國的宣傳力度不是很大,許多人還沒有概念。 外國動(dòng)畫壟斷中國市場的現(xiàn)狀與后果令人不安,但真正驚人的是背后的損失。首先是民族精神的弱化。動(dòng)畫的受眾主體是青少年,如長期接受國外動(dòng)畫的影響,其價(jià)值觀、審美觀和趣味觀必然發(fā)生偏移;其次是經(jīng)濟(jì)利益的損失;第三是動(dòng)畫產(chǎn)業(yè)的衰弱。 所以該課題的應(yīng)用前景十分廣闊,不但鍛 煉了三維動(dòng)畫的實(shí)現(xiàn)能力,還提高了編程的總體思路,大大提高了編程水平。更何況中國市場的匱乏,這無疑是一塊很大的蛋糕! 本文的 主要工作 本論文的主要研究的內(nèi)容是如何利用 OpenGL 開發(fā)出一個(gè)微型游戲。因此,所要解決的主要問題有四個(gè) :一是如何用數(shù)學(xué)方法建立所需三維場景的幾何描述,并將它們輸入到計(jì)算機(jī)中,這部分工作由三維實(shí)體造型系統(tǒng)來完成。場景的幾何描述直接影響了圖形的復(fù)雜性和圖形繪制的計(jì)算耗費(fèi),選擇合理的有效的數(shù)據(jù)表示和輸入手段是極其重要。二是將三維幾何描述轉(zhuǎn)換為二維透視,通過場景的透視變換來 完成。三是確定場景中的所有可視面,這需要使用隱藏面消除算法將視域之外或其它物體遮擋的不可見面消去。四是計(jì)算機(jī)場景中所有可見面的顏色,這就需要根據(jù)基于光學(xué)物理的光照明模型計(jì)算可見面投影到觀察者眼中的光亮度的大小和色彩組成,并將它轉(zhuǎn)換成適合圖形設(shè)備的顏色值,從而確定投影畫面上每一象素的顏色,最終生成圖形。 2 幾何三維建模技術(shù)概述 緒論已經(jīng)討論了本文的基本思路,并且說明了 制作三維場景 的前提是進(jìn)行三維建模 。 在計(jì)算機(jī)圖形學(xué)中,對(duì)于三維空間的點(diǎn) P(X,Y,Z),如果要將點(diǎn) P 變換到一個(gè)新的點(diǎn) P’,設(shè)其坐標(biāo)為 (X’,Y’,Z’),則其解析表達(dá)式如下: 39。39。39。X aX bY cZY eX fY gZZ hX iY jZ? ? ?? ? ?? ? ? 如果將上面的式子改用矩陣的形式表示,則可以寫為: ? ?39。 39。 39。a e hX Y Z X Y Z b f ic g j?????? ??????? 其中 矩陣 [X Y Z]稱為幾何信息矩陣,或者稱為位置矢量矩陣; 3 3 的矩陣a e hb f ic g j????????稱為變換矩陣;而 [X’ Y’ Z’]稱為變換后的位置矢量矩陣。顯然,變換后的矩陣除了和原來的位置矢量有關(guān)外,同時(shí)還與變換矩陣的每一個(gè)元素的大小有關(guān)系。 一般來說可以 采用齊次坐標(biāo)來表示 空間上的一個(gè)點(diǎn),則有四個(gè)分量,即P(x,y,z,1)。顯然,相應(yīng)的變換矩陣應(yīng)該是 4 4 的方陣。習(xí)慣上用小寫字母 [x y z 1]來表示變換前的空間點(diǎn)的位置矢量;用大寫字母 [X Y Z H]來表示變換后的空間點(diǎn)的位置矢量。通常情況下,變換后的第四個(gè)分量 H 往往不是 1,為了用正?;凝R次坐標(biāo)表示變換后的位置矢量,可以用 H 去除四個(gè)分量,得到正常化的齊次坐標(biāo),并用帶字母表示為: ? ? ? ? ? ? 39。 39。 39。1 / / / 1 1x y z T X Y Z H X H Y H Z H x y z??? ? ? ?? 對(duì)于空間中的三維體,例如線段、平面、立體,都可以將其 n 個(gè)頂點(diǎn)以點(diǎn)集的形式用齊次坐標(biāo)寫 成 n 行四列矩陣 P,則三維圖形變換可以表示為 P’=PT。其中,P 是空間點(diǎn)集的齊次坐標(biāo)矩陣; P’是經(jīng)過變換后而且是以正常化的齊次坐標(biāo)表示的空間點(diǎn)集矩陣; T 則是 4 4階的變換矩陣,其一般形式為: a e h pb f i qc g j rl m n s???????? 根據(jù)變換矩陣中各個(gè)元素在變換過程中的作用,可以將變換矩陣劃分成四個(gè)子矩陣: 3 3 3 11 3 1 1???????? 概括起來,這四個(gè)矩陣分別對(duì)應(yīng)的作用是: (1) 3 3 矩陣是產(chǎn)生比例變換,對(duì)稱變化,旋轉(zhuǎn)變換和錯(cuò)切變換。 (2) 1 3 矩陣是 產(chǎn)生平移變換。 (3) 3 1 矩陣產(chǎn)生透視變換。 (4) 1 1 矩陣將產(chǎn)生整體的比例變換。 下面將介紹幾種常見的三維變換矩陣: 比例變換 比例變換主要用于三維模型的放大和縮小操作。對(duì)于模型的放大和縮小可以分為全局比例放大和軸向比例放大。對(duì)于全比例變換,其變換矩陣為: 1 0 0 00 1 0 00 0 1 0000s???????? 其變換過程如下: ? ? ? ? ? ? 39。 39。 39。1 / / / 1 1x y z T X Y Z S X S Y S Z S x y z??? ? ? ?? 當(dāng) 01S??時(shí),模型沿三個(gè)軸向等比例放大;當(dāng) 1S? 時(shí),則模型沿著三個(gè)軸向等比例縮?。划?dāng) 0S? 時(shí)模型將產(chǎn)生對(duì)坐標(biāo)原點(diǎn)的對(duì)稱變換加比例變換。 對(duì)于軸向比例變換,變換矩陣中主對(duì)角線上的元素 a,f,j,s 的作用是使空間幾何元素產(chǎn)生比例變換,其中 a,f,j 分別為 X,Y,Z 軸三個(gè)方向的縮放因子。當(dāng) a=f=j時(shí)三個(gè)軸向的縮放比例相同;否則三個(gè)軸方向的縮放比例不相同。 對(duì)稱變換 對(duì)稱變換可以分成如下三種變換方式: (1) 對(duì)稱于 XOY 坐標(biāo)面的對(duì)稱變換,變換矩陣為:1 0 0 00 1 0 00 0 1 00 0 0 1T????? ?????;其變換過程為: ? ? ? ? ? ?1 1 1X Y Z x y z T x y z? ? ?。 (2) 對(duì)稱于 YOZ 坐標(biāo)面的對(duì)稱變換,變換矩陣為:1 0 0 00 1 0 00 0 1 00 0 0 1T?????? ????;其變換過程為: ? ? ? ? ? ?1 1 1X Y Z x y z T x y z? ? ?。 (3) 對(duì)稱于 XOZ 坐標(biāo)面的對(duì)稱變換,變換矩陣為:1 0 0 00 1 0 00 0 1 00 0 0 1T?????? ????;其變換過程為: ? ? ? ? ? ?1 1 1X Y Z x y z T x y z? ? ?。 平移變換 平移變換是指在空間坐標(biāo)中 的模型從一個(gè)位置移動(dòng)到另外一個(gè)位置時(shí),其形狀、大小均不發(fā)生改變的變換。其變換矩陣如下: 1 0 0 00 1 0 00 0 1 01Tl m n????? ???? 很明顯, l,m,n 三個(gè)元素分別產(chǎn)生沿 X 軸、 Y 軸和 Z 軸方向的平移,三為空間的點(diǎn)的平移過程如下: ? ? ? ? 39。 39。 39。1 1 1x y z T x l y m z n x y z??? ? ? ? ? ?? 旋轉(zhuǎn)變換 旋轉(zhuǎn)變換 [5],很明顯是指對(duì)于空間中的模型沿著某個(gè)軸或者某條直線旋轉(zhuǎn)??梢詫⑵浞殖扇缦聨追N情況 ,如圖 所示的旋轉(zhuǎn)變換的示意圖 : (1) 繞 X 軸旋轉(zhuǎn) ? 角度。其變換矩陣為:1 0 0 00 c os s i n 00 s i n c os 00 0 0 1T ????????? ???。 (2) 繞 Y 軸旋轉(zhuǎn) ? 角度。其變換矩陣為:c os 0 s i n 00 1 0 0s i n 0 c os 00 0 0 1T????????????。 (3) 繞 Z 軸旋轉(zhuǎn) ? 角度。其變換矩陣為:c os s i n 0 0s i n c os 0 00 0 1 00 0 0 1T????????????。 圖 三維 旋轉(zhuǎn)變換示意圖 (4) 繞過原點(diǎn)的任意傾斜直線旋轉(zhuǎn)。假設(shè)該直線為 ON,它對(duì)三個(gè)坐標(biāo)軸方向的余弦已知。設(shè)三個(gè)方向的 余弦分別為 1 2 3n、 n、 n ;可以先在 ON 上取一個(gè)單位矢量OK,將 OK 先繞 OY 旋轉(zhuǎn) 1? ,再繞 OZ旋轉(zhuǎn) 2? ,使得 OK和 ON重合,這樣就可以得到 ON 軸的方向余弦和 1? 、 2? 的關(guān)系如下: ? ? ? ?1 2 3 1 2 1 2 11 sin c os sin sin c os 1n n n ? ? ? ? ?? 這樣可以得到最終的繞 ON軸旋轉(zhuǎn)變換 ? 角度的變換矩陣如下: 221 1 1 2 3 1 3 2221 2 3 2 2 2 3 1221 3 2 2 3 1 3 3( 1 ) c os ( 1 c os ) si n ( 1 c os ) si n 0( 1 c os ) si n ( 1