基于三维GIS技术的矢量地图动态LOD渲染方法

发布时间:2020-03-31 11:14:24 作者:臻图信息 阅读量:1256

   从地图操作和要素可见性入手分析地图简化的影响因素,并基于分析的结果设计相应的缓存结构以加速地图的渲染。研究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的时间,提高了渲染的效率。

    针对线梯形格网,当以斜角连接样式渐进时,直接进行梯形合并;当以平角连接或圆角连接进行渐进时,需要考虑平角连接产生的三角形或圆角连接产生的三角扇,索引的偏移量需要考虑平角连接产生三角形顶点数目或圆角连接产生的扇节点的数目,如下图所示。