專利名稱:一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一般的圖像數(shù)據(jù)處理或產(chǎn)生,尤其涉及一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法。
背景技術(shù):
為了實(shí)現(xiàn)大規(guī)模地形實(shí)時(shí)漫游,必須對(duì)原始地形數(shù)據(jù)所生成的地形網(wǎng)格進(jìn)行簡(jiǎn)化。視點(diǎn)相關(guān)的地形網(wǎng)格簡(jiǎn)化生成算法,是指在當(dāng)前視點(diǎn)下根據(jù)給定的誤差閾值對(duì)地形網(wǎng)格進(jìn)行有效的簡(jiǎn)化,使得簡(jiǎn)化后生成的地形三角形網(wǎng)格和原始的網(wǎng)格在給定視點(diǎn)觀察時(shí)幾乎沒有什么差別。地形網(wǎng)格簡(jiǎn)化生成的方法有以下幾種1.自底向上的逐層簡(jiǎn)化生成方法,即從網(wǎng)格的最底層開始,對(duì)滿足條件的三角形進(jìn)行合并,直到三角形的誤差滿足給定的閾值,見[Linsdrom1996]PeterLindstrom,David Koller,William Ribarsky,Larry F.Hodges,Nick Faust,and Gregory Turner,“Real-time,Continuous Level of Detail Rendering ofHeight Fields,”Proceedings of SIGGRAPH 96,109-118.,簡(jiǎn)化依賴于地形最精細(xì)分辨率網(wǎng)格的尺寸,無(wú)論在計(jì)算還是在存儲(chǔ)上都相對(duì)于整個(gè)地形的數(shù)據(jù),對(duì)于大規(guī)模地形是無(wú)效的。
2.自頂向下的逐步細(xì)化,地形網(wǎng)格從最粗的三角形開始逐步剖分細(xì)化,直到三角形的誤差滿足給定的閾值,見[Linsdrom2001,2002](Peter Lindstrom and V.Pascucci,“Visualization of large terrains made easy,”IEEEVisualization 2001,363-370,Oct.2001;Peter Lindstrom and V.Pascucci.“Terrain Simplification SimplifiedA General Framework for View-Dependent Out-of-Core Visualization”.IEEE Transaction onVisualization and Computer Graphics,2002.),該方法每一幀都是從最粗的兩個(gè)三角形出發(fā),執(zhí)行自頂向下的剖分,無(wú)法利用視域之間的連貫性。
3.為了有效地利用地形漫游時(shí)視域之間的連貫性,ROAM使用兩個(gè)隊(duì)列——剖分隊(duì)列和合并隊(duì)列來控制三角網(wǎng)格剖分的精度。可以根據(jù)繪制能力來決定三角形的數(shù)量,ROAM算法對(duì)實(shí)時(shí)地形繪制系統(tǒng)保證了固定幀速的繪制,但是在實(shí)時(shí)繪制過程中,每次優(yōu)先級(jí)隊(duì)列需要更新,其復(fù)雜度為0(nlogn),重新計(jì)算優(yōu)先級(jí)也很消耗CPU的時(shí)間。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的不足,提出一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法,使得地形構(gòu)網(wǎng)能利用視域連貫性,同時(shí)還能控制構(gòu)網(wǎng)的三角形數(shù)目,使得生成的地形網(wǎng)格給定的誤差計(jì)算下最小,符合大規(guī)模地形實(shí)時(shí)漫游的要求,使得地形的實(shí)時(shí)漫游更加流暢,顯示的畫面質(zhì)量更高。
為了達(dá)到上述目的,本發(fā)明采用的技術(shù)方案如下1).地形網(wǎng)格及四隊(duì)列的初始化初始地形為兩個(gè)共享斜邊的等腰直角三角形,根據(jù)初始視點(diǎn),計(jì)算這兩個(gè)三角形在屏幕空間投影誤差,對(duì)地形三角形進(jìn)行剖分,使地形三角形的誤差達(dá)到精度要求,將剖分得到的地形三角形和這些地形三角形構(gòu)成的三角形對(duì)分別放入四隊(duì)列,完成初始化;2).誤差的重新計(jì)算及四隊(duì)列更新根據(jù)變換后的視點(diǎn),重新計(jì)算每個(gè)地形三角形或者地形三角形對(duì)的屏幕空間投影誤差,根據(jù)誤差,更新四隊(duì)列;3).四隊(duì)列驅(qū)動(dòng)的三角形構(gòu)網(wǎng)比較剖分隊(duì)列和合并隊(duì)列的第一項(xiàng),根據(jù)兩者的誤差大小決定進(jìn)行三角形的剖分或合并,在剖分或合并后更新四隊(duì)列。
四隊(duì)列是需要剖分的三角形隊(duì)列和不需要剖分三角形的隊(duì)列,需要合并的三角形隊(duì)列和不需要合并的三角形隊(duì)列,需要剖分的三角形隊(duì)列根據(jù)其誤差值從大到小排列,而不需要剖分的三角形隊(duì)列則無(wú)需排列,需要合并的三角形隊(duì)列根據(jù)其誤差值從小到大排列,而不需要合并的三角形隊(duì)列則無(wú)需排列。
本發(fā)明與背景技術(shù)相比,具有的有益的效果是本發(fā)明利用了視域之間的連貫性,即前一視點(diǎn)的地形網(wǎng)格和當(dāng)前視點(diǎn)的地形網(wǎng)格變動(dòng)不大。不僅能更有效的減少實(shí)時(shí)構(gòu)網(wǎng)所需要的時(shí)間開銷,而且能有效地控制地形網(wǎng)格中三角形的數(shù)目,保證了繪制的實(shí)時(shí)性。并且采用四隊(duì)列的地形網(wǎng)格驅(qū)動(dòng),對(duì)不需要剖分的三角形隊(duì)列和不需要合并的三角形隊(duì)列不需要進(jìn)行排序,而僅對(duì)需要剖分的三角形隊(duì)列和需要合并的三角形隊(duì)列中的各項(xiàng)進(jìn)行排序,在視點(diǎn)變動(dòng)不大時(shí),需要剖分的三角形隊(duì)列和需要合并的三角形隊(duì)列的項(xiàng)數(shù)很少,排序的時(shí)間開銷很少,提高了生成地形網(wǎng)格的效率,使得地形的實(shí)時(shí)漫游更加流暢,顯示的畫面質(zhì)量更高。
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
圖1是本發(fā)明方法的流程圖;圖2是地形三角形剖分的前5層;圖3是T連接與對(duì)應(yīng)三角形的強(qiáng)制剖分;圖4是地形網(wǎng)格中三角形的剖分和合并;
圖5是本發(fā)明的實(shí)施例。
具體實(shí)施例方式
如圖1所示,本發(fā)明所提出的與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法,包括地形網(wǎng)格及四隊(duì)列的初始化,誤差的重新計(jì)算及四隊(duì)列更新,四隊(duì)列驅(qū)動(dòng)的三角形構(gòu)網(wǎng)三個(gè)基本步驟。其中四隊(duì)列是指四個(gè)地形三角形隊(duì)列,它們分別是需要剖分的隊(duì)列Qs和不需要剖分的隊(duì)列Qns,需要合并的隊(duì)列Qm和不需要合并的隊(duì)列Qnm。其中隊(duì)列Qs和隊(duì)列Qm為排序隊(duì)列,而隊(duì)列Qns和隊(duì)列Qnm為非排序隊(duì)列。
具體流程可描述為系統(tǒng)首先讀取原始地形數(shù)據(jù),即DEM數(shù)據(jù),然后使用本發(fā)明的三個(gè)步驟完成地形三角形的構(gòu)成,最后完成繪制;當(dāng)?shù)匦温螘r(shí),視點(diǎn)改變時(shí),重復(fù)上述過程,實(shí)現(xiàn)地形的漫游。
為了方便描述,先做如下約定地形數(shù)據(jù)為一個(gè)地形高度場(chǎng)(DEM),它定義在x-y平面,高度方向?yàn)閦方向。地形高度場(chǎng)可形式化地表示為{z(i·Δ,j·Δ)|0≤i,j≤2n,Δ為正數(shù)常量,n為正整數(shù)}。地形采樣點(diǎn)是指在地形高度場(chǎng)中具有精確高度值的點(diǎn),高度值由地形高度場(chǎng)給出,其坐標(biāo)為(i·Δ,j·Δ,z(i·Δ,j·Δ))。屏幕空間是指在投影屏幕上定義的二維歐式空間。
現(xiàn)具體介紹本方法的三個(gè)步驟1)地形網(wǎng)格及四隊(duì)列的初始化首先將地形高度場(chǎng)在x-y平面上的四個(gè)角點(diǎn)所對(duì)應(yīng)的四個(gè)地形采樣點(diǎn)構(gòu)成兩個(gè)共享斜邊的等腰直角三角形(此時(shí)這兩個(gè)三角形是在第0層,它們是同一層次的,互為相鄰三角形,我們稱這樣的在同一層次的共享斜邊的兩個(gè)等腰直角三角形對(duì)為菱形三角形對(duì)),即第0層中的兩個(gè)三角形T和TB,根據(jù)初始視點(diǎn)view0計(jì)算這兩個(gè)三角形在屏幕空間投影誤差(以下的誤差均指在屏幕空間的投影誤差),如果三角形誤差大于給定誤差(事先確定的誤差精度),將該三角形加入隊(duì)列Qs(即該三角形需要被剖分),如果三角形的誤差小于給定誤差,則將該三角形加入隊(duì)列Qns(即該三角形不需要被剖分),這就是三角形加入隊(duì)列Qs或者隊(duì)列Qns的劃分標(biāo)準(zhǔn)。假設(shè)此時(shí)這三角形的誤差均大于給定誤差,那么它們都放入隊(duì)列Qs。
此時(shí)隊(duì)列Qs中有兩個(gè)三角形T和TB,所以要使他們按照?qǐng)D2所示的方法進(jìn)行剖分。
三角形剖分的方法如下所述如圖2所示,對(duì)于三角形T(Va,Vl,Vr)(假設(shè)它所在的層次是m層,m>0),它是等腰直角三角形,Va為直角頂點(diǎn),Vc為斜邊VlVr的中點(diǎn),VaVl為左邊,VaVr為右邊(我們稱與三角形屬于同一層次并且共享左邊的三角形為左鄰三角形,與某三角形屬于同一層次并且共享右邊的三角形為右鄰三角形,與某三角形屬于同一層次并且共享斜邊的三角形為對(duì)鄰三角形,三角形與其對(duì)鄰三角形構(gòu)成一個(gè)菱形三角形對(duì)。如圖4中所示,TL為T的左鄰三角形,TR為T的右鄰三角形,TB為T的對(duì)鄰三角形,T與TB構(gòu)成一個(gè)菱形三角形對(duì))。連接VaVc,此時(shí)剖分出了兩個(gè)小三角形T0(Va,Vl,Vc),T1(Va,Vc,Vr),這兩個(gè)三角形是三角形T的子三角形,它們的層次為m+1層,相對(duì)于T,這兩個(gè)子三角形是高層次三角形。由于三角形T與三角形T0、T1為相鄰層次三角形(其三角形所在層次差1),稱三角形T0、T1是T的子三角形,T為三角形T0、T1的父三角形。同時(shí)誤差度量應(yīng)該滿足低層次三角形的誤差一定大于或等于高層次三角形的誤差。當(dāng)多個(gè)三角形分別位于不同層次但共享同一條邊時(shí),我們稱此種三角形的連接方式為T連接,如圖3a所示,三角形T與TB的連接方式就是T連接。
應(yīng)當(dāng)注意,隊(duì)列Qs與隊(duì)列Qns中每一項(xiàng)存放地形三角形,而隊(duì)列Qs和隊(duì)列Qnm中每一項(xiàng)存放地形的菱形三角形對(duì)(可參看圖5)。
初始化時(shí),如果隊(duì)列Qs非空或者隊(duì)列Qs與隊(duì)列Qns中的三角形總數(shù)小于某一給定閾值N時(shí),對(duì)隊(duì)列Qs中誤差最大的三角形進(jìn)行剖分,并從隊(duì)列Qs中刪除該三角形,并且將由它剖分所得的子三角形根據(jù)隊(duì)列Qs或者隊(duì)列Qns的劃分標(biāo)準(zhǔn)更新隊(duì)列Qs和隊(duì)列Qns。為了保證在剖分過程中不出現(xiàn)T連接,需要強(qiáng)制剖分(force split)那些構(gòu)成T連接的三角形對(duì)中的低層次三角形,直到?jīng)]有T連接為止(如圖3b所示,這種強(qiáng)制剖分可能影響其他三角形,直到剖分不產(chǎn)生T連接為止),在此過程中將同步更新隊(duì)列Qs和隊(duì)列Qns。當(dāng)隊(duì)列Qs已空或者隊(duì)列Qs與隊(duì)列Qns中的三角形總數(shù)大于給定閾值N時(shí),位于隊(duì)列Qs與隊(duì)列Qns中的三角形就構(gòu)成了在初始視點(diǎn)view0下的地形初始網(wǎng)格。
假設(shè)此時(shí),地形網(wǎng)格如圖5a所示。
假設(shè)S為隊(duì)列Qs與隊(duì)列Qns中的三角形集合。對(duì)于S中的每個(gè)三角形Tc,考察它的父三角形Tp與Tp的對(duì)鄰三角形Tpd是否都有兩個(gè)子三角形,如果是,則將該菱形三角形對(duì)放入隊(duì)列Qm,否則將該菱形三角形對(duì)放入隊(duì)列Qnm。如圖4所示,三角形T和其對(duì)鄰三角形TB恰好分別有兩個(gè)子三角形T0、T1,TB0、TB1,它們組成的菱形三角形對(duì)就是一個(gè)可合并的菱形三角形對(duì)。
如圖5a中,三角形4和5的父三角形與三角形10和11的父三角形構(gòu)成了一個(gè)可合并的菱形三角形對(duì),圖中用灰色表示,可將此菱形三角形對(duì)放入隊(duì)列Qm。其他三角形的父三角形對(duì)應(yīng)的菱形三角形對(duì)不是可合并的菱形三角形對(duì),故放入隊(duì)列Qnm。
初始化完成后的四隊(duì)列如圖5b所示。
2)誤差的重新計(jì)算及四隊(duì)列更新點(diǎn)發(fā)生一次變動(dòng)后,將根據(jù)當(dāng)前視點(diǎn)view,重新計(jì)算隊(duì)列Qs與隊(duì)列Qns中所有三角形及隊(duì)列Qm的誤差和隊(duì)列Qnm中所有菱形三角形對(duì)的誤差(菱形三角形對(duì)的誤差為菱形三角形對(duì)中兩個(gè)三角形誤差的最大值),并且根據(jù)誤差對(duì)四隊(duì)列做如下操作對(duì)于隊(duì)列Qs中所有三角形,如果三角形的誤差小于給定誤差,將該三角形移入隊(duì)列Qns,如果三角形的誤差大于給定誤差,則不移動(dòng)。對(duì)隊(duì)列Qns中所有三角形,如果三角形的誤差大于給定誤差,將該三角形移入隊(duì)列Qs,如果三角形的誤差小于給定誤差,則不移動(dòng)。完成上述操作后,對(duì)隊(duì)列Qs中的三角形按照誤差由大到小進(jìn)行排序。
如圖5a所示,對(duì)前一視點(diǎn)的地形三角形1-21,基于當(dāng)前視點(diǎn)重新計(jì)算誤差,此時(shí)三角形14-18的誤差大于給定誤差,放入隊(duì)列Qs,其他三角形不用變換隊(duì)列。對(duì)隊(duì)列Qs中的三角形按照誤差從大到小進(jìn)行排序,得到序列17,18,14,15,16,如圖5c所示。
對(duì)于隊(duì)列Qm中的菱形三角形對(duì),如果菱形三角形對(duì)的誤差大于給定誤差,則將該菱形三角形對(duì)移入隊(duì)列Qnm中,表示該菱形三角形對(duì)不需要合并;如果菱形三角形對(duì)的誤差小于給定誤差,則不移動(dòng)。對(duì)于隊(duì)列Qnm中的菱形三角形對(duì),如果菱形三角形對(duì)包含的兩個(gè)三角形分別有且只有兩個(gè)子三角形同時(shí)滿足該菱形三角形對(duì)的誤差小于給定誤差,則將該菱形三角形對(duì)移入隊(duì)列Qm中,表示該菱形三角形對(duì)可合并;如果菱形三角形對(duì)包含的兩個(gè)三角形中的任何一個(gè)三角形不滿足有且只有兩個(gè)子三角形或者該菱形三角形對(duì)的誤差大于給定誤差,則不移動(dòng)。完成上述操作后,將隊(duì)列Qm中的菱形三角形對(duì)按照誤差由小到大進(jìn)行排序。
如圖5c所示,對(duì)于隊(duì)列Qm中的菱形三角形對(duì),進(jìn)行更新。此例中,隊(duì)列Qm中只有一個(gè)菱形三角形對(duì),假設(shè)該菱形三角形對(duì)的誤差小于給定誤差,則不變化。對(duì)于隊(duì)列Qnm中的菱形三角形對(duì),由于本例中該隊(duì)列中的每個(gè)菱形三角形對(duì)中的三角形均不滿足有且僅有兩個(gè)子三角形的要求,所以也不發(fā)生移動(dòng)。此時(shí),對(duì)隊(duì)列Qm中的菱形三角形對(duì)按照誤差從小到大進(jìn)行排序,由于隊(duì)列Qm中只有一個(gè)菱形三角形對(duì),故隊(duì)列Qm沒有發(fā)生變化。
3)四隊(duì)列驅(qū)動(dòng)的三角形構(gòu)網(wǎng)分別取隊(duì)列Qs和Qm中的第一項(xiàng)(對(duì)于隊(duì)列Qs第一項(xiàng)為第一項(xiàng)一個(gè)三角形,對(duì)于Qm第一項(xiàng)為一個(gè)菱形三角形對(duì)),根據(jù)兩者的誤差大小決定進(jìn)行三角形的剖分或合并,當(dāng)Qs中第一項(xiàng)的誤差大于Qm第一項(xiàng)的誤差時(shí),對(duì)Qs中的三角形進(jìn)行剖分,并且更新四隊(duì)列,否則,對(duì)Qm中的三角形進(jìn)行合并,并且更新四隊(duì)列。當(dāng)?shù)匦尉W(wǎng)格中三角形超出給定數(shù)目的三角形,或者Qs和Qm為空,或Qs中第一項(xiàng)的誤差值小于Qm中第一項(xiàng)的誤差值,中止操作。此時(shí)的隊(duì)列Qs與隊(duì)列Qns中的三角形集合就是當(dāng)前視點(diǎn)下的地形網(wǎng)格。圖4表示了三角形對(duì)的剖分(split)和合并(merge)關(guān)系。
如圖5d,由于三角形17的誤差大于菱形三角形對(duì)<(4,5),(10,11)>,對(duì)三角形進(jìn)行剖分。在本例中,分別對(duì)三角形17,18,14,15進(jìn)行了剖分,在剖分的同時(shí)對(duì)四隊(duì)列進(jìn)行了更新。后由于三角形16的誤差小于菱形三角形對(duì)<(4,5),(10,11)>,對(duì)三角形進(jìn)行合并,生成了三角形23,22.更新后的四隊(duì)列如圖5e所示,本例中三角形16沒有剖分是由于剖分所得的三角形總數(shù)大于給定數(shù)目或者由于時(shí)間的限制,操作中止。
權(quán)利要求
1.一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法,其特征在于包括以下三個(gè)步驟1).地形網(wǎng)格及四隊(duì)列的初始化初始地形為兩個(gè)共享斜邊的等腰直角三角形,根據(jù)初始視點(diǎn),計(jì)算這兩個(gè)三角形在屏幕空間投影誤差,對(duì)地形三角形進(jìn)行剖分,使地形三角形的誤差達(dá)到精度要求,將剖分得到的地形三角形和這些地形三角形構(gòu)成的三角形對(duì)分別放入四隊(duì)列,完成初始化;2).誤差的重新計(jì)算及四隊(duì)列更新根據(jù)變換后的視點(diǎn),重新計(jì)算每個(gè)地形三角形或者地形三角形對(duì)的屏幕空間投影誤差,根據(jù)誤差,更新四隊(duì)列;3).四隊(duì)列驅(qū)動(dòng)的三角形構(gòu)網(wǎng)比較剖分隊(duì)列和合并隊(duì)列的第一項(xiàng),根據(jù)兩者的誤差大小決定進(jìn)行三角形的剖分或合并,在剖分或合并后更新四隊(duì)列。
2.根據(jù)權(quán)利要求1所述的一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法,其特征在于,四隊(duì)列是需要剖分的三角形隊(duì)列和不需要剖分三角形的隊(duì)列,需要合并的三角形隊(duì)列和不需要合并的三角形隊(duì)列,需要剖分的三角形隊(duì)列根據(jù)其誤差值從大到小排列,而不需要剖分的三角形隊(duì)列則無(wú)需排列,需要合并的三角形隊(duì)列根據(jù)其誤差值從小到大排列,而不需要合并的三角形隊(duì)列則無(wú)需排列。
全文摘要
本發(fā)明公開了一種與視點(diǎn)相關(guān)的基于四隊(duì)列優(yōu)化的地形網(wǎng)格生成方法。包括地形網(wǎng)格及四隊(duì)列的初始化;誤差的重新計(jì)算及四隊(duì)列更新;四隊(duì)列驅(qū)動(dòng)的三角形構(gòu)網(wǎng)三個(gè)步驟。該方法處理原始的地形數(shù)據(jù),能夠在有限的時(shí)間能完成地形網(wǎng)格的生成,同時(shí)保證顯示畫面的質(zhì)量。本發(fā)明利用了視域之間的連貫性,能有效地控制地形網(wǎng)格中三角形的數(shù)目,采用四隊(duì)列的地形網(wǎng)格驅(qū)動(dòng),僅對(duì)剖分隊(duì)列和合并隊(duì)列進(jìn)行排序,在視點(diǎn)變動(dòng)不大時(shí),剖分隊(duì)列和合并隊(duì)列的項(xiàng)數(shù)很少,減少了排序時(shí)間,提高了生成地形網(wǎng)格的效率,使得地形的實(shí)時(shí)漫游更加流暢,顯示的畫面質(zhì)量更高。
文檔編號(hào)G06T17/05GK1545070SQ20031010888
公開日2004年11月10日 申請(qǐng)日期2003年11月24日 優(yōu)先權(quán)日2003年11月24日
發(fā)明者華煒, 陸艷青, 周棟, 鮑虎軍, 煒 華 申請(qǐng)人:浙江大學(xué)