本發(fā)明屬于計(jì)算機(jī)圖形學(xué)和地圖制圖學(xué)領(lǐng)域,具體涉及一種三維地圖線要素注記自動(dòng)放置方法。
背景技術(shù):
目前對(duì)地圖注記放置的研究有如下幾個(gè)方面:
(1)二維地圖注記
christensenetal.總結(jié)了靜態(tài)地圖點(diǎn)狀要素注記放置的近似算法。donascimentoetal.提出了一個(gè)支持人工交互與自動(dòng)化方法相結(jié)合的地圖注記自動(dòng)放置框架,能充分利用專家領(lǐng)域知識(shí),改善地圖注記的質(zhì)量并提高了注記的處理效率。rylovetal.在圖像空間中,根據(jù)地圖的背景的同質(zhì)性,評(píng)估地圖注記放置的質(zhì)量。wuetal.提出了一個(gè)基于網(wǎng)格的注記放置方法,能夠有效處理點(diǎn)要素注記以及面要素注記。
petzoldetal.針對(duì)屏幕地圖提出快速注記計(jì)算方法,引入預(yù)處理步驟,建立注記之間潛在的沖突關(guān)系圖,加速實(shí)時(shí)運(yùn)行階段注記沖突關(guān)系的處理。gemsaetal.提出了用于交通導(dǎo)航的屏幕地圖注記放置策略,在限定地圖注記數(shù)量的前提下,給出了具有多項(xiàng)式時(shí)間復(fù)雜度的注記放置算法。根據(jù)注記參考點(diǎn)位是否固定,屏幕地圖的注記問題又可以分為定點(diǎn)注記模型和滑動(dòng)注記模型。定點(diǎn)注記模型中注記只能放置在有限的幾個(gè)點(diǎn)位上,而滑動(dòng)注記模型則允許注記沿著注記參考點(diǎn)“滑動(dòng)”,以避免注記被其他對(duì)象遮擋。beenetal.針對(duì)定點(diǎn)注記,提出了在用戶縮放操作下,保持注記顯示一致性的快速屏幕注記篩選算法,可使地圖注記在用戶縮放和平移過程中不會(huì)產(chǎn)生閃爍和跳動(dòng)現(xiàn)象,該算法為每個(gè)定點(diǎn)注記計(jì)算出一個(gè)連續(xù)的比例尺區(qū)間,當(dāng)?shù)貓D縮放過程中的比例尺落在區(qū)間內(nèi),就顯示該注記。gemsaetal.進(jìn)一步針對(duì)定點(diǎn)注記提出了在用戶旋轉(zhuǎn)操作下保持注記顯示一致性的屏幕注記放置算法,避免了地圖旋轉(zhuǎn)時(shí)注記的閃爍與跳動(dòng),該算法為每個(gè)注記計(jì)算一個(gè)連續(xù)的角度區(qū)間,當(dāng)?shù)貓D的旋轉(zhuǎn)角度落在區(qū)間范圍內(nèi),就顯示該注記。vaaraniemietal.針對(duì)滑動(dòng)注記,提出了一種基于受力模擬的注記放置算法,假定注記間存在斥力,注記與其參考點(diǎn)(參考線)之間存在的引力,在用戶交互過程中實(shí)時(shí)模擬注記的受力運(yùn)動(dòng),并隱藏移動(dòng)速度過快的注記,實(shí)現(xiàn)了一個(gè)隨用戶交互以及時(shí)間改變連續(xù)變化的注記模型。
(2)嵌入式三維地圖注記
現(xiàn)代三維屏幕地圖則可以使用透視模式——允許改變相機(jī)的觀察角度,地圖注記在地圖中被朝上放置在平坦的表面上,和其它地圖場(chǎng)景對(duì)象一起在透視投影下被渲染到屏幕上。在地圖渲染的過程中,需要將包含有地圖注記的紋理映射到地面上。地圖注記紋理既可以由制圖人員在預(yù)處理階段使用靜態(tài)二維地圖注記放置算法方法為不同比例尺地圖預(yù)先生成,也可以在實(shí)時(shí)交互過程中依據(jù)特定的規(guī)則,動(dòng)態(tài)地合成,這類方法可稱作嵌入式三維地圖注記。在不考慮地物遮擋的前提下,對(duì)二維屏幕地圖的注記放置方法稍作修改就能大致滿足交互式三維地圖注記放置的要求。maassetal.針對(duì)地物遮擋問題,提出了一種嵌入式的三維線要素注記放置算法,他在線要素注記參考線上設(shè)置若干采樣點(diǎn),利用可編程渲染管線對(duì)這些采樣點(diǎn)執(zhí)行可見性判斷,盡量避免注記被遮擋。這類方法的主要缺陷在于地圖注記總是正面朝上與地表相貼合,因此當(dāng)觀察者視線與地面接近于平行的時(shí)候,注記的可讀性急劇下降,變得幾乎不可分辨。schwartges為三維導(dǎo)航地圖給出了一種混合式的注記模型,他對(duì)當(dāng)前激活的路徑(正在導(dǎo)航的路徑)使用基于布告板的注記,而將嵌入式三維注記形式應(yīng)用于處于非激活狀態(tài)的其他地圖要素。
(3)基于布告板的三維地圖注記
基于布告板的地圖注記算法將每個(gè)注記當(dāng)做一個(gè)軸對(duì)齊矩形(axis-alignedboundingbox,aabb),注記文字的紋理被映射到這個(gè)矩形上,隨著地圖觀察者視角的變化,動(dòng)態(tài)地計(jì)算aabb的變換矩陣,確保注記能始終以一個(gè)合適的角度朝向觀察者。對(duì)每一個(gè)注記參考點(diǎn)執(zhí)行遮擋測(cè)試(類似于dem上的視域分析),以移除被遮擋的注記。隨后將注記投影到屏幕空間,借鑒二維地圖中注記處理的方法,在屏幕空間上解決注記之間的沖突。為了突出強(qiáng)調(diào)注記與相應(yīng)要素之間的聯(lián)系,有時(shí)會(huì)在注記布告板與注記參考點(diǎn)之間繪制一條連接線。maassetal.使用一個(gè)平行于屏幕的平面作為注記布告板的容器,并且由遠(yuǎn)及近,將靠近觀察者的注記繪制在容器的底部,遠(yuǎn)離觀察者的注記繪制在容器的頂部。schwartgesetal.針對(duì)三維導(dǎo)航地圖的道路注記提出了一種基于布告板的注記算法,通過實(shí)時(shí)模擬屏幕空間注記受力下的位移情況,實(shí)現(xiàn)了注記的平滑移動(dòng)??傮w上來說,基于布告板的三維地圖注記能夠滿足點(diǎn)要素的注記需求。然而對(duì)于三維地圖中的線要素與面要素,使用這種注記形式需要預(yù)先計(jì)算出一個(gè)或多個(gè)參考點(diǎn)作為注記布告板放置的錨點(diǎn),這種做法會(huì)削弱注記與要素之間的關(guān)聯(lián)。對(duì)于非點(diǎn)狀要素而言,定點(diǎn)注記的形式無法適應(yīng)不同視角下的觀測(cè)需要,因?yàn)殡S著觀察角度的變化,預(yù)先計(jì)算的注記參考點(diǎn)可能會(huì)被遮擋,而對(duì)應(yīng)的要素只是部分被地形或建筑物遮擋,還有部分在屏幕上可見。
總體上來說,目前三維地圖的注記研究尚不完善,大部分研究?jī)A向于將問題簡(jiǎn)化,使用簡(jiǎn)化后的模型處理地圖中要素的注記,而忽略或者弱化了三維地圖中地物對(duì)注記或者注記參考點(diǎn)(線)的遮擋問題。此外嵌入式的三維注記在極端視角下難以保證注記易于辨識(shí),而基于布告板的注記會(huì)損害注記與對(duì)象之間的關(guān)聯(lián)性。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)現(xiàn)有三維地圖注記放置方法的缺陷,本發(fā)明公開了一種三維地圖線要素注記自動(dòng)放置方法,可以滿足三維線要素對(duì)其注記參考線的差異性層次細(xì)節(jié)表達(dá)需求,提高沿線放置注記的實(shí)時(shí)計(jì)算效率,解決地物對(duì)注記的遮擋問題,增強(qiáng)注記的可讀性。
技術(shù)方案:本發(fā)明公開了一種三維地圖線要素注記自動(dòng)放置方法,可用于三維地圖中的線性要素文字注記的位置、朝向、尺寸等參數(shù)的實(shí)時(shí)計(jì)算,包括如下步驟:
(1)將線要素貼合到地形表面形成原始的注記參考線,并建立靜態(tài)的注記參考線層次樹結(jié)構(gòu)t;t中的每個(gè)結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e),其中vs為起始頂點(diǎn),ve為終止頂點(diǎn),bss,e為頂點(diǎn)vs,vs+1,…,ve-1,ve的包圍球,errs,e為線{vs,ve}和線{vs,vs+1,…,ve-1,ve}之間的差異,ns,i、ni,e為ns,e的左右孩子結(jié)點(diǎn);
(2)在運(yùn)行時(shí)階段,遍歷靜態(tài)的注記參考線層次樹結(jié)構(gòu)動(dòng)態(tài)構(gòu)造視點(diǎn)相關(guān)的注記參考線,并進(jìn)行視錐體裁剪、遮擋裁剪和單調(diào)性分割;在遍歷注記參考線層次樹結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)的時(shí)候,若不滿足條件:
(3)將注記參考線投影至屏幕空間,處理注記之間的相互沖突關(guān)系,生成可渲染的注記對(duì)象。
進(jìn)一步地,步驟(1)中的建立注記參考線層次樹結(jié)構(gòu)t的步驟包括:
(1.1)初始化一個(gè)存儲(chǔ)待處理的結(jié)點(diǎn)的序列s={n1,2,n2,3,…,nn-1,n},其中n表示貼合到地形上的注記參考線的頂點(diǎn)的數(shù)目;
(1.2)每次從序列s中選取兩個(gè)相鄰的結(jié)點(diǎn)na,b,nb,c,使得誤差erra,c達(dá)到最?。?/p>
(1.3)從序列s里移除這兩個(gè)結(jié)點(diǎn),并插入新的合并結(jié)點(diǎn)na,c=(va,vc,bsa,c,erra,c,na,b,nb,c);
(1.4)重復(fù)步驟(1.2)和(1.3),直到s={n1,n},{n1,n}就是注記參考線層次樹t的根節(jié)點(diǎn)。
進(jìn)一步地,步驟(1)中,結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)中的誤差errs,e計(jì)算公式為:
errs,e=max(area(vs,vi,ve),errs,i,erri,e)
包圍球bss,e計(jì)算公式為:
bss,e=merge(bss,i,bsi,e)
其中,area(vs,vi,ve)表示代表以vs,vi,ve為頂點(diǎn)的三角形面積,bss,e為合并包圍球bss,i與bsi,e后得到的新包圍球。
進(jìn)一步地,步驟(2)中在遍歷注記參考線層次樹結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)的時(shí)候,若需要遍歷其子結(jié)點(diǎn)時(shí),若滿足(vi-vs)·(ve-vi)<0,則記錄分割頂點(diǎn)vi;在進(jìn)行單調(diào)性分割時(shí),使用生成的分割頂點(diǎn)以及線方向的單調(diào)性測(cè)試將視點(diǎn)相關(guān)的注記參考線分割為多段。
進(jìn)一步地,步驟(2)使用陰影圖算法,判斷并裁剪注記參考線被地物遮擋的部分。
進(jìn)一步地,步驟(3)中采用貪心圖著色算法處理注記之間的沖突,決定注記的處理順序。
有益效果:本發(fā)明方法針對(duì)三維線要素的幾何形態(tài)特征,沿動(dòng)態(tài)構(gòu)造的視點(diǎn)相關(guān)注記參考線放置注記文字,極大地降低了注記參考線的實(shí)時(shí)計(jì)算量,并有效解決了三維透視視角對(duì)注記參考線細(xì)節(jié)層次的差異化需求,能夠適應(yīng)不同視距以及觀察角度的變化,并反映出線要素的走向。此外,采用陰影圖算法為注記參考線執(zhí)行進(jìn)取式的遮擋裁剪,避免了注記被放置在線要素被地形遮擋的部分,并在屏幕空間使用無回溯的圖著色算法解決了注記之間的沖突問題,提高了沿線分布的文字注記可讀性。
附圖說明
圖1為三維地圖線要素注記放置流程圖。
圖2為注記視點(diǎn)相關(guān)參考線動(dòng)態(tài)構(gòu)造示意圖:(a)注記參考線層次樹結(jié)構(gòu);(b)動(dòng)態(tài)地生成視點(diǎn)相關(guān)的注記參考線示意圖。
圖3為基于陰影圖遮擋裁剪示意圖:(a)陰影圖相機(jī)位置示意圖;(b)地形陰影對(duì)注記的遮擋。
圖4為注記參考線分割示意圖:(a)(b)使用分割頂點(diǎn)序列分割注記參考線;(c)單調(diào)性分割示意圖。
圖5為屏幕空間的注記沖突處理示意圖:(a)注記參考線投影到屏幕空間;(b)不同參考線在屏幕空間示意圖;(c)注記在屏幕空間潛在沖突關(guān)系圖。
圖6為采用本發(fā)明方法渲染的三維地圖線要素注記效果圖:(a)方法效果組圖a;(b)方法效果組圖b;(c)過度曲折的注記參考線分割為多段分別注記。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式進(jìn)一步闡釋本發(fā)明。
本發(fā)明實(shí)施例公開的一種三維地圖線要素注記自動(dòng)放置方法的處理流程分為三個(gè)階段(圖1),在預(yù)處理階段生成一個(gè)注記參考線的層次樹結(jié)構(gòu)以加速下一階段視點(diǎn)相關(guān)的注記參考線的實(shí)時(shí)生成;在并行注記遍歷篩選階段,采用管線化的策略,并行地處理每一個(gè)注記,最后將注記參考線投影到屏幕空間輸入到下一階段;最后一階段,在屏幕空間上處理注記之間的沖突。
步驟(1)預(yù)處理階段,將注記參考線貼合到地表,并建立注記參考線層次樹結(jié)構(gòu)。包括:
(1.1)將線要素貼合到地形表面,生成原始的注記參考線。
為了使注記能夠反映出地形高程的變化,需要在注記參考線上插入大量的頂點(diǎn)使其與地面相貼合,這會(huì)增加注記放置的計(jì)算量,進(jìn)而影響地圖程序的實(shí)時(shí)交互特性。因此在預(yù)處理階段構(gòu)造注記參考線層次樹結(jié)構(gòu),并在實(shí)時(shí)運(yùn)行階段動(dòng)態(tài)地生成視點(diǎn)相關(guān)的注記參考線(圖2),有效地降低了注記參考線的幾何復(fù)雜度,并確保了注記參考線保留了當(dāng)前視點(diǎn)下必要的幾何信息。
令r={v1,v2,...,vn}代表貼合到地形上的注記參考線,它包含一個(gè)對(duì)線要素內(nèi)插高程點(diǎn),貼合到地形之后生成的頂點(diǎn)序列v1,v2,...,vn。令t代表預(yù)處理階段生成的注記參考線層次樹,它以二叉樹的形式存儲(chǔ)。t中的每個(gè)結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)包含:起始頂點(diǎn)vs,終止頂點(diǎn)ve,頂點(diǎn)vs,vs+1,...,ve-1,ve的包圍球bss,e,線{vs,ve}和線{vs,vs+1,...,ve-1,ve}之間的差異errs,e,以及可選的兩個(gè)左右孩子結(jié)點(diǎn)ns,i&ni,e。
(1.2)對(duì)原始的注記參考線執(zhí)行三維線要素簡(jiǎn)化操作,形成注記參考線乘次樹結(jié)構(gòu)。
本步驟中,采用自底向上的方式構(gòu)建樹t:
1)初始化一個(gè)存儲(chǔ)待處理的結(jié)點(diǎn)的序列s={n1,2,n2,3,…,nn-1,n};
2)每次從中選取兩個(gè)相鄰的結(jié)點(diǎn)na,b,nb,c,使得誤差erra,c達(dá)到最小;
3)從s里移除這兩個(gè)結(jié)點(diǎn),并插入新的合并結(jié)點(diǎn)na,c=(va,vc,bsa,c,erra,c,
na,b,nb,c);
4)重復(fù)上述2~3步,直到s={n1,n};
5)n1,n就是注記參考線層次樹t的根節(jié)點(diǎn)。
結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)中的誤差errs,e可以使用以下公式計(jì)算:
errs,e=max(area(vs,vi,ve),errs,i,erri,e)
包圍球bss,e可以使用以下公式快速計(jì)算:
bss,e=merge(bss,i,bsi,e)
其中area(vs,vi,ve)代表以vs,vi,ve為頂點(diǎn)的三角形面積,merge(bss,i,bsi,e)表示合并包圍球bss,i與bsi,e后得到的新的包圍球,如果e=s+1,則errs,e=0,bss,e為以vs和ve為直徑兩端點(diǎn)的球體。
為了加快上述注記參考線層次樹的構(gòu)建,可以使用一個(gè)最小堆存儲(chǔ)s中所有相鄰結(jié)點(diǎn)的誤差errs,e,每當(dāng)兩個(gè)相鄰結(jié)點(diǎn)被合并了,就將最小堆里最小的誤差項(xiàng)移除,并更新最小堆中所有受到影響的誤差項(xiàng),調(diào)整堆的結(jié)構(gòu)。
值得注意的是,當(dāng)把文字注記放置在較遠(yuǎn)的注記參考線上時(shí),為了確保注記顯示在屏幕上的時(shí)候能夠有合理的像素尺寸,需要加大注記在對(duì)象空間的尺寸。在放置這類對(duì)象空間尺寸較大的文字注記時(shí),需要移除注記參考線上那些包含高細(xì)節(jié)層次信息的頂點(diǎn),否則可能會(huì)影響注記的可讀性,見步驟(2.1)。
步驟(2)實(shí)時(shí)運(yùn)行階段,遍歷篩選注記參考線,包括如下步驟:
(2.1)使用深度優(yōu)先策略遍歷注記參考線層次樹,選取層次樹中的相應(yīng)結(jié)點(diǎn),構(gòu)造視點(diǎn)相關(guān)的注記參考線。
在本步驟中用深度優(yōu)先策略遍歷注記參考線層次樹t。遍歷過程中,使用一個(gè)結(jié)點(diǎn)數(shù)組d={}記錄選中的層次樹結(jié)點(diǎn),并將分割頂點(diǎn)記錄在一個(gè)頂點(diǎn)數(shù)組b={}中。在訪問層次樹結(jié)點(diǎn)ns,e=(vs,ve,bss,e,errs,e,ns,i,ni,e)的時(shí)候,根據(jù)公式:
決定是否遞歸訪問子結(jié)點(diǎn)ns,i&ni,e,即若ns,e所代表的注記參考線段的誤差在當(dāng)前視距下影響較大,且該線段與視錐體相交,則遞歸訪問其子節(jié)點(diǎn),
否則選中ns,e。式中di為觀察點(diǎn)與頂點(diǎn)vi之間的距離,psz為預(yù)先定義的注記字體的像素大小,k為調(diào)節(jié)注記參考線總體細(xì)節(jié)度的一個(gè)預(yù)定義常量,vfst為當(dāng)前相機(jī)參數(shù)下的視錐體。如果上面公式成立需要遍歷子結(jié)點(diǎn),否則就選中ns,e并將其壓入d的尾端。如果需要遍歷子結(jié)點(diǎn),并且頂點(diǎn)坐標(biāo)公式:
(vi-vs)·(ve-vi)<0
成立,就將頂點(diǎn)vi壓入b的尾端,vi包含了頂點(diǎn)i的三維坐標(biāo)信息,(vi-vs)·(ve-vi)表示兩個(gè)向量點(diǎn)乘,結(jié)果大于0則表示兩個(gè)向量方向一致(夾角大于90度),小于0則表示兩個(gè)向量方向不一致(夾角小于90度)。最后頂點(diǎn)數(shù)組d將會(huì)包含一個(gè)結(jié)點(diǎn)序列{n1,a,na,b,nb,c,...,nk,n},連接序列中的每個(gè)結(jié)點(diǎn)所代表的線段,就能得到視點(diǎn)相關(guān)的注記參考線{v1,va,vb,vc,...,vk,vn}。分割頂點(diǎn)序列b將包含一系列的頂點(diǎn),并用于步驟(2.4)注記參考線的多層次細(xì)節(jié)分割。
(2.2)對(duì)視點(diǎn)相關(guān)的注記參考線實(shí)施視錐體裁剪,移除視錐體外部的線段。
(2.3)對(duì)視點(diǎn)相關(guān)的注記參考線實(shí)施遮擋裁剪,移除被地物遮擋的線段。
將地圖用戶的觀察點(diǎn)視作光源所在位置,在用戶觀察點(diǎn)的正上方設(shè)置一個(gè)向下觀察的正射投影相機(jī)渲染陰影圖,利用可編程渲染管線將處于“陰影”的區(qū)域標(biāo)記為白色,“陰影”以外的區(qū)域標(biāo)記為黑色。最后處于“陰影”的區(qū)域?qū)?yīng)于被地形所遮擋的部分(圖3)。
首先計(jì)算地圖中全體線要素的包圍盒,取視錐體與該包圍盒的交集作為深度圖的渲染范圍,并將地形背面渲染到深度紋理。然后從上方的正射投影相機(jī)利用深度紋理執(zhí)行深度對(duì)比,實(shí)時(shí)渲染出該區(qū)域地面的陰影圖。由于使用了相對(duì)進(jìn)取的裁剪策略,因而較低分辨率的陰影圖就足以完成遮擋裁剪任務(wù),這樣就能夠降低整體的計(jì)算量。隨后以陰影圖像素大小為步長(zhǎng),沿著注記參考線,查找在陰影圖里被遮擋的線段,將這些線段從注記參考線里移除,并把注記參考線分割為多段。
(2.4)對(duì)注記參考線實(shí)施單調(diào)性分割以及多層次細(xì)節(jié)分割。
分割注記參考線的目的在于確保即使線要素過度曲折或者線要素方向與屏幕接近于垂直,注記也能夠具有良好的可讀性。通過提取注記參考線的拐點(diǎn),并在該點(diǎn)分割注記參考線,可以使注記避過注記參考線上過度曲折的部分。此外,通過定義一個(gè)長(zhǎng)度閾值,遍歷注記參考線,當(dāng)已遍歷的長(zhǎng)度超過該閾值,就在該點(diǎn)分割注記參考線,可以實(shí)現(xiàn)對(duì)過長(zhǎng)線要素的重復(fù)注記。
合理地分割動(dòng)態(tài)的注記參考線,需要考慮一些特殊的情況。例如,注記參考線在拐點(diǎn)處可能會(huì)表現(xiàn)的比較“平滑”,很難利用相鄰線段的夾角判斷注記參考線的方向是否發(fā)生了劇烈的變化。因此可以使用在構(gòu)造視點(diǎn)相關(guān)注記參考線時(shí)生成的分割點(diǎn)序列b,在多細(xì)節(jié)層次上分割注記參考線(圖4)。
以連接注記參考線首尾頂點(diǎn)的矢量方向作為主方向,遍歷注記參考線的每一個(gè)頂點(diǎn),并執(zhí)行以下判斷:
1)當(dāng)前頂點(diǎn)是否屬于分割頂點(diǎn)序列b;
2)注記參考線相對(duì)于主方向的單調(diào)性是否發(fā)生了變化;
3)注記參考線的方向是否與視線方向近似平行,即二者單位方向向量點(diǎn)積的絕對(duì)值是否接近于1;
4)注記參考線已遍歷線段的累計(jì)長(zhǎng)度是否超過了某個(gè)閾值。
以上有任意一條成立,就在當(dāng)前頂點(diǎn)上分割注記參考線。如果分割過后的注記參考線的長(zhǎng)度無法容納文字注記中的所有字符,就選取注記參考線在視錐體部分的中心點(diǎn),將線要素注記退化為基于布告板的點(diǎn)要素注記來處理。
步驟(3)將注記參考線投影至屏幕空間,處理注記之間的相互沖突關(guān)系,生成可渲染的注記對(duì)象。其中注記間的沖突處理,包括如下步驟:
(3.1)對(duì)注記在屏幕上的候選區(qū)(注記參考線投影到屏幕空間后的緩沖區(qū))建立r-tree空間索引;
(3.2)建立注記在屏幕空間的潛在沖突關(guān)系圖,圖中的頂點(diǎn)代表一個(gè)注記候選區(qū),圖中連接兩個(gè)頂點(diǎn)的邊,代表兩個(gè)注記候選區(qū)之間潛在的沖突關(guān)系;
(3.3)使用貪心的圖著色算法計(jì)算注記的處理順序;
(3.4)依次處理屏幕上的注記,確保后處理的注記不會(huì)被先處理的注記遮擋,生成可渲染的注記對(duì)象。
步驟(3)中采用一個(gè)無回溯的注記放置方法,處理過程中,文字注記被依次放置,如果一個(gè)注記無法在屏幕空間尋找到合適的區(qū)域放置,就跳過該注記,處理下一個(gè)注記。步驟(3.3)基于步驟(3.2)構(gòu)建的屏幕注記沖突圖,使用貪心圖著色算法決定注記的處理順序(圖5):
1)從沖突圖中取出一個(gè)具有最小dg×p的結(jié)點(diǎn),其中dg代表結(jié)點(diǎn)在沖突圖里邊的數(shù)量,p表示結(jié)點(diǎn)的優(yōu)先級(jí);
2)將此結(jié)點(diǎn)從圖中移除,并壓入棧頂,更新圖中剩余結(jié)點(diǎn)的度。上述步驟可以使用一個(gè)存儲(chǔ)了結(jié)點(diǎn)度數(shù)以及優(yōu)先級(jí)的最小堆來實(shí)現(xiàn);
3)重復(fù)1~2,直到圖中沒有任何剩余的結(jié)點(diǎn);
4)從棧頂彈出結(jié)點(diǎn),如果此結(jié)點(diǎn)對(duì)應(yīng)的注記在屏幕上的候選區(qū)域沒有被其它注記占據(jù),就將該注記放置到屏幕空間對(duì)應(yīng)的位置,否則就認(rèn)為該注記放置失??;
5)重復(fù)4,直到棧中沒有任何剩余的結(jié)點(diǎn);
6)為所有被成功放置的文字注記生成可渲染的對(duì)象,并將其放進(jìn)三維地圖場(chǎng)景渲染樹中。
圖6為采用本發(fā)明實(shí)施方法渲染的三維地圖線要素注記效果圖,圖中文字注記沿線分布,注記的方向與線的走向呈現(xiàn)出一致性。當(dāng)線要素和被地形部分遮擋時(shí),相應(yīng)的注記會(huì)在注記參考線上自動(dòng)避開被遮擋的線段。隨著觀察點(diǎn)的平滑改變,注記的朝向也隨之調(diào)整,以保持交互一致性。當(dāng)視口內(nèi)的注記參考線與屏幕接近于垂直的時(shí)候,相應(yīng)的線要素注記被退化為基于布告板的點(diǎn)要素注記來處理(圖6(b))。此外,注記參考線在過度曲折的情況下會(huì)被分割為多段,被分別處理(圖6(c))。