1 引言
20世纪60年代以后,地形可视化的概念随着地理信息系统的出现而逐渐形成。随后以地形地貌为研究重点的地形三维可视化技术在地理信息系统(GIs)、虚拟现实(VR)战场环境仿真、娱乐游戏、地形的穿越飞行({1yin hr0ugh)土地管理与利用、水文气象数据可视化等多个领域得到了广泛的应用,越来越受到人们的关注。坩形可视化…是一门以研究数字地形模型 (Digital Terrain M0de1)或数 字高程域(Di gital Elevati0n Fie1d)的显示、简化、仿真等为内容的三维实体构造技术,是三维场景构造中的重要组成部分和研究重点。
本文在基于 OpenGL的i维地形实现技术基础之上,针对不同的三维地形模型方法以及三维叮视化等关键技术展开了分析,重点研究了基于 3DsMAx和基于 0penGL的两类一维地形建模和实现技术,并依据多边形数目、每秒钟帧数、内存使用以及 cPu效率等指标对其进行 了性能 比较。最后,根据其性能对比的结果及其各 自的特点,给出了不同方法的适用场合,从而为实际工程应用中的地形建模和实现技术的选择提供依据和指导。
2 三维地形建模与实现方法
2.1 地形建模
当前,利用 0penGL技术构造三维实体的常规建模方法有如下两种 :
1)在三维形体构造软件(如 3DsMAx等)中完成形体的构造 ,通过相应的方法将 3DSMAx建立的模型转换为 0penGL中的顶点数组,最后在 0penGL下进行显示;
2)0penGL编程实现三维地形建模 ,目前常用的方法是先根据特征点高程和地形的特征参数如平均高程、高程标准差等)构筑地形模型,再利用插值生成地形的细节 ,最后通过色彩和纹理处理形成完整的三维地形。
2.2 三维地形实现的基本方法
在实现过程中,首先得到 DEM H 数据(影像数据)通过相应的数据处理,将原始数据转化为三维模型构造所需要的顶点数据;并利用变换后的数据进行模型构造,通过投影变换、视点变换等一系列的步骤,形成最初的三维地形;最后利用光照消隐以及纹理映射技术的后期加工和处理,真实感的三维地形最终成型。
基于 OpenGL技术的三维地形的基本实现过程如图 1所示 ,而本文将重点论述基本过程中的三维数字地形模型构造的方法。下面将介绍利用 0penGL技术构建三维地形的建模技术和实现方法。
3 基于 3DSMAX的地形建模与实现
首先,利用经过处理后的 DEM数据 ,在 3DsMAx软件下建立数字地形 (3DsMAx建模的具体方法和步骤见相关技术文献)。
通过 3DSMAx 建成的数字地形如图2所示。当 3DsMAx模型建立完成之后 ,就需要将此模型转换为 0pen- GL中的顶点数组。有三种方法可以实现上述的转换:
1)直接对3DsMAx模型进行读取,将各个信息放入对应的数组中; ’
2)利用工具软件如 Deep Exploration等,可 以将3DSMAX模型转换为 C语言文件,并且在c语言文件中将模型信息存储在数组中 ;
3)利用已经封装好了的 3DsMAx文件读取类进行模型转换。如使用比较广泛的 cIJoad3Ds类 J,它由专业的人员编写并封装好,通过包含它的头文件和执行文件,并调用相应的函数即可完成.3d模型的转换。
这三种方法各有优缺点。第一种方法优点是可以选择对自己有用的信息进行存储 ,将不关心的信息进行滤除,提高程序效率,缺点是使用者需要对.3d文件结构有较深的了解,并且需要进行大量的程序编写 ,比较费时费力;第二种方法优点是不需要具备专业的.3d文件结构知识,直接通过软件转换,省时省力,缺点是大部分软件只能将 3DsMAx中的顶点数据转换成数组保存 ,但是将丢失纹理信息,如图3所示 ;第三种方法较好的解决了前两种方法的缺点,它既可以方便的对 3DsMAx模型进行转换,又不会丢失纹理信息,如图4所示。但是缺点是它将所有的信息完全的保存下来,这样在 OpenGL渲染 的时候会增加系统的运算量,降低程序效率。
利用第一种方法和第三种方法从实现技术上是一致的,都是通过对.3d文件的信息分类进行读取,不同的是第一种方法需要自己编程,第三种方法利用已有的程序。而第二种与第三种方法相比,第二种方法虽然也将所有的顶点数据保存下来,但是可以有选择的在 OpenGL中绘制有用 的顶点。为了比较了该两种方法对同一个.3d三维地形模型进行转换时的效率,特选择多边形数目、每秒钟帧数(FPs)、内存使用、cPu使用等指标来衡量 ,其对比结果如表 1所示 (其中用来测试的电脑配置如下:Pentium(R)M 1.4G处理器、内存为 512M,操作系统为 wind0ws xP)。
综上所述,对于.3d三维地形转换的第二种方法不太适合对纹理要求较高的模型转换中。对于使用第一种方法还是第三种方法应视不同情况来选择:
1)当系统对实时性要求高而且地形大,并且开发时间宽裕时,选择第一种方法 ;
2)当系统注重开发时问,并且可以容忍一定效率损失时,选择第三种方法。[
4 基于 openGL技术的地形建模与实现
① 基本地形建模
计算机图形学中的所有光滑曲面最终都是由多边形(主要是三角形)无限逼近得到的,因此建立三维地形模型叫的实质是构造用来逼近该曲面的空间三角网。利用准备好的数据点根据 Delaunay三角网的构网规则生成三角网,如图5所示。
在生成三角网后,还需要注意组成三角网的各个三角面法向量的标注。因为生成地形的明亮程度除取决于光源和明暗处理方式外,还受到三角面点与面的法向量的影响。一般点的法向量取值为其周围面法向量的均值。在图 6中 P点的法向量即可表示为与其相邻的四个面法 向量 N1、N2、N3、N4的和的平均值。
② LOD(Level 0f Defajls)技术地形建模
L0D技术是指为了更好地实现三维复杂模型的实时动态显示 ,将三维物体用多种不同的精度表示,并根据观察点位置的变换而选择不同精度的模型予以成像的技术。 一般来说,地形的数据量是很大的,利用一般的方法构建大型的地形需要消耗大量的内存并且也会严重的影响渲染速度。然而,并不是系统每次都必须耗费大量的内存和CPu来渲染大数据量的地形,因为当观察点距离地面很远时,地形的图像在屏幕上占据很少的象素点 ,在这种情况下,用大量的多边形面片去精确表示地形是不必要的。所以,系统只需要在观察点离地面很近,需要精细的描述地貌的时候 ,才需要渲染大量的多边形来逼近真实地形;而在观察点远离地面时,则可以简化数据量来达到提高渲染效率和减少内存消耗的目的,也就是利用 IJ0D技术。利用 L0D技术进行地形建模的效果见图7、图8、图9所示。
图7、图8、图9分别是不同的细节层次下对同一组地形数据进行的地形建模,左图是网格图,右图是实体图。由左图可以看出渲染的多边形面片数明显减少,而右图的实体效果当视点离地面很远的时候不会有明显的变化。
为了具体的说明LOD技术带来的效率提高,表2对比了不同的细节层次下渲染的多边形数目、每秒钟帧数(Fps)、内存使用、cpu使用的情况(测试条件同上)。通过表 2的性能对比可以得出,使用较低的细节层次在渲染效率的提高以及系统消耗的减少上都有优异的表现。这说明利用 L0D技术实现大规模三维地形具有实际的工程价值。
所以,在不同的观察高度下对三维地形使用不同的细节层次,可以很 好的在不损 失视觉 效果的前提下提高程序效率。
5 性能对比
以上论述了两类三维地形建模和实现技术,对这两种不同的实现方法的优劣仍需对比研究。鉴于此,本文通过对这两种方法渲染相同数量多边形的 Fps、消耗内存以及 cPu效率等指标进行 比较 ,其中使用封装好的 cLoad3D类来转换3DsMAx文件。用来测试的电脑配置和上面的测试配置相同。性能对比的测试结果如表3所示。
由表 3可以得出,渲染相同数量多边形,OpenGL编程建模比3DsMAx建模使用更少的内存消耗并且有更高的 Fps。所以程序如果偏向于追求程序执行效率,则使用 OpenGL编程建模为好。
然而,3DsMAx建模优点也是明显的.使用 0penGL程序所构建的三维模型外观上 比较粗糙,而且建模的直观性较差、修改模型时的效率也较低,同时建模过程比较繁琐,编程量较大,而3DsMAx是专业的三维建模软件,利用它可以方便的建立物体模型,且不需要编程便可很直观地构建模型,模型外观更精细,可以保留很多细节。当程序要求三维地形具有复杂精 细的外观效果,应 当考虑使用 3DsMAx建模实现。
6 结论
本文从三维地形实现过程的角度出发,围绕三维地形建模的实现方法展开研究,重点研究了 0penGL支持下的两类三维地形 建模 和实现技术 ,并对其性能和优缺点进行了对比。
通过对两种方法的性能和优缺点的比较和分析,得出不同方法的适用场合,从而为实际工程应用 中的地形建模和实现技术的选择提供依据和指导:
1)系统在性能和效果上更倾向于性能,并且需要占用更小的内存和cPu,则适用 OpenGL编程实现;
2)系统在性能和效果上更倾向于效果,并且对细节方面有较高要求,纹理贴图复杂多变 ,则适用 3DSMAx建模实现