基於三維GIS技術的矢量地圖動態LOD渲染方法

本文從地圖操作和要素可見性入手分析地圖簡化的影響因素,並基於分析的結果設計相應的緩存結構以加速地圖的渲染。研究GPU環境下梯形格網的高效LOD方法,探討簡化前後節點的重組和顯存中EBO數據的更新方法,最終提出一種基於三維GIS技術的矢量地圖動態LOD渲染方法。
1 簡化的影響因素
1.1 地圖操作對簡化的影響
本文方法依據視點進行簡化,當要素與視點的位置發生變化時進行實時簡化操作。用戶進行地圖操作時,當視點與要素的距離發生變化時進行簡化,不發生變化時則可以使用緩存數據進行繪製,從而加快渲染。因此,需要討論地圖操作導致的視點與要素的距離變化情況。
(1)平移操作
平移操作可能會導致視點與要素的距離發生變化。在非俯仰狀態下,平移操作不會導致視點與要素的距離發生變化;在俯仰狀態下,平移操作會導致視點與要素的距離發生變化。
基於三維GIS技術的矢量地圖動態LOD渲染方法
平移操作示意圖
(2)旋轉
旋轉操作可能會導致視點與要素的距離發生變化。非俯仰狀態下,旋轉操作不會導致視點與要素的距離發生變化;俯仰狀態下,旋轉操作會導致視點與要素的距離發生變化。
基於三維GIS技術的矢量地圖動態LOD渲染方法
旋轉操作示意圖
(3)放縮操作
放縮操作會導致視點與要素的距離發生變化。
基於三維GIS技術的矢量地圖動態LOD渲染方法
放縮操作示意圖
(4)俯仰
俯仰操作會導致視點與要素的距離發生變化。
基於三維GIS技術的矢量地圖動態LOD渲染方法
俯仰操作示意圖
綜上分析可知,在非俯仰狀態下,地圖平移操作和旋轉操作不會改變要素距視點的距離,可以使用上一幀的地圖緩存進行繪製,加快其渲染速度;針對俯仰角度較低,平移及旋轉操作對簡化的影響不大,也可以使用上一幀數據進行繪製。而針對俯仰和縮放操作,要素的權重受視點的影響,需要進行簡化操作,如下表所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
1.2要素可見性對簡化的影響
靜態LOD方法不需要對地圖進行實時簡化,直接使用簡化後的緩存數據進行繪製,極小比例尺下要素被極度簡化使得其頂點數據較少,因此要素極小情況下進行繪製對靜態LOD方法繪製效率的影響不明顯。而動態簡化方式需要對視口內的所有要素進行簡化,簡化操作的效率對要素數量極其敏感,參與簡化的要素越多則簡化時間越長,當要素極小時會導致不必要的簡化操作造成繪製效率低下。因此,在保證繪製結果的基礎上應儘可能的減少參與動態簡化的要素。
比例尺的變化會導致幾何要素的呈現狀態發生改變,當比例尺極小時人眼無法在屏幕上識別部分幾何要素,這些要素繪製與否對繪製效果不會產生太大影響。依據傳統LOD方法的繪製策略,要素只要在視口範圍內就需要被展示,本文針對要素呈現狀態設定可見性閾值,當要素呈現的像素大小小於閾值時不再進行繪製,從而減少參與動態簡化的要素數據,提升地圖繪製的效率。
基於三維GIS技術的矢量地圖動態LOD渲染方法
可見性閾值相關的繪製效果圖
2基於梯形格網的矢量地圖LOD方法
2.1梯形格網的LOD方法
本文依據梯形的剖分順序採用順序表存儲梯形,依據節點權重採用順序鏈表存儲原始節點序列。在梯形簡化的過程中,鏈表遊標存儲了當前的簡化狀態。若下一次地圖操作後,簡化容差小於鏈表遊標當前容差,則鏈表向上查詢,進行簡化操作;若下一次地圖操作後,簡化容差大於鏈表遊標當前容差,則鏈表向下查詢,進行還原操作。通過要素簡化狀態(即鏈表遊標)的存儲,避免了全局搜索從而加快了簡化速度。如下圖所示,當前遊標爲Pcursor,位於節點權重鏈表Pn+1處,若Pcursor小於Pn+1容差,則向上搜索基於當前梯形格網進行簡化操作;若Pcursor不小於Pn+1容差,則向下搜索基於當前梯形格網進行還原操作。
基於三維GIS技術的矢量地圖動態LOD渲染方法
2.2基於GPU的EBO數據更新方法
基於梯形格網的簡化算法可知,圖形簡化後梯形網中的梯形數目或梯形節點位置會發生變化。本文首先通過空間索引檢索範圍內的對象,依據梯形格網的簡化算法對梯形格網進行簡化。通過遍歷簡化後的梯形格網的梯形,獲取梯形的狀態和節點的索引編號,從上至下進行梯形格網的重組,最終完成顯存中EBO數據的更新。以下,本文從緩存方案和梯形格網的EBO數據更新方法進行介紹。
(1)頂點存儲方案設計
GPU中採用頂點緩存對象VBO(Vertex Buffer Object)存儲頂點數據,採用索引緩存對象EBO存儲索引數據。本文設計了多緩存對象存儲和單緩存對象存儲兩種存儲方案用以實現對節點數據和節點索引數據的存儲。多緩存對象存儲方案針對每一個矢量幾何要素創建一個VBO和一個EBO,單緩存對象存儲方案將圖層的節點數據存儲於一個VBO中,將圖層的索引數據存儲於一個EBO中。
多緩存對象存儲方案將單個要素的節點索引數據存儲於一個EBO對象,則要素索引編號不受其他要素的影響,從0開始編號。多緩存對象存儲,當某些要素不進行簡化時易於使用緩存對象,繪製過程中具有大量的緩存對象綁定、解綁與繪製操作,導致整體繪製效率的相對低下,其存儲結構如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
單緩存對象存儲方案將同一個圖層的所有節點統一存儲於一個VBO對象中,將所有的索引統一存儲在一個EBO對象中,要素與要素之間的索引需要進行偏移。單緩存對象存儲方案當地圖不發生簡化時增加了緩存可重用性,繪製過程中只存在一次的綁定、解綁和繪製操作,繪製效率較高。但若圖層中某些要素髮生漸進,EBO數據需要被重構,其存儲結構如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
(2)要素的梯形格網索引更新
當用戶進行地圖操作時,要素可能由某一狀態轉換至另一狀態。依據梯形格網的簡化算法可知,梯形格網的簡化通過梯形或梯形之間的合併,調整,退化,消融操作來完成,簡化操作的本質是對梯形格網的節點進行重組避免了傳統方法中數據的重複剖分,只需對梯形中節點索引數組進行更新從而完成EBO數據的更新,不需要進行頂點數據的傳輸與緩存對象的創建,降低了顯存IO的時間,提高了渲染的效率。
針對線梯形格網,當以斜角連接樣式漸進時,直接進行梯形合併;當以平角連接或圓角連接進行漸進時,需要考慮平角連接產生的三角形或圓角連接產生的三角扇,索引的偏移量需要考慮平角連接產生三角形頂點數目或圓角連接產生的扇節點的數目,如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
針對面梯形格網,如下圖一所示:P1至P11爲原始節點,Pm至Pm+8爲梯形剖分產生節點。如下圖一示例梯形格網簡化前後部分梯形發生了合併操作,通過遍歷梯形順序表梯形判斷其可見性,並獲取梯形節點的索引號以重構索引數組,最終進行EBO的更新。簡化後的結果下圖一所示,簡化前後數據變化如下圖二所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
圖一 面梯形格網簡化示意圖
基於三維GIS技術的矢量地圖動態LOD渲染方法
圖二 面梯形格網索引更新示意圖
可見,本文方法更新前後不需要進行頂點的再次傳輸,VBO數據不變,只需對EBO數據進行更新即可完成簡化前後的梯形格網數據更新,減少了繪製過程中顯存IO階段的時間消耗,加速了渲染。
3基於GPU的矢量地圖LOD渲染方法
3.1基於梯形格網的矢量地圖LOD繪製流程
針對傳統LOD方法,簡化與剖分分離的問題,本文設計了基於梯形格網矢量地圖LOD繪製流程。數據初次加載時完成數據的剖分、權重的計算、梯形格網的構建和頂點數據的傳輸。在地圖渲染的過程中,依據不同的地圖操作判斷地圖或要素是否需要進行簡化,針對部分情況下地圖不需要重新繪製或要素無需簡化,設計地圖或要素的緩存,直接使用上一幀的數據進行繪製,從而加快渲染速度。當地圖需要進行簡化時使用梯形格網進行快速的簡化操作,此過程不進行剖分和頂點傳輸,只需更新EBO數據及繪製即可完成對地圖的渲染,加快了地圖的渲染速度。如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
3.2圖層緩存及要素緩存的設計
依據上述的分析可知,針對地圖操作,當非俯仰情況和俯仰情況較低下,平移及旋轉操作不發生地圖的簡化,因此可以使用上一幀的緩存數據直接進行繪製,提高其渲染速度。以下,分別設計圖層緩存LayerCache結構和要素緩存Segment結構以提高地圖的渲染速度。
(1)要素緩存Segment結構設計
要素緩存存儲索引數據,包含此要素的頂點起始位置、索引起始位置、頂點數量和索引的數量和索引數組。若此要素不發生簡化直接使用要素緩存的索引數據用以重構圖層緩存,通過使用要素緩存加快渲染的速度,要素結構如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
(2)圖層緩存結構設計
本文設計圖層緩存存儲地圖圖層的節點數據與索引數據。圖層緩存包含多個Segment,圖層沒有被簡化時直接使用緩存進行繪製,當部分要素需要被簡化只需將簡化的要素進行更新,使用緩存可以加快地圖渲染速度,圖層緩存結構如下圖所示。
基於三維GIS技術的矢量地圖動態LOD渲染方法
4結語
本文在梯形格網的基礎上,基於GPU環境設計了矢量地圖動態LOD渲染方法。首先通過分析地圖簡化的影響因素探究地圖操作對地圖簡化的影響。之後,選擇合適的閾值對要素進行過濾,進而介紹了梯形格網的LOD策略和簡化前後EBO數據更新方法。最終,提出了基於梯形格網的矢量地圖動態LOD渲染方法。
原文來自:http://www.ztmapinfo.com/blog/index.php/article/37.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章