《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技术 > 设计应用 > 改进的射线拾取法在地质体可视化中的应用
改进的射线拾取法在地质体可视化中的应用
来源:微型机与应用2011年第15期
王雪莉,唐志辉
(中国石油大学,山东 东营 257061)
摘要: 根据传统射线法和Depth-ray方法,实现了一种扩展了的射线拾取法。拾取时,将空间中的对象与射线求交,把与射线相交的所有对象保存起来,用户可以在这些保存的对象中选择一个作为拾取的对象。该拾取法能够在三维物体中拾取被遮挡的物体,并在三维地质体可视化系统中获得了较好的应用效果。
Abstract:
Key words :

摘  要: 根據(jù)傳統(tǒng)射線法Depth-ray方法,實(shí)現(xiàn)了一種擴(kuò)展了的射線拾取法。拾取時(shí),將空間中的對(duì)象與射線求交,把與射線相交的所有對(duì)象保存起來(lái),用戶可以在這些保存的對(duì)象中選擇一個(gè)作為拾取的對(duì)象。該拾取法能夠在三維物體中拾取被遮擋的物體,并在三維地質(zhì)體可視化系統(tǒng)中獲得了較好的應(yīng)用效果。
關(guān)鍵詞: 三維地質(zhì)體;可視化;拾取;射線法;Depth-ray

    在三維地質(zhì)體可視化中,不僅要繪制圖形,而且要允許操作者能夠通過輸入設(shè)備(如鼠標(biāo))來(lái)操縱屏幕上的物體,有時(shí)還需要獲取物體的空間坐標(biāo)或圖形數(shù)值,這些都需要以拾取作為實(shí)現(xiàn)的基礎(chǔ)?;诙S環(huán)境的拾取比較容易實(shí)現(xiàn),但是現(xiàn)實(shí)生活中更多接觸的是三維空間實(shí)體,應(yīng)從三維的角度來(lái)解決問題,所以在三維環(huán)境下的拾取問題也顯得更加重要。
 拾取方法有傳統(tǒng)的射線拾取法(Ray-casting)[1-2],Depth ray方法[3]、基于視口空間的拾取法[4]、基于對(duì)象緩沖區(qū)的拾取法[5]、3D bubble cursor[6]方法等。在這些方法中,基于對(duì)象緩沖區(qū)的拾取法與三維場(chǎng)景的物體幾何形狀無(wú)關(guān),避免了空間求交的復(fù)雜運(yùn)算,但是拾取的精度較低,且只能拾取可見物體;傳統(tǒng)Ray-casting法拾取精度高,但是只能拾取可見物體;基于視口空間的拾取方法要進(jìn)行多次空間變換,過于復(fù)雜;Depth ray和3D bubble cursor方法操作較復(fù)雜,更適用于虛擬現(xiàn)實(shí)環(huán)境中。本文結(jié)合Depth ray算法實(shí)現(xiàn)了改進(jìn)了的射線拾取法,能夠拾取被遮擋的物體。
1 Ray-casting算法
1.1 Ray-casting算法原理

 Ray-casting算法又稱為射線投擲法(簡(jiǎn)稱射線法)。拾取操作指當(dāng)用戶在屏幕上用鼠標(biāo)點(diǎn)擊某個(gè)圖元,應(yīng)用程序能返回到該圖元的一個(gè)標(biāo)志和某些相關(guān)信息。射線拾取算法的一般思想是:得到鼠標(biāo)點(diǎn)擊處的屏幕坐標(biāo),并將其轉(zhuǎn)換為客戶區(qū)坐標(biāo),實(shí)現(xiàn)視區(qū)反變換;然后,通過投影矩陣和觀察矩陣把該坐標(biāo)轉(zhuǎn)換為通過視點(diǎn)和鼠標(biāo)點(diǎn)擊點(diǎn)的一條射入場(chǎng)景的射線,該射線如果與場(chǎng)景模型的圖元相交,則獲取該相交圖元的信息。因此,從數(shù)學(xué)角度來(lái)看,只要得到射線的方向矢量和射線的出射點(diǎn)就確定了射線方程,最后就可以利用射線判斷其與空間一個(gè)圖元是否相交,從而實(shí)現(xiàn)圖元的選取。
