楊忠 楊皓 杜華
摘要:基于虛擬三維場(chǎng)景的計(jì)算機(jī)仿真應(yīng)用系統(tǒng)通常需要解決在如何將二維平面上點(diǎn)的坐標(biāo)轉(zhuǎn)換成三維坐標(biāo)這一難題,對(duì)應(yīng)到基于地形數(shù)據(jù)的實(shí)際三維地形應(yīng)用程序,問(wèn)題則變?yōu)槿绾卫檬髽?biāo)點(diǎn)擊來(lái)獲取點(diǎn)的實(shí)際地形值。針對(duì)這一難點(diǎn),本文提出并實(shí)現(xiàn)了一種在虛擬三維場(chǎng)景中的取點(diǎn)定位方法。通過(guò)實(shí)驗(yàn)利用該方法對(duì)給定三維地形中兩個(gè)點(diǎn)進(jìn)行取點(diǎn)定位準(zhǔn)確的得到了兩點(diǎn)的地形數(shù)據(jù),并對(duì)其誤差進(jìn)行了分析,得出結(jié)論該方法實(shí)際可行,取值精度高,對(duì)于實(shí)際的三維地形開(kāi)發(fā)系統(tǒng)中的取點(diǎn)定位具有一定的價(jià)值。
關(guān)鍵詞:三維地形;取點(diǎn)定位;坐標(biāo)變換;Direct3D
三維可視化是用于顯示描述和理解地下及地面諸多地質(zhì)現(xiàn)象特征的一種工具,廣泛應(yīng)用于地質(zhì)和地球物理學(xué)的所有領(lǐng)域。Direct3D是目前在三維地形和三維場(chǎng)景可視化開(kāi)發(fā)中使用比較廣泛的開(kāi)發(fā)環(huán)境。Direct 3D是基于微軟的通用對(duì)象模式COM(Common ObjectMode)的3D圖形API,它是由微軟公司樹(shù)立的3D API規(guī)范,Direct3D被認(rèn)為是3維可視化應(yīng)用開(kāi)發(fā)的業(yè)界標(biāo)準(zhǔn)。自發(fā)布以來(lái),Direct3D以其良好的硬件兼容性和友好的編程方式很快得到了廣泛的認(rèn)可,現(xiàn)在幾乎所有的具有3D圖形加速的顯示適配器都對(duì)Direct3D提供良好的支持。
然而,在Direct3D的3D虛擬場(chǎng)景中用戶(hù)使用鼠標(biāo)來(lái)在點(diǎn)選三維坐標(biāo)中的位置時(shí),鼠標(biāo)返回的值僅是一個(gè)二維信息,該二維信息即鼠標(biāo)在屏幕上的二維坐標(biāo),因而必須對(duì)其進(jìn)行逆變映射,以此確定該屏幕的二維平面位于個(gè)三維坐標(biāo)系中的具體位置。然而一個(gè)二維的坐標(biāo)位置對(duì)應(yīng)的三維坐標(biāo)中的的位置可以是z軸上的任意點(diǎn)。而Direct3D提供的變換函數(shù)需要提供窗口的z坐標(biāo)(深度坐標(biāo)胙為參數(shù),如果要三維虛擬場(chǎng)景中進(jìn)行任意取點(diǎn)得到其三維坐標(biāo),則只能通過(guò)設(shè)計(jì)新的算法解決。如利用直線與曲面的交點(diǎn)求解三維場(chǎng)景中一點(diǎn)到曲面的最近點(diǎn)算法。在真實(shí)的三維地形中,往往因?yàn)楹A靠臻g地形數(shù)據(jù)未經(jīng)過(guò)歸一化處理,導(dǎo)致其運(yùn)算工作極其繁雜、耗時(shí),計(jì)算量過(guò)大,曲面函數(shù)難以準(zhǔn)確建立,因而此類(lèi)方法在解決實(shí)時(shí)性要求高的三維地形取點(diǎn)定位的應(yīng)用中有很大局限性?;谝陨显?,設(shè)計(jì)出一種新的方法來(lái)解決對(duì)Direct3D三維地形的取點(diǎn)定位問(wèn)題,其基本思路是以試探方式獲取同一點(diǎn)的不同地形值,再進(jìn)一步對(duì)地形值和試探值進(jìn)行對(duì)比求差,判斷差值是否在給定范圍內(nèi),根據(jù)條件判斷結(jié)果確定網(wǎng)格坐標(biāo),通過(guò)插值計(jì)算即可求得相應(yīng)的地形值。