杜麗美
(長治學院 計算機系,山西 長治 046011)
OpenGL在計算機圖形學中的應用研究
杜麗美
(長治學院 計算機系,山西 長治 046011)
基于可視化的需求,研究在圖形學中如何生成具有真實感的圖形,主要引入了OpenGL函數,利用OpenGL函數中的光照、材質、霧化等函數對利用圖形學生成的三角網格模型進行設置,以達到重建物體的目的。
計算機圖形學;三角網狀模型;OpenGL函數;光照;材質;霧化
計算機圖形學[1]是一種使用某種數學算法將二維或三維圖形以柵格的形式顯示在計算機顯示器上的科學。也就是說,計算機圖形學主要研究的是利用何種算法在計算機中表示圖形、以及進行圖形的計算和處理。
計算機圖形學的一個主要的目的就是要在計算機屏幕上生成具有真實感的圖形。因此,應首先建立物體的幾何表示,然后再將假想的光源、紋理、材質、霧等屬性附于幾何圖形上,使得計算機屏幕上顯示的幾何圖形更加接近于真實物體。目前計算機圖形學往往和OpenGL一起使用[2]。
OpenGL實際上是一個豐富的三維圖形函數庫,除了具有基本的OpenGL函數外,還支持其他四類函數:OpenGL實用庫、OpenGL輔助庫、Windows專用庫函數、Win32 API函數[3-4]。OpenGL的這些函數有強大的功能,比如:可以繪制三維物體,可以對物體進行光照、明暗處理、材質設置、紋理設置、霧化等效果。此外OpenGL還提供了雙緩存,可以用來制作動畫。OpenGL的這些強大的功能為實現三維物體重建技術、以及建立人機交互的三維場景提供了堅實的基礎。
OpenGL不僅可以運行在各種流行的操作系統上,而且只要在基本的C或C++語言中調用相應的函數即可。
計算機圖形學結合OpenGL函數渲染繪制出真實物體的三維圖形的基本步驟如下:
(1)建立基本模型。首先利用計算機圖形學中的算法將真實物體轉化成能在計算機上表示的景物模型,復雜物體一般是表示成三角網狀的模型結構。
(2)投影及視口變換。把表示出的模型放在三維空間中的合適的位置,并且設置視點(viewpoint),使得模型居中顯示并且將觀察者感興趣的一面展現在屏幕上。
(3)光照、材質、霧等的設置。將模型展示在屏幕上以后,就開始真正的模擬真實物體了,這里主要通過設置OpenGL中的光照、材質、霧化函數來對真實物體進行模擬。
(4)顯示三維圖形。
對于現實生活中的復雜物體,要想將其顯示在計算機屏幕上,可以首先利用某種技術手段提取真實物體表面的離散點,然后將這些離散點輸入到計算機中,最后利用某種有效的算法將這些點聯系起來構成三角網格的形式,最終在計算機屏幕上得到描述真實物體的三角網格模型。圖3-1便是真實物體對應的三角網格模型

圖3-1 三角網格模型Fig 3-1 The example of the triangul ation
建立好的模型如何在計算機屏幕上顯示是關鍵,比如要顯示在屏幕上的哪個位置、是否要按比例顯示,這些問題都會影響真實物體的重建的效果,在OpenGL函數中主要提供了兩種投影方式[5]:正射投影和透視投影。
(1)正射投影的視景體類似一個長方體,因此在投影的過程中無論物體距鏡頭是近的還是遠的,但最終投影到屏幕上的物體尺寸是不變的。正射投影函數為:

函數中的參數表示了兩個裁剪平面,即近裁剪面和遠裁剪面,這兩個裁剪面都是長方形,而且函數中的參數表明近裁剪面所對應的長方形的左下角點和右上角點坐標分別是(left,bottom,-near)和(right,top,-near);而遠裁剪面所對的長方形的左下角點和右上角點坐標分別是(left,bottom,-far)和(right,top,-far)。
(2)透視投影的視景體類似一個棱臺,它的特點是離視點近的物體大,離視點遠的物體小。這種投影方式經常用在三維場景的模擬以及動畫等需要反應真實性事件的情況中。此種投影方式所對的函數為:

這個函數的參數只定義近裁剪平面的坐標,即左下角點和右上角點的坐標分別為(left,bottom,-near)和(right,top,-near);遠裁剪平面沒有定義具體的坐標,只是定義了一個參數far,這個參數反應了透視投影的特點,far的大小表明遠裁剪平面距離鏡頭的遠近,而其對應的坐標是由系統自動生成的。
正射投影和透視投影只是采用什么樣的視景體來截取圖像,并不負責使用某種規則把圖像呈現在屏幕上,glViewport()函數主要是用來把由視景體截取的圖像按照怎樣的高和寬顯示在屏幕上。對應的函數為:

