1、基于 LOD 的三维地形可视化技术研究【摘要】为了解决三维地形数据的实时可视化问题,本文在规则格网 DEM 的基础之上,采用数据分块,四叉树地形分割,并结合基于视点相关的 LOD(Level Of Detail,LOD)层次模型技术,实现了海量数据的有效组织与管理。在满足真实的前提下,该方法可有效的简化复杂的地形数据,提高地形漫游的效率,兼顾可视化效果。 【关键词】LOD 数据分块 四叉树 实时渲染 一、引言 本文重点研究四叉树结构的 LOD 层次模型的生成方法,采用分层分块方法来组织大规模地形数据,结合 DirectX 渲染引擎,以块为单位进行实时调度和渲染。最后,使用雾化技术,使得三维场景
2、更具有真实感。二、LOD 技术 LOD 技术依次经历了离散 LOD 模型,连续 LOD 模型及多分辨率模型 3个阶段。当前对地形模型的研究都集中在多分辨率模型上。这也是本论文的研究内容。多分辨率模型是指将不同区域具有不同层次细节的模型。在满足显示精度要求的前提下,选择不同分辨率的模型,达到“距离越近看的越清,距离越远越模糊”的效果。如地形复杂区域的模型,与地形简单区域的模型并存,并用以描述地表起伏。 三、三维地形可视化 (一)数据的分块 规则格网 DEM 数据具有结构简单,存储处理方便,进行构网绘制时快速直接等优点。本文使用规则格网 DEM 数据。有时原始的格网大小满足不了实际应用的需求,就需
3、要对 DEM 进行内插,本文选用加权平均法进行格网数据内插,使得每块 DEM 数据大小为(2n+1)(2n+1) ,将DEM 数据分成等大小的块,所分的块不能太大,也不能太小。考虑到Intel 的 CPU 的内存页大小是 4K,块的大小应该为 6464 比较合适,本文采用了 3232 的块。如图 1 规则格网模型。 图 1 规则格网模型 为了保证显示速度,还要对纹理按照与地形相同坐标范围进行分块处理,将纹理分割为与地形具有相同的子块数,并将地形子块与相对应的纹理子块保存在同一文件中,并为每块分块后的纹理构造纹理金字塔,以方便地形数据管理和调度。 (二)DEM 的四叉树分割 在每个分块地形内部,
4、采用自顶向下的四叉树方法进行地形分割。如图 2 所示,图 3 中每一个正方形为四叉树的一个节点,每个节点保存了一定区域的信息。根据地形条件,将地形不断分割成为四个相等区域,分割深度越大则得到的地形分辨率越高。即分割深度每提高一层,采样密度提高一倍。 图 2 节点分割示意图 为了存储四叉树分割的结果,创建一个二维数组来记录每个节点的分割状态,节点被分割用 true 表示;未被分割,用 false 表示。实际上,很多地方在程序中是不需要访问的,主要是程序仅需要利用节点和中心的标志来判断该节点是否分割,1 表示分割,0 表示没有分割,没有被访问到的用问号表示,如图 3 数组元素分割标志说明。 图 3
5、 数组元素分割标志说明 (三)节点评价系统 采用自顶向下的绘制方式,必须给出一个评价准则,判断何时停止对节点进行分割。 首先,希望离观察者近的地方细节越多,反之则越少,则一个正方形距离视点的距离 d 和自身的边长 e 应该是一个指标来决定改正方形是否需要细分,根据文献评价方式来设置评价准则,可由公式(1)进行判断是否进一步细分: C1(C1 为距离分辨率) (1) 节点边长 e 较大,需要进一步细分,否则不需要进一步细分。当 C1的值越大,e 的值越小,节点细节较为细致;相反,C1 越小,e 值越大,节点细节较为粗糙。 考虑到地形本身的起伏幅度不同,当地势平坦时,节点细节可以较少,反之节点细节
6、应该较为丰富。参照文献4的粗糙度评价公式: 1(C2 为高度分辨率) (2) C2 越大,细节程度越高。 综合以上两个公式,我们得到最终的节点评价公式: f=C1 (3) 公式中的字母含义同上,于是,当 f11 满足时候,节点需要继续分割;否则该节点为叶节点。 (四)裂缝的消除 按照上述法则扫描数组后,就可以得到地形的分层信息,接下来的工作就是按照地形的分层信息来渲染地形。按照原来的顺序再次扫描分层数组,每当到达一个不需细分的节点时,如果该节点可见,就使用绘制三角形扇(TriangleFan)的方法将该小块地形绘制出来。但是这样在相邻小块的精度等级相差 1 倍或 1 倍以上时,渲染的地形会出现
7、裂缝,本文利用文献方法进行裂缝的修补。即在两个不同分辨率节点之间加上一条边。这种方法全面,而且相邻两个节点层次可以是任意级别。 四、三维地形的真实性 高分辨率的纹理固然具有更高的真实感,但屏幕上的投影区很小,此时为其贴上高分辨率的纹理反而会产生失真,而且由于人眼的分辨率有限,这也是不必要的。给地形贴纹理时,低分辨率的图像由比它高一级分辨率的图像取平均得到。纹理塔的层数与对应的地形块的 LOD 层数相一致。此时本文采用纹理与视点相关策略,根据视点与节点距离确定纹理级别。视点离节点越近,则纹理级别越低,细节越丰富;视点离节点越远,纹理级别越高,细节越少,纹理级别采用如下公式: nlevel (4)
8、 其中,d 是视点到数据块中心点的距离;e 是当前格网的大小;nlevel 是当前纹理的级别。如图 4 叠加纹理后效果图。 图 4 叠加纹理后效果图 五、试验与结论 采用上述方法,使用 C#和 DirectX 实现了对海量地形数据快速漫游,为了提高真实感,在数据上叠加了用同样方式处理和调度的影像纹理,测试 DEM 数据大小为 8k8k 格网,每个格网 2 个字节。纹理大小为2000020000 格网,每个像素 3 个字节。运行机器环境为 Windows XP 操作系统、nVIDIA 64M 显卡、512M 内存。 通过上述试验证明,本文利用四叉树分割算法实现了 DEM 数据的实时动态显示,在有
9、效化简地形数据的基础上,尽可能的保证了地面的外观没有太大的变化,生成的三维地形能够达到 20 到 30 帧的速度,基本满足实时浏览的要求。 参考文献: 1彭庸,张建奇.一种基于 LOD 的大规模地形生成算法J.电子科技,2009, (02). 2胡志蕊,祝国瑞,徐智勇. LOD 技术与制图综合在多尺度地图适时显示中的应用研究J.测绘科学,2006, (05). 3陈刚,熊兴华.海量地形漫游中动态 LOD 算法研究J.测绘通报,2007, (04). 4姚慧敏,崔铁军,邵世新.基于四叉树的 LOD 地形模型及其数据组织方法研究A.中国地理信息系统协会第四次会员代表大会暨第十一届年会论文集C,2007, (06). 5叶至军.Visual C+/DirectX9 3D 游戏开发引导M.北京:人民邮电出版社,2006.