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