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

發布時間:2020-03-31 11:14:24 作者:臻圖信息 閱讀量:2756

   從地圖操作和要素可見性入手分析地圖簡化的影響因素,并基于分析的結果設計相應的緩存結構以加速地圖的渲染。研究GPU環境下梯形格網的高效LOD方法,探討簡化前后節點的重組和顯存中EBO數據的更新方法,最終提出一種基于三維GIS技術的矢量地圖動態LOD渲染方法。

1 簡化的影響因素

1.1 地圖操作對簡化的影響

    本文方法依據視點進行簡化,當要素與視點的位置發生變化時進行實時簡化操作。用戶進行地圖操作時,當視點與要素的距離發生變化時進行簡化,不發生變化時則可以使用緩存數據進行繪制,從而加快渲染。因此,需要討論地圖操作導致的視點與要素的距離變化情況。

    (1)平移操作

    平移操作可能會導致視點與要素的距離發生變化。在非俯仰狀態下,平移操作不會導致視點與要素的距離發生變化;在俯仰狀態下,平移操作會導致視點與要素的距離發生變化。

 

平移操作示意圖

    (2)旋轉

    旋轉操作可能會導致視點與要素的距離發生變化。非俯仰狀態下,旋轉操作不會導致視點與要素的距離發生變化;俯仰狀態下,旋轉操作會導致視點與要素的距離發生變化。

 

旋轉操作示意圖

(3)放縮操作

放縮操作會導致視點與要素的距離發生變化。

 

放縮操作示意圖

(4)俯仰

俯仰操作會導致視點與要素的距離發生變化。

 

俯仰操作示意圖

    綜上分析可知,在非俯仰狀態下,地圖平移操作和旋轉操作不會改變要素距視點的距離,可以使用上一幀的地圖緩存進行繪制,加快其渲染速度;針對俯仰角度較低,平移及旋轉操作對簡化的影響不大,也可以使用上一幀數據進行繪制。而針對俯仰和縮放操作,要素的權重受視點的影響,需要進行簡化操作,如下表所示。

 

1.2要素可見性對簡化的影響

    靜態LOD方法不需要對地圖進行實時簡化,直接使用簡化后的緩存數據進行繪制,極小比例尺下要素被極度簡化使得其頂點數據較少,因此要素極小情況下進行繪制對靜態LOD方法繪制效率的影響不明顯。而動態簡化方式需要對視口內的所有要素進行簡化,簡化操作的效率對要素數量極其敏感,參與簡化的要素越多則簡化時間越長,當要素極小時會導致不必要的簡化操作造成繪制效率低下。因此,在保證繪制結果的基礎上應盡可能的減少參與動態簡化的要素。

    比例尺的變化會導致幾何要素的呈現狀態發生改變,當比例尺極小時人眼無法在屏幕上識別部分幾何要素,這些要素繪制與否對繪制效果不會產生太大影響。依據傳統LOD方法的繪制策略,要素只要在視口范圍內就需要被展示,本文針對要素呈現狀態設定可見性閾值,當要素呈現的像素大小小于閾值時不再進行繪制,從而減少參與動態簡化的要素數據,提升地圖繪制的效率。

 

可見性閾值相關的繪制效果圖

2基于梯形格網的矢量地圖LOD方法

2.1梯形格網的LOD方法

    本文依據梯形的剖分順序采用順序表存儲梯形,依據節點權重采用順序鏈表存儲原始節點序列。在梯形簡化的過程中,鏈表游標存儲了當前的簡化狀態。若下一次地圖操作后,簡化容差小于鏈表游標當前容差,則鏈表向上查詢,進行簡化操作;若下一次地圖操作后,簡化容差大于鏈表游標當前容差,則鏈表向下查詢,進行還原操作。通過要素簡化狀態(即鏈表游標)的存儲,避免了全局搜索從而加快了簡化速度。如下圖所示,當前游標為Pcursor,位于節點權重鏈表Pn+1處,若Pcursor小于Pn+1容差,則向上搜索基于當前梯形格網進行簡化操作;若Pcursor不小于Pn+1容差,則向下搜索基于當前梯形格網進行還原操作。

 

2.2基于GPU的EBO數據更新方法

    基于梯形格網的簡化算法可知,圖形簡化后梯形網中的梯形數目或梯形節點位置會發生變化。本文首先通過空間索引檢索范圍內的對象,依據梯形格網的簡化算法對梯形格網進行簡化。通過遍歷簡化后的梯形格網的梯形,獲取梯形的狀態和節點的索引編號,從上至下進行梯形格網的重組,最終完成顯存中EBO數據的更新。以下,本文從緩存方案和梯形格網的EBO數據更新方法進行介紹。

  1)頂點存儲方案設計

    GPU中采用頂點緩存對象VBO(Vertex Buffer Object)存儲頂點數據,采用索引緩存對象EBO存儲索引數據。本文設計了多緩存對象存儲和單緩存對象存儲兩種存儲方案用以實現對節點數據和節點索引數據的存儲。多緩存對象存儲方案針對每一個矢量幾何要素創建一個VBO和一個EBO,單緩存對象存儲方案將圖層的節點數據存儲于一個VBO中,將圖層的索引數據存儲于一個EBO中。

    多緩存對象存儲方案將單個要素的節點索引數據存儲于一個EBO對象,則要素索引編號不受其他要素的影響,從0開始編號。多緩存對象存儲,當某些要素不進行簡化時易于使用緩存對象,繪制過程中具有大量的緩存對象綁定、解綁與繪制操作,導致整體繪制效率的相對低下,其存儲結構如下圖所示。

 

    單緩存對象存儲方案將同一個圖層的所有節點統一存儲于一個VBO對象中,將所有的索引統一存儲在一個EBO對象中,要素與要素之間的索引需要進行偏移。單緩存對象存儲方案當地圖不發生簡化時增加了緩存可重用性,繪制過程中只存在一次的綁定、解綁和繪制操作,繪制效率較高。但若圖層中某些要素發生漸進,EBO數據需要被重構,其存儲結構如下圖所示。

 

2)要素的梯形格網索引更新

當用戶進行地圖操作時,要素可能由某一狀態轉換至另一狀態。依據梯形格網的簡化算法可知,梯形格網的簡化通過梯形或梯形之間的合并,調整,退化,消融操作來完成,簡化操作的本質是對梯形格網的節點進行重組避免了傳統方法中數據的重復剖分,只需對梯形中節點索引數組進行更新從而完成EBO數據的更新,不需要進行頂點數據的傳輸與緩存對象的創建,降低了顯存IO的時間,提高了渲染的效率。

    針對線梯形格網,當以斜角連接樣式漸進時,直接進行梯形合并;當以平角連接或圓角連接進行漸進時,需要考慮平角連接產生的三角形或圓角連接產生的三角扇,索引的偏移量需要考慮平角連接產生三角形頂點數目或圓角連接產生的扇節點的數目,如下圖所示。