陳超
摘 要:隨著計(jì)算機(jī)軟、硬件突飛猛進(jìn)的發(fā)展,計(jì)算機(jī)圖形學(xué)在各個(gè)行業(yè)的應(yīng)用也得到迅速普及和深入,目前,計(jì)算機(jī)圖形學(xué)己進(jìn)入三維時(shí)代。本文以三維圖形為研究對(duì)象,對(duì)用OpenGL創(chuàng)建三維圖形進(jìn)行研究。
關(guān)鍵詞:計(jì)算機(jī)圖形學(xué);三維投影;OpenGL
1、引言
科學(xué)計(jì)算可視化、計(jì)算機(jī)動(dòng)畫和虛擬現(xiàn)實(shí)已經(jīng)成為近年來計(jì)算機(jī)圖形學(xué)的三大熱門話題,而這三大熱門話題的技術(shù)核心均為三維圖形。
三維圖形廣泛地應(yīng)用于科學(xué)計(jì)算的可視化(運(yùn)動(dòng)仿真、有限元分析、流體計(jì)算、醫(yī)學(xué)成像、分子化學(xué)、汽車等曲面造型、地理信息、石油勘探和氣候模擬)、游戲開發(fā)、虛擬現(xiàn)實(shí)技術(shù)、影視廣告中及CAI等領(lǐng)域。
2、視平面和投影中心的一般化過程
OpenGL中的三維投影坐標(biāo)系
在三維空間中的觀察過程根本就比在二維空間中的觀察過程復(fù)雜得多。三維觀察的額外的復(fù)雜性一部分是由被添加的維引起的,還有一部分是由顯示設(shè)備僅是二維的這一事實(shí)引起的。三維物體和二維顯示之間的不匹配問題是通過引入投影來解決的,而投影就是把三維物體變換到二維的投影平面上去。
OpenGL物體坐標(biāo)系采用左手坐標(biāo)系。投影三維物體的二維平面稱為投影平面,視平面坐標(biāo)系附在投影平面上。物體坐標(biāo)系描述物體的模型。取景參考點(diǎn)為物體建模參考點(diǎn),一般將物體坐標(biāo)系原點(diǎn)取為建模參考點(diǎn)。視平面坐標(biāo)系原點(diǎn)為取景參考點(diǎn)在投影平面上的投影點(diǎn),即平行于投影平面法線且通過取景參考點(diǎn)的直線與投影平面的交點(diǎn)。確定視平面坐標(biāo)系向上方向的向量稱為取景上方向量。取景上方向量確定視平面坐標(biāo)系繞取景參考點(diǎn)與視平面坐標(biāo)系原點(diǎn)連線旋轉(zhuǎn)的角度。觀察點(diǎn)或視點(diǎn)是觀察者眼睛所在的位置,如圖1所示:
在三維觀察過程中,需要在世界坐標(biāo)系中設(shè)定一個(gè)視見體(view volume),在投影平面上給出一個(gè)投影,并在觀察表面上給定一個(gè)視口。三維世界坐標(biāo)系中的物體被三維視見體裁減,之后進(jìn)行投影。視見體落在投影平面上的投影的內(nèi)容(成為窗口)再被變換(映射)到視口進(jìn)行顯示。
3、透視投影變換及視區(qū)變換
繪圖流程中最終的三維空間稱為三維平面空間。在這個(gè)空間中,進(jìn)行視見體的裁剪,使用三維屏幕空間是因?yàn)樗?jiǎn)化了裁剪和隱藏面消除的操作。另外,這個(gè)空間中的物體最終都要經(jīng)過一個(gè)向二維觀察平面坐標(biāo)變換的過程。嚴(yán)格地將,屏幕坐標(biāo)系是從視平面坐標(biāo)系通過基本的變換導(dǎo)出的。圖2顯示了三維觀察過程的概念模型:
一般來說,投影是把n維空間坐標(biāo)系中的點(diǎn)變換成小于n維的坐標(biāo)系中的點(diǎn)。一個(gè)三維物體的投影是用從投影中西發(fā)射出來的許多直的投影射線來定義的,這些投影線通過物體的每一點(diǎn)和投影平面相交,形成該物體的投影。透視投影的視覺效果類似于照相系統(tǒng)和人的視覺系統(tǒng),稱為透視縮小效應(yīng)(perspective foreshortening):一個(gè)物體的透視投影的大小與物體到投影中心的距離成反比。因此,透視投影傾向于看起來真實(shí)。
4、OpenGL的透視投影變換
OpenGL透視投影利用去角錐的截頭體作為取景體積。取景體積決定物體投影的可視部分,而且滿足透視投影的遠(yuǎn)大近小規(guī)則。OpenGL用gluPerspective命令指定的透視取景體積如圖3所示:
視點(diǎn)放置在角錐的頂點(diǎn)。其參數(shù)fovy為y—z平面上取景域的角度,aspect為截頭體x(寬度)與y(高度)的比值,zNear與zFar分別為視點(diǎn)與前后剪切面的距離,二者總為正值。進(jìn)行透視投影變換前,必須用glMatrixMode將參數(shù)設(shè)置為投影模式GL_PROJECT,用glLoadIdentity置恒等矩陣命令清除過去矩陣的影響,同時(shí)用gluPerspective命令指定取景體積進(jìn)行透視投影。
5、結(jié)束語(yǔ)
OpenGL三維圖形標(biāo)準(zhǔn)這一開放式圖形庫(kù)使得在微機(jī)上實(shí)現(xiàn)三維真實(shí)感圖形的生成與顯示成為可能。開發(fā)者可以有效地利用OpenGL提供的豐富的三維變換、光照、紋理、動(dòng)畫及特殊效果函數(shù)等來建立三維模型和進(jìn)行三維實(shí)時(shí)交互,從而開發(fā)出效果理想的視景系統(tǒng),并進(jìn)一步為虛擬現(xiàn)實(shí)的研究與開發(fā)打下堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn):
[1] Richard S.Wright,Jr. Benjamin Lipchak.OpenGL 超級(jí)寶典(徐波 譯). 人民郵電出版社
[2] OpenGL體系結(jié)構(gòu)審核委員會(huì). OpenGL編程指南(第四版). 人民郵電出版社
[3] Alan Watt.3D計(jì)算機(jī)圖形學(xué)(包宏 譯). 機(jī)械工業(yè)出版社
[4] James D.Foley,Andries van Dam,Steven K.Feiner,John F.Hughes.計(jì)算機(jī)圖形學(xué)原理及實(shí)踐(唐澤圣,懂士海,李華,吳恩華,汪國(guó)平等譯). 機(jī)械工業(yè)出版社. 2004.3
[5] Donald Hearn,M.Pauline Baker.計(jì)算機(jī)圖形學(xué). 北京:電子工業(yè)出版社.
[6] 周培德. 《計(jì)算幾何——算法分析與設(shè)計(jì)》 北京:清華大學(xué)出版社
[7] 周新倫,柳健,劉華志. 《數(shù)字圖像處理》 北京:國(guó)防工業(yè)出版社
[8] Poter,T.,and T.Duff 《Compositing Digital Images》