此函數中4個參數決定了視口的位置:視口的左下角點坐標為(x,y),右上角點坐標為(x+width,y+height)。
首先對模型進行光照設置[5-6]。一般來說,光照設置包括三種光:環境光、漫反射光和鏡面反射光。環境光(Ambient Light)可以來自地面、天空、墻壁等;漫反射光(Diffuse Light)表示某種給定的光源照射到物體表面后并均勻向四周反射出去的光;鏡面反射光(Specular Light)為朝向特定方向反射出去的光。
OpenGL中的光照函數見下:
創建光源位置:glLightfv(GL_LIGHT0,GL_POSITION,light_position)
定義三種光:

以上函數中的第三個參數都是自定義的具體值,例如定義光源位置的具體值如下:

其次對模型進行材質的設置[5-6],和光源類似,材料顏色的成分也分為環境、漫反射和鏡面反射三種。通常在一個場景中同時設置光照和材質兩種特性,這兩種特性同時作用在物體上時,效果為兩者的疊加,即若光源顏色為(R1,G1,B1),材質顏色為(R2,G2,B2),那么最終看到的效果為(R1*R2,G1*G2,B1*B2)。材質的定義函數為:

其中face取GL_FRONT表明將材質應用到物體前面,取GL_BACK表明將材質應用到物體背面,取GL_FRONT_AND_BACK表明將材質應用到物體前后兩個面上;pname一般取GL_AMBIENT或GL_DIFFUSE或 GL_SPECULAR或 GL_SHINESS;第三個參數為第二個參數對應的具體值。其中GL_SHINESS為鏡面指數,也就是所謂的“高光區”的大小,此參數作用于模型上,可以使模型表面的制定位置處呈現一個光亮區域,使得模型更加接近于真實物體。
霧化的應用極為廣泛,它的作用是使物體更加接近真實效果,而且也可以使物體看起來更加自然。因此將霧的效果應用于模型上,可以給人產生距離感,使得模型更加具有立體感。此外,霧的濃度可以控制,霧的顏色也可以任意設定。
在OpenGL程序中啟動霧以及控制霧的函數為[5]:
glEnable(GL_FOG)
glFogfv(GLenum pname,TYPE param)
其中參數pname通常取GL_FOG_MODE、GL_FOG_DENSITY、GL_FOG_START、GL_FOG_END 或GL_FOG_COLOR,param則取對應的具體值。
經過以上三個步驟就完成了對真實物體的模擬,通過調用相應的輸出函數將模擬重建的物體顯示在計算機屏幕上。
本實驗在VC6.0平臺上進行,采集了海豚表面的離散點,采用正射投影的方式對海豚進行了模擬。
①圖4-1(a)為在計算機屏幕上生成的海豚的三角網格模型。
②圖4-1(b)為開啟默認光照后的效果,從圖中可以看出,對模型進行光照后,背光的部分顏色較暗,非常接近現實生活,而且一個場景中的兩只海豚在同一光照條件下的顏色相同。
③圖4-1(c)是在開啟默認光照的基礎上,對模型進行材質的設置并且設置“高光區”,從圖中可見,在同一場景中,不同的海豚可以設置不同的材質,再加上“高光”處理,使模型更加真實化。
④圖4-1(d)為在 4-1(c)的基礎上加上了霧的效果,使得遠離視點的淡藍色海豚變得模糊,看起來生動、形象。

圖4-1 海豚的模擬過程Fig4-1 The imitation of dolphin
文章主要針對OpenGL中的光照、材質和霧化函數對模型進行設置,并且顯示了逼真的三維渲染效果。此外,OpenGL函數還有更加強大的功能,比如進行紋理設置、特殊光照處理還有實現動畫效果等。
[1]趙玉峰.計算機圖形學的發展及應用[J].科技信息,2008,(16):68.
[2]李文強,華祖耀.基于OpenGL的仿真可視化技術研究[J].計算機仿真,2005,(06):158-161.
[3]歐中亞.基于OpenGL的三維建模可視化軟件開發[J].信息安全與技術,2011(07):48-50.
[4]湯彬.基于 OpenGL 實現三維繪圖[J].上海工程技術大學學報,2002,(01):18-25.
[5]廖朵朵.OpenGL變換、光照、紋理、動畫及特殊效果[J].微電腦世界,1996,(11):151-153.
[6]廖朵朵.OpenGL基本功能操作-建模、變換、顏色、光照與材質[J]. 微電腦世界,1997,(01):75-78.
TP391.41
A
1673-2014(2012)02-0050-03
2012—02—22
杜麗美(1983—),女,山西大同人,碩士,主要研究計算機圖形學、圖像處理等研究。
(責任編輯 單麥琴)