1.2 Ray-casting算法思路
 傳統(tǒng)射線拾取法的處理過程大致可以分為以下幾個(gè)步驟:
 (1)檢測(cè)鼠標(biāo)點(diǎn)擊處的屏幕坐標(biāo),并將其轉(zhuǎn)換為客戶區(qū)坐標(biāo),實(shí)現(xiàn)視區(qū)反變換。
 (2)計(jì)算射線對(duì)應(yīng)點(diǎn)在觀察坐標(biāo)空間內(nèi)的坐標(biāo)。根據(jù)投影原理,三維變換相當(dāng)于通過一個(gè)放置在三維世界中的攝像機(jī)來(lái)觀察當(dāng)前場(chǎng)景的對(duì)象。如圖1所示,設(shè)頂點(diǎn)O處是攝像機(jī),那么,視野的邊界就構(gòu)成了一個(gè)視錐體。圖1中遠(yuǎn)近兩個(gè)裁剪面構(gòu)成了平截頭體,點(diǎn)P和點(diǎn)P′分別在遠(yuǎn)裁剪面ABCD和近裁剪面A′B′C′D′上。點(diǎn)擊屏幕上的點(diǎn)P反映到視錐中,就是選中了所有的從點(diǎn)P′到點(diǎn)P的點(diǎn)。對(duì)應(yīng)的情況是,用戶單擊鼠標(biāo)獲得屏幕上的某一點(diǎn),即是指定了從視點(diǎn)指向屏幕深處的某一方向,也就確定了屏幕上某條從O點(diǎn)出發(fā)的射線(在圖中即為OP),這就是拾取射線。

 對(duì)于同一位置上重疊物體的選擇問題,解決辦法是:從屏幕坐標(biāo)得到射線之后,分別讓重疊的物體與該射線求交,得到交點(diǎn),然后根據(jù)這些與視點(diǎn)的遠(yuǎn)近確定選擇的對(duì)象,這樣就能夠?qū)δ切簳r(shí)被其他對(duì)象遮住的物體進(jìn)行選取。
 (3)將射線點(diǎn)轉(zhuǎn)換到世界坐標(biāo)空間,得到其在世界坐標(biāo)系中的坐標(biāo)。最終的運(yùn)算要在世界坐標(biāo)空間中進(jìn)行,所以要把矢量計(jì)算所用的點(diǎn)坐標(biāo)全部轉(zhuǎn)化到世界坐標(biāo)空間中,然后在世界坐標(biāo)空間中求交。
2 Depth ray算法
 Depth ray算法[3]是在傳統(tǒng)射線法基礎(chǔ)上提出的一種新的拾取方法。該方法在射線上設(shè)置一個(gè)深度標(biāo)記(depth marker),用戶可控制深度標(biāo)記沿射線移動(dòng)。拾取時(shí),將場(chǎng)景中的物體與射線求交,然后求相交物體與射線深度標(biāo)記的距離,其中與深度標(biāo)記距離最近的物體即被拾取。
 圖2為Depth ray拾取法示意圖,圖中直線表示拾取射線,黑色圓點(diǎn)表示深度標(biāo)記,框中物體是被拾取物體。在圖2(a)中,中間的圓角矩形被拾取,在圖2(b)中,右邊的圓球被拾取。

3 三維地質(zhì)體可視化系統(tǒng)中拾取算法實(shí)現(xiàn)
 首先構(gòu)建一個(gè)地層模型,地層顯示的最小圖元為三角圖元。用戶可以通過操作地層進(jìn)行旋轉(zhuǎn)平移操作,并且可以用普通鼠標(biāo)進(jìn)行拾取操作。拾取的單位可以是某個(gè)地層也可以是某個(gè)三角圖元。當(dāng)拾取某個(gè)特定的地層時(shí),該地層用網(wǎng)格顯示,其他地層被隱藏。當(dāng)拾取三角圖元時(shí),被拾取的圖元變?yōu)橛眉t色顯示。
 傳統(tǒng)射線法拾取精度較高,但是拾取的對(duì)象只能是所有與射線相交的對(duì)象中距離射線頂點(diǎn)最近的,在有些情況下要拾取被遮擋的物體,而傳統(tǒng)射線法難以實(shí)現(xiàn)。Depth-ray方法則通過一個(gè)深度標(biāo)記,可以拾取到與射線相交的所有物體,即使物體被遮擋,由于深度標(biāo)記要沿著拾取射線移動(dòng),所以當(dāng)與射線相交的物體在拾取射線方向的距離較遠(yuǎn)時(shí)會(huì)影響該方法的效率。本文根據(jù)傳統(tǒng)射線法和Depth-ray方法,實(shí)現(xiàn)了一種擴(kuò)展了的射線拾取法。其拾取算法思路是:拾取時(shí),將空間中的對(duì)象與射線求交,把與射線相交的所有對(duì)象保存起來(lái),用戶可以在這些保存的對(duì)象中選擇一個(gè)作為拾取的對(duì)象,這樣既能保證精確度,又能比Depth-ray方法快。
 本文方法實(shí)現(xiàn)步驟如下:
 (1)鼠標(biāo)點(diǎn)擊觸發(fā)拾取動(dòng)作,把鼠標(biāo)點(diǎn)的Windows窗口坐標(biāo)轉(zhuǎn)換為三維世界坐標(biāo)。實(shí)現(xiàn)的關(guān)鍵代碼為:
glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT, GL_FLOAT,&zbuffer);
gluUnProject(x,y,zbuffer,mvmatrix,projmatrix,viewport,worldx,worldy,worldz);
其中,worldx、worldy、worldz分別為世界坐標(biāo)空間中鼠標(biāo)點(diǎn)的X、Y、Z坐標(biāo)。
 (2)獲取攝像機(jī)在世界坐標(biāo)系中的坐標(biāo),由攝像機(jī)所在位置向鼠標(biāo)點(diǎn)發(fā)射射線。
 (3)把空間中的對(duì)象分別與射線求交,并將相交對(duì)象的相關(guān)信息保存到棧中。保存的信息包括:對(duì)象ID、交點(diǎn)坐標(biāo)、交點(diǎn)與攝像機(jī)的距離。
 (4)將棧中的對(duì)象按照距離由小到大的順序排列。用戶可以根據(jù)需要在棧中切換拾取對(duì)象,切換的順序按照交點(diǎn)與攝像機(jī)的距離從小到大排列。
 拾取過程中,與射線相交的對(duì)象用藍(lán)色標(biāo)記,被拾取的對(duì)象用紅色標(biāo)記,拾取的點(diǎn)用綠色標(biāo)記。在本實(shí)驗(yàn)中,單擊鼠標(biāo)左鍵拾取,點(diǎn)擊鍵盤“Z”鍵在棧中切換拾取對(duì)象。
 程序運(yùn)行效果如圖3及圖4所示。圖4表示用戶選擇的拾取對(duì)象,拾取時(shí),與射線相交的對(duì)象(圖中為三角面片)全部標(biāo)記,其中被拾取的對(duì)象用紅色標(biāo)記,其余的用藍(lán)色標(biāo)記。

 

 

    本文在三維地質(zhì)體可視化系統(tǒng)中,把傳統(tǒng)射線法和Depth-ray方法相結(jié)合,實(shí)現(xiàn)了一種擴(kuò)展了的射線拾取法,既能夠拾取被遮擋的物體,又能夠保證精確度和速度,在系統(tǒng)應(yīng)用中取得了良好的應(yīng)用效果。
參考文獻(xiàn)
[1] BOLT R A. “Put-that-there”: voice and gesture at the graphics interface[J]. Computer Graphics (SIGGRAPH′80 Proceedings), 1980, 14(3): 262-270.
[2] 姚繼權(quán),李曉豁.計(jì)算機(jī)圖形學(xué)人機(jī)交互中三維拾取方法的研究[J].工程設(shè)計(jì)學(xué)報(bào),2006,13(2):116-120.
[3] VANACKEN L, GROSSMAN T, CONINX K. Multimodal selection techniques for dense and occluded 3D virtual environments[J]. International Journal of Human-Computer Studies, 2009, 67(3): 237-255.
[4] 朱明亮,董冰,王祎,等.三維場(chǎng)景中基于視口空間的拾取算法[J].工程圖學(xué)學(xué)報(bào),2008(2):94-97.
[5] 王亞平,余柯,羅堃.在OpenGL中一種新的拾取方法及其應(yīng)用——基于對(duì)象緩沖區(qū)的選擇拾取方法[J].工程圖學(xué)學(xué)報(bào),2003(2):60-64.
[6] VANACKEN L, GROSSMAN T, GROSSMAN T. Exploring the effects of environment density and target visibility on object selection in 3D virtual environments[M]. IEEE Symposium on 3D User Interfaces, 2007:116-12.
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。

相關(guān)內(nèi)容