虛擬現(xiàn)實(shí)中立體顯示技術(shù)研究
由此可見,當(dāng)zp>d時(shí),0Ee,此時(shí)為正視差;當(dāng)zpd時(shí),E0,此時(shí)為負(fù)視差;而當(dāng)zp=d時(shí),E=0,此時(shí)為零視差。采用雙中心投影算法,設(shè)置雙視點(diǎn)就可獲取三維空間中物體的左右眼圖像,從而生成立體圖像對(duì)。
本文引用地址:http://m.butianyuan.cn/article/169422.htm
4 OpenGL實(shí)現(xiàn)立體顯示
開放性圖形庫OpenGL(Open Graphic Library)是一個(gè)三維計(jì)算機(jī)圖形和模型庫。它獨(dú)立于操作系統(tǒng)和硬件環(huán)境,適用于從個(gè)人計(jì)算機(jī)到工作站的廣泛計(jì)算機(jī)環(huán)境。
OpenGL在三維真實(shí)感圖形制作中具有優(yōu)秀的性能,用該圖形庫不僅能方便地制作出高質(zhì)量的靜止彩色圖像,還能創(chuàng)造出高質(zhì)量的動(dòng)畫效果。借助Windows編程環(huán)境還可控制模型的人機(jī)交互。由于其開放性和高度的可重用性,目前已成為業(yè)界標(biāo)準(zhǔn)。
4.1 立體圖像對(duì)的繪制
按上述投影算法計(jì)算出立體圖像對(duì)后,應(yīng)用OpenGL繪制立體圖像對(duì),分別用紅、綠兩種顏色繪制右眼和左眼的圖像。以一個(gè)變長為10 cm,中心點(diǎn)在原點(diǎn)的正方體為例,設(shè)兩視點(diǎn)間距離e為5 cm,投影面距高觀察者d為40 cm,考察正方體的一個(gè)頂點(diǎn)(5,5,5),由上述投影算法可得:xr=32 cm,xl=48 cm,yl=yr=4040 cm,zr=zl=d=40 cm對(duì)8個(gè)頂點(diǎn)分別計(jì)算后,連接相應(yīng)的立體透視投影點(diǎn),即可得該立方體的立體圖像對(duì)。用數(shù)組vertex[8][3]存儲(chǔ)頂點(diǎn),數(shù)組translatevertexr[8][3]存儲(chǔ)右眼投影計(jì)算后坐標(biāo),數(shù)組translatevertexl[8][3]存儲(chǔ)左眼投影計(jì)算后的坐標(biāo),對(duì)相應(yīng)的點(diǎn)進(jìn)行投影計(jì)算:
使用OpenGL的透視投影變換,需設(shè)置前后裁剪面到觀察者的距離及前裁剪面的寬度和高度等。前裁剪面的寬度用該寬度與高度的比值表示,取顯示窗口的寬度和高度之比。
double Near.Far;//前后裁剪面距觀察者的距離
int ratio=width/height;//顯示屏的寬和高之比
ViewHeight2=Near*tan(radians);//計(jì)算視野的高度
ViewWidth2=ViewHeight2*ratio;//計(jì)算視野的寬度
計(jì)算右眼的視野范圍;
left=-ViewWidth2-0.5*e*0.3;
right=ViewWidth2-0.5*e*0.3;
投影并繪制模型:
glFrustum(left,right,bottom,top,Near,F(xiàn)ar);
glDrawBuffer(GL_BACK_RIGHT);//使用右后緩存
gluLookAt(0+e/2。0,5。0+d/2,0,-5,0,1,0);
//確定右眼位置
glColor3f(1.0,0.0,0.0);//用紅色繪制
draw();//計(jì)算立體圖像對(duì)并繪制
同理繪制左眼的圖像,如圖3所示。
4.2 雙緩存區(qū)的使用
OpenGL提供雙緩存技術(shù),支持兩個(gè)完整顏色緩存的硬件或軟件。繪制一個(gè)緩存時(shí),顯示另一個(gè)緩存中的內(nèi)容。每繪制好一幀便交換緩存;這樣剛才被顯示的緩存被用來繪制,而用來繪制的緩存被顯示。這樣,當(dāng)顯示器刷新時(shí),緩存區(qū)進(jìn)行交換,畫面就不會(huì)閃爍。
OpenGL也支持立體觀察,實(shí)現(xiàn)左顏色緩存和右顏色緩存,它們分別用于左立體圖像和右立體圖像??稍诔跏蓟瘯r(shí),分別使用參數(shù)PFD_DOUBLEBUFFER和PFD_STERE-O_DONTCARE支持立體顯示和雙緩存。使用雙緩存時(shí),通常只繪制后緩存,使用函數(shù)glDrawBuffer()還可指定將立體圖像渲染到具體的某個(gè)緩存。
例如,繪制右眼圖像時(shí)使用右后緩存區(qū)glDrawBuffer(GL_BACK_RIGHT),繪制左眼時(shí)使用左后緩沖區(qū)glDraw-Buffer(GL_BACK_LEFT)。
4.3 立體圖像的觀察
使用簡單的濾光鏡就可觀察有立體感的圖像。其原理是:由于濾光片(實(shí)驗(yàn)中使用紅、綠濾光片)吸收其他光線,只讓相同顏色的光線通過,因此左、右眼各透過不同顏色的光。當(dāng)使用濾光鏡觀察計(jì)算機(jī)屏幕上的立體圖像對(duì)時(shí),就會(huì)看到具有深度感受的圖像。在實(shí)驗(yàn)中發(fā)現(xiàn),刷新頻率對(duì)圖像立體效果的形成具有重要作用。刷新頻率過低,由于人眼所維持的圖像已消失,不能得到三維立體感受;刷新頻率過高就會(huì)出現(xiàn)一只眼睛可看到兩幅圖像的現(xiàn)象。將顯示的刷新頻率設(shè)置合適,在程序中設(shè)置圖像刷新頻率設(shè)置為50 Hz,利用紅綠濾光鏡觀察模型的立體成像,得到較明顯的立體視覺效果。
5 結(jié)論
根據(jù)立體顯示原理,采用雙目視差算法對(duì)物體進(jìn)行立體顯示,利用OpenGL生成立體圖像對(duì),并借助紅綠濾光眼鏡觀察,得到了較好的立體視覺效果。立體顯示技術(shù)的引入增強(qiáng)了人在虛擬環(huán)境中的沉浸感,可廣泛應(yīng)用于建筑物和視景漫游、虛擬戰(zhàn)爭演練場和各種模擬訓(xùn)練等多種場合。
評(píng)論