(1.中國(guó)科學(xué)院地理科學(xué)與資源研究所資源與環(huán)境信息系統(tǒng)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100101; 2.中海油田服務(wù)股份有限公司物探事業(yè)部,天津 300452;3.北京超圖軟件股份有限公司,北京 100192)
論文來源:系統(tǒng)仿真學(xué)報(bào) 第23卷第3 期
摘要:抖動(dòng)問題是大規(guī)模虛擬場(chǎng)景經(jīng)常遇到的一個(gè)問題,它會(huì)導(dǎo)致場(chǎng)景繪制出現(xiàn)非常嚴(yán)重的錯(cuò)誤。全球地形環(huán)境是一個(gè)典型的大場(chǎng)景系統(tǒng),因此也會(huì)遇到抖動(dòng)問題。針對(duì)全球地形環(huán)境中的抖動(dòng)問題,我們改進(jìn)目前的動(dòng)態(tài)局部坐標(biāo)系統(tǒng)反抖動(dòng)方法,提出一種更合適全球地形環(huán)境的新反抖動(dòng)方法。這種…
關(guān)鍵詞: 全球地形;反抖動(dòng);動(dòng)態(tài)局部坐標(biāo)系統(tǒng);SuperMap GIS 6R
引 言
抖動(dòng)問題是像星球仿真、物理計(jì)算仿真、大規(guī)模軍事仿真系統(tǒng)等大型虛擬環(huán)境中一個(gè)非常棘手的問題[1]。它會(huì)導(dǎo)致繪制場(chǎng)景時(shí),出現(xiàn)物體一部分被莫名其妙地裁剪掉,三角網(wǎng)格破碎,紋理錯(cuò)亂等錯(cuò)誤現(xiàn)象。全球地形環(huán)境是一個(gè)典型的大規(guī)模虛擬環(huán)境,也會(huì)遇到抖動(dòng)問題。特別是在繪制米級(jí)高分辨率地面時(shí),抖動(dòng)問題特別明顯,嚴(yán)重削弱地形的繪制效果[2]。
抖動(dòng)問題是由于浮點(diǎn)數(shù)舍入誤差過大所造成的[3]。目前解決全球地形環(huán)境中抖動(dòng)問題的方法有兩種:多局部坐標(biāo)系統(tǒng)方法和動(dòng)態(tài)局部坐標(biāo)系統(tǒng)方法。多局部坐標(biāo)系統(tǒng)方法為每個(gè)地形塊都建立一個(gè)局部坐標(biāo)系統(tǒng),每塊的地形頂點(diǎn)都在自己的局部坐標(biāo)系統(tǒng)中繪制,從而減小頂點(diǎn)的浮點(diǎn)數(shù)誤差,避免抖動(dòng)現(xiàn)象的出現(xiàn)[2,3]。然而這種方法會(huì)破壞全球統(tǒng)一的地理坐標(biāo)系統(tǒng),而且還會(huì)帶來多坐標(biāo)系統(tǒng)導(dǎo)致的各種問題[4,5]。動(dòng)態(tài)局部坐標(biāo)系統(tǒng)方法只需建立一個(gè)動(dòng)態(tài)的局部坐標(biāo)系統(tǒng),該坐標(biāo)系統(tǒng)的原點(diǎn)隨著視點(diǎn)變化而變化,場(chǎng)景中所有物體都在這個(gè)局部坐標(biāo)系統(tǒng)中定義[1,5,6,8,9]。由于場(chǎng)景中物體一般都離視點(diǎn)不遠(yuǎn)(如果太遠(yuǎn),會(huì)被視錐體裁減掉),所以物體坐標(biāo)的浮點(diǎn)數(shù)誤差一般不大,因此避免抖動(dòng)現(xiàn)象的出現(xiàn)。然而目前的動(dòng)態(tài)局部坐標(biāo)系統(tǒng)方法都有各自的問題。微軟 Flight Simulator[5]采用動(dòng)態(tài)局部坐標(biāo)系統(tǒng)進(jìn)行反抖動(dòng),但并沒有介紹如何設(shè)置局部坐標(biāo)系統(tǒng)的原點(diǎn),只是定期地更新原點(diǎn)。如果視點(diǎn)移動(dòng)速度很快,地形塊遠(yuǎn)離上次更新的原點(diǎn),同樣會(huì)出現(xiàn)抖動(dòng)現(xiàn)象。GeoVRML[6]使用GeoOrigin 設(shè)置原點(diǎn)建立動(dòng)態(tài)局部坐標(biāo)系統(tǒng),但不能阻止用戶錯(cuò)誤地設(shè)置原點(diǎn),例如設(shè)置原點(diǎn)遠(yuǎn)離視點(diǎn),仍然會(huì)導(dǎo)致抖動(dòng)現(xiàn)象[1]。另外它對(duì)自由導(dǎo)航?jīng)]有做任何處理,也會(huì)出現(xiàn)嚴(yán)重的抖動(dòng)問題[1]。雖然基于GeoVRML 的 TerraVision[7]對(duì)自由導(dǎo)航采用周期地將原點(diǎn)歸位于視點(diǎn),仍會(huì)遇到微軟Flight Simulator 中視點(diǎn)移動(dòng)過快時(shí)出現(xiàn)的問題。Java3D[8]雖然可以使用場(chǎng)景(locale)坐標(biāo)系統(tǒng)作為動(dòng)態(tài)局部坐標(biāo)系統(tǒng),也會(huì)遇到和GeoVRML 一樣的問題。 O'Neil [9],Throne[1]和Lambers[10]以視點(diǎn)為原點(diǎn)建立動(dòng)態(tài)局部坐標(biāo)系統(tǒng),但是視點(diǎn)卻不是全球地形環(huán)境中動(dòng)態(tài)局部坐標(biāo)系統(tǒng)原點(diǎn)的最佳選擇。
本文在目前動(dòng)態(tài)局部坐標(biāo)系統(tǒng)方法的基礎(chǔ)上,提出一種新的更適合全球地形環(huán)境的反抖動(dòng)方法。這種方法選擇視點(diǎn)在球面上的投影點(diǎn)代替視點(diǎn)作為局部坐標(biāo)系統(tǒng)的原點(diǎn)。該方法既能避免多局部坐標(biāo)系統(tǒng)方法帶來的各種問題,又能保證在任何情況下都不會(huì)出現(xiàn)抖動(dòng)現(xiàn)象,同時(shí)比以視點(diǎn)為原點(diǎn)的動(dòng)態(tài)局部坐標(biāo)系統(tǒng)方法有更好地反抖動(dòng)效果。
1 全球地形數(shù)據(jù)組織
為了平衡全球海量地形的渲染質(zhì)量和速度,一般采用面向全球的多分辨率金字塔模型來組織地形[11]。這種技術(shù)把全球地形按經(jīng)緯度分成不同的層和塊,如圖1 所示。全球地形數(shù)據(jù)在預(yù)處理階段分成小塊的地形數(shù)據(jù)塊存儲(chǔ)起來。無論地形塊結(jié)構(gòu)是規(guī)則網(wǎng)格還是不規(guī)則三角網(wǎng),都使用保存在文件中的對(duì)應(yīng)地形數(shù)據(jù)塊來構(gòu)建地形網(wǎng)格。所有地形塊的地形網(wǎng)格連在一起,就構(gòu)成全球地形網(wǎng)格。當(dāng)視點(diǎn)移動(dòng)時(shí),需要將已經(jīng)不在視錐體內(nèi)的地形塊從內(nèi)存中卸載,并用新的地形塊替換。當(dāng)視點(diǎn)向地球靠近時(shí),使用精細(xì)的地形塊替換粗糙的地形塊。相反地,當(dāng)視點(diǎn)離開地球時(shí),使用粗糙的地形塊替換精細(xì)的地形塊。
2 浮點(diǎn)數(shù)舍入誤差與抖動(dòng)問題的成因
舍入誤差是量化誤差的一種形式[12],是運(yùn)算得到的近似值和精確值之間的差值。當(dāng)使用有限位數(shù)的浮點(diǎn)數(shù)(理論上存在無限位數(shù)的浮點(diǎn)數(shù))來表示實(shí)數(shù)的時(shí)候,就會(huì)產(chǎn)生浮點(diǎn)數(shù)舍入誤差。由于舍入誤差的存在,所以計(jì)算機(jī)系統(tǒng)并不能精確表達(dá)所有實(shí)數(shù)。例如十進(jìn)制實(shí)數(shù) 0.25 能被計(jì)算機(jī)系統(tǒng)精確表達(dá),即(0.25)10 = (0.01)2 ,此時(shí)不存在舍入誤差;但是實(shí)數(shù) 0.1 就不能被計(jì) 算機(jī)系統(tǒng)精 確表達(dá),即(0.1)10 = (0.000110011...)2 ,此時(shí)存在舍入誤差。假定浮點(diǎn)數(shù)x 的舍入誤差為?x ,有效數(shù)字位數(shù)為t,則浮點(diǎn)數(shù)的舍入誤差可以通過公式(1)計(jì)算出來[12]: