余順園
摘要:本文基于OpenGL的實現(xiàn)了虛擬焊接場景中的四種特效。在OpenGL使用三個光源,實現(xiàn)了虛擬焊接中的光照效果,能夠逼真的模擬焊接電弧位置變化及場景;在程序中通過函數(shù)glMaterial定義光照,計算虛擬焊接中用到的當前材質(zhì),實現(xiàn)了不同的材質(zhì)效果;基于OpenGL同時還實現(xiàn)了雙緩存動畫效果及場景漫游效果。結果表明,這些場景特效比較逼真,效果良好。
關鍵詞:OpenGL虛擬焊接場景特效
中圖分類號:TP391.9 文獻標識碼:A 文章編號:1672-3791(2012)08(b)-0017-02
在焊接模擬場景中增加特殊效果目的是提高模擬場景的真實感覺。真實感圖形繪制是計算機圖形學的一個重要組成部分,它能反映物體表面顏色和亮度的細微變化;能表現(xiàn)物體表面的質(zhì)感;能通過光照下的物體陰影,極大地改善場景的深度感和層次感,充分體現(xiàn)物體間的相互遮擋關系;能模擬透明物體的透明效果和鏡面物體的鏡面效果。
1 OpenGL簡介
OpenGL是個專業(yè)的3D程序接口,是個針對底層開發(fā)的3D圖形[1]。OpenGL稱為開放的圖形程序接口,它獨立于窗口系統(tǒng)和操作系統(tǒng),可以在不同的平臺如Windows95、WindowsNT、Unix、Linux、MacOS、OS/2之間進行移植。因此,支持OpenGL的軟件具有很好的移植性,可以獲得非常廣泛的應用[2]。因為OpenGL在三維模擬方面的強大功能,使得它在許多研究領域中得到了廣泛應用,在焊接仿真相關領域,涉及到模擬和三維顯示的地方,也越來越多的采用了OpenGL技術。
利用OpenGL可以方便地生成高質(zhì)量的真實感圖形,OpenGL提供了各種光源及材質(zhì)屬性的設置函數(shù),可以方便的設置所需光照模型。OpenGL提供的圖像空間消隱能力,可方便的實現(xiàn)消隱算法。OpenGL提供的紋理映射功能,可以將BMP文件格式的圖像映射到幾何模型表面,紋理映射中的值除了可以直接用于繪制面著色,還可以利用紋理映射中的值來調(diào)制和混合原像素的顏色,從而產(chǎn)生特殊的效果。
2焊接場景特效實現(xiàn)
為提高虛擬焊接場景的真實感,利用OpenGL實現(xiàn)了焊接場景中光照效果、材質(zhì)效果、雙緩存動畫效果、場景漫游效果等特效。
2.1 光照效果
虛擬焊接三維場景中,環(huán)境光照效果必不可少的。在OpenGL中,通過光源模型設置來實現(xiàn)場景的光照效果。在光源模型中,一共使用了三個光源,分布如圖1所示。OpenGL程序本身只有一個默認的處在無窮遠處的點光源0,默認的光源特性參數(shù)值都是1,即理想的白色點光源。
在OpenGL中,光線被假定成紅、綠、藍3種原色光的組合,因此,光源的顏色就由它所發(fā)出的這3種原色光的含量決定,而物體表面的顏色則由其反射這3種光的含量決定。光源0除了定義光源的位置外,還分別定義了環(huán)境光、漫射光、鏡面光,OpenGL獨立計算這四種成分光線,然后再將其結果疊加到一起產(chǎn)生光源0的最終光照效果。在模擬場景中,光源0用于整個場景的照亮效果。
針對虛擬焊接場景的要求,增加了兩個光照模型,即跟隨焊接電弧位置變化的光源1和垂直焊接工作臺的光源2。光源1為移動的聚光燈,其亮度隨著亮度參數(shù)改變而不斷的變化,模擬電弧燃燒亮度的閃爍。光源1的移動通過在堆棧中使用平移函數(shù)來實現(xiàn)。
光源2和光源1類似,只不過光源2是普通的點光源,作用于整個焊接環(huán)境,使焊接環(huán)境光照效果更接近真實??刂乒庠?、光源1與光源2作用的時間,就可以實現(xiàn)虛擬焊接場景在焊工模式與旁觀模式中簡單的切換。在焊工模式下訓練時,光源1和2打開,光源0被屏蔽,焊工通過頭盔顯示器觀察到的場景只有電弧照亮的熔池和焊條端部,其余的場景由于沒有光照呈暗色;旁觀模式光源0必須打開,光源1和2可以打開也可以關閉。在旁觀模式下,因為環(huán)境光的光源打開,指導教師或其他學員可以觀察到全景效果。通過兩種模式的轉換,可根據(jù)需要選取環(huán)境光照效果,觀察焊接過程。另外,光源0的打開與否還取決于訓練時的電弧燃燒狀態(tài),只有當電弧處于燃燒狀態(tài)時,即焊接正在進行,光源0才能關閉;電弧未處于燃燒狀態(tài)時,焊接停止,光源0打開,照亮整個場景。這與真實焊接過程中焊工在焊接時戴上面罩操作,停止焊接時拿掉面罩觀察焊縫成型效果的過程是一致的。
2.2 材質(zhì)效果
材質(zhì)是指物體表面對光的反射特性。OpenGL用材料對光的紅、綠、藍三原色的反射率來近似定義材料的顏色。像光源一樣,材料顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定了材料對環(huán)境光、漫反射光和鏡面反射光的反射程度。在進行光照計算時,材料對環(huán)境光的反射率與每個進入光源的環(huán)境光結合,對漫反射光的反射率與每個進入光源的漫反射光結合,對鏡面光的反射率與每個進入光源的鏡面反射光結合。對環(huán)境光與漫反射光的反射程度決定了材料的顏色,并且它們很相似。對鏡面反射光的反射率通常是白色或灰色(即對鏡面反射光中紅、綠、藍的反射率相同)。鏡面反射高光最亮的地方將變成具有光源鏡面光強度的顏色。例如一個光亮的紅色塑料球,球的大部分表現(xiàn)為紅色,光亮的高光將是白色的。
一個光源決定了光的顏色、反射特性、強度和入射光的方向。物體的幾何性質(zhì)及材質(zhì)決定反射光的顏色、反射特性、強度。光和物體間的相互作用遠比我們能夠?qū)崟r模擬的情況復雜。OpenGL在逼真顯示和實時繪制之間通過以下方法實現(xiàn)均衡:只在幾何頂點進行光照計算,對在所繪制的每個像素上執(zhí)行光照運算的復雜處理進行簡化。
材質(zhì)的顏色與光源的顏色略有不同。對于材質(zhì),R、G、B值為材質(zhì)對光的R、G、B成分的反射率。比如,一種材質(zhì)的R=1.0、G=0.5、B=0.0,則材質(zhì)反射全部的紅色成分,一半的綠色成分,不反射藍色成分。也就是說,若OpenGL的光源顏色為(LR、LG、LB),材質(zhì)顏色為(MR、MG、MB),那么,在忽略所有其他反射效果的情況下,最終到達眼睛的光的顏色為(LR×MR、LG×MG、LB×MB)。
同樣,虛擬焊接場景中的兩束光,相應的值分別為(R1、G1、B1)和(R2、G2、B2),則OpenGL將各個顏色成分相加,得到(R1+R2、G1+G2、B1+B2),若任一種成分的和大于1(超出了設備所能顯示的亮度)則約簡到1.0。這樣最終的光照效果是光線與物體表面共同作用的結果,入射光和物體對光的吸收和反射決定了所看到的顏色。
虛擬焊接場景所包括的各種物體模型,在程序中都使用了不同的材質(zhì),這樣整個場景看起來層次感更加明顯。在程序中通過函數(shù)glMaterial(GLenum face,GLenum pname,TYPE param)來定義光照計算中用到的當前材質(zhì)。face可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK,它表明當前材質(zhì)應該應用到物體的哪一個面上;pname說明一個特定的材質(zhì);param是材質(zhì)的具體數(shù)值。
2.3 雙緩存動畫效果
動畫是計算機圖形學的一個重要組成部分。要實現(xiàn)連續(xù)的動畫,不出現(xiàn)人眼能覺察到的閃爍跳動,一般要達到24幀/s的刷新速度。程序設計中,采用了精簡程序、強制刷新函數(shù)和雙緩存技術三項技術來保證場景的刷新速度。
本程序測試中,運行時間小于0.04s,即畫面刷新速度大于25幀/秒,滿足連續(xù)動畫的要求。強制刷新函數(shù)可以保證程序在設定時間周期對畫面進行自動刷新,程序運行中設為20ms。OpenGL提供了雙緩存技術支持動畫制作。也就是說,在顯示前臺緩存內(nèi)容中的一幀畫面時,后臺緩存正在繪制下一幀畫面,當繪制完畢,則后臺緩存內(nèi)容便在屏幕上顯示出來,而前臺正好相反,又在繪制下一幀畫面內(nèi)容。這樣循環(huán)反復,屏幕上顯示的總是已經(jīng)畫好的圖形,于是看起來所有的畫面都是連續(xù)的。在焊接場景中,采用了雙緩存技術,并在display()函數(shù)的結尾處,使用了前后臺交換函數(shù):void glutSwapBuffers(void)。即執(zhí)行完一次display()焊接場景繪制過程,便交換前后臺緩存,以便讓下一幀圖形在屏幕后繪制完成。
2.4 場景漫游效果
虛擬漫游技術是計算機仿真中重要的交互手段之一。它可以使得生成的虛擬場景更為生動。本文實現(xiàn)了對虛擬焊接三維場景的漫游,用戶可以從不同角度、不同距離觀察虛擬焊接場景。
在焊接場景中,通過改變場景模型的位置來實現(xiàn)漫游,即觀察者的視點不動,通過模型的平移和旋轉來改變觀察場景模型的視角。在程序編制時,通過鍵盤的按鍵實現(xiàn)對漫游的控制,首先在視圖的創(chuàng)建函數(shù)中設置視點的初始值,然后規(guī)定w鍵按下時遠離場景;s鍵按下時靠近場景;z、x鍵按下時圍繞x軸旋轉;a、d鍵按下時圍繞y軸旋轉。實現(xiàn)焊接虛擬場景漫游后,還設置了一個默認位置恢復鍵,不管漫游到什么位置,按下Esc鍵后,都回到默認的焊工觀察操作位置,進行焊接培訓操作。
3 結語
本文利用OpenGL實現(xiàn)了焊接場景中光照效果、材質(zhì)效果、雙緩存動畫效果、場景漫游效果等特效,大大提高了虛擬焊接場景中的真實感,在焊工的培訓、焊接智能化方面有較好的應用。
參考文獻
[1] LaLonde Wilf,Pugh John.Preparing for 3D graphics: interfacing to OpenGL.Journal of Object-Oriented Programming[J].1995,8(2):77.
[2] Faust Nickolas L,Bhaumik Dharmajyoti,Hodges Larry F.,Ribarsky William,Koller David, Lindstrom Peter.OpenGL VGIS.Proceedings of SPIE-The International Society for Optical Engineering[C].1996,2740:42-49.