本發(fā)明涉及一種動態(tài)三維場景虛擬地形可視性快速判別方法,是一種通過正向階段式并行掃描實(shí)現(xiàn)動態(tài)三維場景虛擬地形中點(diǎn)對點(diǎn)的可視性快速判別方法,屬于三維圖形繪制技術(shù)領(lǐng)域。
背景技術(shù):
地形是自然場景最重要的組成部分之一,地形渲染是真實(shí)感繪制的主要研究內(nèi)容。數(shù)字高程模型(digitalelevationmodel,dem)是一種離散數(shù)字地貌模型,基于dem的地形交互式可視化是科學(xué)可視化、飛行模擬、虛擬現(xiàn)實(shí)、交互式3d游戲的重要研究內(nèi)容。在理論上,地形可視性判別需計算來自各個方向上頂點(diǎn)的遮擋關(guān)系。對于一個尺寸為n×n的高度場虛擬地形,如果一個方位角方向的所有高度場點(diǎn)都被認(rèn)為是接收點(diǎn),計算的時間復(fù)雜度將達(dá)到o(n3)。傳統(tǒng)方法采用主要的思想是生成一條連接兩個檢測點(diǎn)的線段,也稱作“視線”(lineofsight,los),判斷該線段與地形多邊形是否相交。對于一個包含n個實(shí)體的環(huán)境,需要在每幀做o(n2)數(shù)量級的檢查計算,在三維動態(tài)場景中,無法實(shí)時的檢測點(diǎn)的可視域。如果在并行掃描的基礎(chǔ)上,有效減少求交測試次數(shù),則能提高可視域的判斷速度,進(jìn)而改進(jìn)繪制速度。
在實(shí)際動態(tài)三維場景中,隨著視點(diǎn)的變化,視點(diǎn)的可視域是隨時發(fā)生變化的,但虛擬地形高程點(diǎn)之間的相對位置關(guān)系是不會發(fā)生變化的。因此,可以將高程點(diǎn)之間的相對位置關(guān)系通過掃描和預(yù)計算的方式存儲,以減少動態(tài)場景的計算量。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種動態(tài)三維場景虛擬地形可視性快速判別方法,該方法通過設(shè)計一個虛擬地形的代理包圍盒,快速檢測測試線與場景的交點(diǎn);通過設(shè)計階段式并行高度場掃描算法,預(yù)計算場景中任一點(diǎn)的最大視界角,有效的降低了傳統(tǒng)掃描方法的復(fù)雜性,提高了對三維虛擬場景中虛擬地形的點(diǎn)對點(diǎn)的可視性判別效率。
本發(fā)明的技術(shù)解決方案是這樣實(shí)現(xiàn)的:一種動態(tài)三維場景虛擬地形可視性快速判別方法,其特征在于:方法由三部分構(gòu)成,第一部分針對初始虛擬地形構(gòu)造代理包圍盒;設(shè)計一個可見性函數(shù)
第二部分針對虛擬地形生成k條并行掃描線,計算最大視界角;將n×n的高度場剖面分成若干片段,每個片段具有一個高程值,掃描從片段初始點(diǎn)起,建立2n-1條線程,每條線程并行計算掃描點(diǎn)或高程點(diǎn)在當(dāng)前掃描方向
第三部分針對最大視界角的存儲與搜索,構(gòu)造可視域;緩存中存儲線程上每個點(diǎn)在該方向的最大視界角b001;為近似估算任意掃描點(diǎn)的視域范圍,k向掃描算法分別沿k個方向并行掃描高度場,當(dāng)k=3時的8個掃描方向;最后,通過任一點(diǎn)的k個方向視界角b001,估計該點(diǎn)的可視范圍信息。
所述的第一部分針對初始虛擬地形構(gòu)造代理包圍盒,具體步驟如下:
設(shè)場景中任意兩點(diǎn)x和y的可見性函數(shù)為v(x,y),點(diǎn)x和y之間存在的幾何圖元集為
對于n個幾何圖元集
因此,建立代理包圍盒將利用近似幾何圖元集
為減少p’代替p造成的判斷錯誤,建立以下判斷及糾錯措施:類型1:
所述的第二部分針對虛擬地形生成k條并行掃描線,計算最大視界角,具體步驟如下:
step201:設(shè)置掃描方向數(shù)k和k個方向上的掃描線數(shù)目k*sn(sn=2n-1);
step202:在計算機(jī)系統(tǒng)的內(nèi)存中,創(chuàng)建一個包含2n-1個hell類型的變量的數(shù)組par;
step203:利用正向階段式掃描方法c001,從初始視點(diǎn)p1出發(fā),依次連接視點(diǎn)和該方向上的所有格網(wǎng)點(diǎn),計算初始視點(diǎn)與其它各個高程點(diǎn)的視界角
step204:比較新的視界角
step205:掃描第二個測試點(diǎn)p2,僅測試該點(diǎn)與活高程點(diǎn)pk之間的各點(diǎn),即step104中下一個高程點(diǎn)的視界角掃描范圍限定在前一個高程點(diǎn)的最大視界角所在點(diǎn)之內(nèi)。存儲p2的最大視界角點(diǎn)為第二個高程點(diǎn)pm,以此類推,下一個測試點(diǎn)的計算范圍限定在該點(diǎn)與活高程點(diǎn)pm之間。
在高程模型中設(shè)兩個相鄰視點(diǎn)p1和p2,其中p1的活高程點(diǎn)為m1,m2是與m1相鄰的下一個目標(biāo)點(diǎn),
所述的第三部分針對最大視界角的存儲與搜索,構(gòu)造可視域是利用樹型數(shù)據(jù)結(jié)構(gòu)hell構(gòu)造可視性搜索樹,該結(jié)構(gòu)的每個結(jié)點(diǎn)p包含數(shù)據(jù)域data和指針域pi,其中數(shù)據(jù)域data存儲掃描點(diǎn)位置坐標(biāo),指針域pi(i=1..n)分為指向其雙親結(jié)點(diǎn)的指針和指向其孩子結(jié)點(diǎn)的指針,雙親節(jié)點(diǎn)存儲p的最大視界角所在點(diǎn),其孩子節(jié)點(diǎn)存儲以為最大視界角的高程點(diǎn)。hell結(jié)構(gòu)的根結(jié)點(diǎn)為該掃描線上的初始掃描點(diǎn)。因此,hell樹型結(jié)構(gòu)表示了全部高程點(diǎn)之間的可視性關(guān)系。具體步驟如下:
step301:從初始掃描點(diǎn)p開始,存儲其最大視界角所在點(diǎn)r為其hell類型雙親結(jié)點(diǎn),設(shè)置雙親r的第一個孩子指針指向p。
step302:沿著一個掃描線方向?qū)ふ蚁乱粋€掃描點(diǎn)q,存儲其最大視界角所在點(diǎn)r為其hell型雙親結(jié)點(diǎn),設(shè)置雙親r的第二個孩子指針指向q,依此類推。
step303:沿著k個方向分別掃描,建立k個樹型結(jié)構(gòu)hell,存儲每個掃描點(diǎn)的最大視界角點(diǎn)b001。
step304:選擇場景中任意一點(diǎn)p,搜索k個樹型存儲結(jié)構(gòu)hell;
step305:搜索hell結(jié)構(gòu)中p點(diǎn)的k個最大視界角所在點(diǎn)及值;
step306:以觀測點(diǎn)p為初始平面所在點(diǎn),連接k各最大視界角所在點(diǎn),作為p的視域范圍。
本發(fā)明的積極效果是分布式虛擬地形近似可視域的計算方法,該方法設(shè)計了一個虛擬地形的代理包圍盒,并改進(jìn)了已有的并行高度場掃描算法,使得并行掃描算法的掃描復(fù)雜性從o(n2)降為o(nlogn),實(shí)現(xiàn)了虛擬地形的點(diǎn)間可見性和可視域近似計算,提高了虛擬地形的動態(tài)更新效率。
附圖說明
圖1為代理包圍盒視線類型。
圖2為高度場剖面示意圖。
圖3為視界角計算示意圖。
圖4為k=4時的8個掃描方向示意圖。
圖5為階段式掃描示意圖。
圖6為枚舉相鄰視點(diǎn)p1,p2間的9種視界角關(guān)系。
圖7hell樹的創(chuàng)建過程示意圖。
圖8為hell樹結(jié)構(gòu)示意圖。
圖9近似視域構(gòu)成示意圖。
具體實(shí)施方式
為了使本方法的特征和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合具體實(shí)施例對本方法作進(jìn)一步的描述。在本實(shí)施例中,考慮了兩種地形數(shù)據(jù):1)dem真實(shí)數(shù)據(jù),2)基于perlin噪聲生成的虛擬地形數(shù)據(jù)。計算機(jī)系統(tǒng)的cpu選擇intel(r)xeon(r)cpue5620@雙核2.40ghz,內(nèi)存選擇金士頓8gbddr31333,硬盤選擇buffalohd-ce1.5tu2;顯卡選擇nvidiaquadrok5000,計算機(jī)操作系統(tǒng)選用windows7,軟件編程工具選用vc++2010。
一種動態(tài)三維場景虛擬地形可視性快速判別方法,其特征在于:方法由三部分構(gòu)成,第一部分,針對初始虛擬地形構(gòu)造代理包圍盒。設(shè)計一個可見性函數(shù)
第二部分針對虛擬地形生成k條并行掃描線,計算最大視界角。將n×n的高度場剖面分成若干片段,每個片段具有一個高程值,掃描從片段初始點(diǎn)起,建立2n-1條線程,每條線程并行計算掃描點(diǎn)或高程點(diǎn)在當(dāng)前掃描方向
第三部分針對最大視界角的存儲與搜索,構(gòu)造可視域。緩存中存儲線程上每個點(diǎn)在該方向的最大視界角b001(圖3);為近似估算任意掃描點(diǎn)的視域范圍,k向掃描算法分別沿k個方向并行掃描高度場,當(dāng)k=3時的8個掃描方向(圖4);最后,通過任一點(diǎn)的k個方向視界角b001,估計該點(diǎn)的可視范圍信息。
所述的第一部分針對初始虛擬地形構(gòu)造代理包圍盒,具體步驟如下:
設(shè)場景中任意兩點(diǎn)x和y的可見性函數(shù)為v(x,y),點(diǎn)x和y之間存在的幾何圖元集為
對于n個幾何圖元集
因此,建立代理包圍盒將利用近似幾何圖元集
為減少p’代替p造成的判斷錯誤,建立以下判斷及糾錯措施:類型1:
所述的第二部分針對虛擬地形生成k條并行掃描線,計算最大視界角,具體步驟如下:
step201:設(shè)置掃描方向數(shù)k和k個方向上的掃描線數(shù)目k*sn(sn=2n-1);
step202:在計算機(jī)系統(tǒng)的內(nèi)存中,創(chuàng)建一個包含2n-1個hell類型的變量的數(shù)組par;
step203:利用正向階段式掃描方法c001,從初始視點(diǎn)p1出發(fā),依次連接視點(diǎn)和該方向上的所有格網(wǎng)點(diǎn),計算初始視點(diǎn)與其它各個高程點(diǎn)的視界角
step204:比較新的視界角
step205:掃描第二個測試點(diǎn)p2,僅測試該點(diǎn)與活高程點(diǎn)pk之間的各點(diǎn),即step104中下一個高程點(diǎn)的視界角掃描范圍限定在前一個高程點(diǎn)的最大視界角所在點(diǎn)之內(nèi)。存儲p2的最大視界角點(diǎn)為第二個高程點(diǎn)pm,以此類推,下一個測試點(diǎn)的計算范圍限定在該點(diǎn)與活高程點(diǎn)pm之間,見圖5。
在高程模型中設(shè)兩個相鄰視點(diǎn)p1和p2,其中p1的活高程點(diǎn)為m1,m2是與m1相鄰的下一個目標(biāo)點(diǎn),
所述的第三部分針對最大視界角的存儲與搜索,構(gòu)造可視域。本方法利用樹型數(shù)據(jù)結(jié)構(gòu)hell構(gòu)造可視性搜索樹,該結(jié)構(gòu)的每個結(jié)點(diǎn)p包含數(shù)據(jù)域data和指針域pi,其中數(shù)據(jù)域data存儲掃描點(diǎn)位置坐標(biāo),指針域pi(i=1..n)分為指向其雙親結(jié)點(diǎn)的指針和指向其孩子結(jié)點(diǎn)的指針,雙親節(jié)點(diǎn)存儲p的最大視界角所在點(diǎn),其孩子節(jié)點(diǎn)存儲以為最大視界角的高程點(diǎn)(圖6,圖7)。hell結(jié)構(gòu)的根結(jié)點(diǎn)為該掃描線上的初始掃描點(diǎn)。因此,hell樹型結(jié)構(gòu)表示了全部高程點(diǎn)之間的可視性關(guān)系。具體步驟如下:
step301:從初始掃描點(diǎn)p開始,存儲其最大視界角所在點(diǎn)r為其hell類型雙親結(jié)點(diǎn),設(shè)置雙親r的第一個孩子指針指向p。
step302:沿著一個掃描線方向?qū)ふ蚁乱粋€掃描點(diǎn)q,存儲其最大視界角所在點(diǎn)r為其hell型雙親結(jié)點(diǎn),設(shè)置雙親r的第二個孩子指針指向q。依此類推(見圖7與圖8)。
step303:沿著k個方向分別掃描,建立k個樹型結(jié)構(gòu)hell,存儲每個掃描點(diǎn)的最大視界角點(diǎn)b001。
step304:選擇場景中任意一點(diǎn)p,搜索k個樹型存儲結(jié)構(gòu)hell;
step305:搜索hell結(jié)構(gòu)中p點(diǎn)的k個最大視界角所在點(diǎn)及值;
step306:以觀測點(diǎn)p為初始平面所在點(diǎn),連接k各最大視界角所在點(diǎn),作為p的視域范圍(圖9)。
在本實(shí)施例中,代理包圍盒利用簡單的幾個圖元代表復(fù)雜的幾何形狀,來控制求交計算次數(shù)。
當(dāng)