天津市测绘院 300381
摘要:本文讨论了基于开源三维引擎OpenSceneGraph(OSG)的三维地形模型制作技术。借助地形数据库制作工具VirtualPlanetBuilder(VPB)创建了天津市中心城区的地形分页数据库,并利用OSG自带的分页数据调度支持来查看这些数据。
关键词:三维地形;OSG;VPB
0 引言
近年来,大范围地形可视化的概念随着地理信息系统的出现而逐渐形成。随后以地形地貌为研究重点的三维可视化技术在实时仿真领域应用广泛,如战场环境仿真、三维游戏、飞机汽车驾驶训练、土地管理与利用、水文气象数据可视化、地理信息系统等。借助计算机技术,生成具有高度真实感和可量测的地形三维模型,实现三维地形表面的逼真还原,一直是人们研究的热点。
本文基于OSG三维引擎,介绍了利用VPB制作大范围三维地形模型的原理与方法,最后使用OSG自带的场景浏览器osgViewer在场景中进行漫游。
1 OSG和VPB简介
OSG 是一款目前非常流行的开源三维引擎,是一个面向对象的三维开发包,包含了极丰富的类库,操作灵活,性能优越,广泛应用于虚拟现实仿真、科学可视化等领域。它以已经成为工业标准的OpenGL为底层平台,使用可移植的ANSI C++编写而成,实现了对OpenGL进行的完全类封装,建立了一个面向对象的框架。是编程者可以摆脱底层的繁杂建模,更便于应用程序的开发和管理,可运行于包括Windows、Linux、Mac OSX在内的大部分操作系统。
VPB是一个基于OSG和GDAL的强大的地形数据生成工具,可以读入多种类型的地理影像和高程数据,并构建各种规模的分块分页地形数据库。VPB与OSG紧密结合,它所生成的瓦片数据可以方便地通过网络进行传输,或者保存在本地进行快速、精确的浏览。目前已经具备TB级别的数据处理能力,并可以使用分布式文件系统来执行并发的数据处理[1]。
2 基本原理
大规模场景绘制时带来的海量数据,远远超过了计算机的实时处理能力,使得数据无法一次性调入内存。OSG使用金字塔模型来组织大地形数据,其基本原理为采用倍率的方法形成多个分辨率层次。从金字塔的底层到顶层,分辨率越来越低,但表示的范围不变[2]。同时按照四叉树的方式组织不同细节层次的地形数据,漫游时根据视点位置的改变动态调整内存中的数据块,使常驻内存的数据量只与视点的位置和当前的细节层次有关,与整体的数据量无关,从而大大提高漫游的速度。
2.1 影像金字塔
影像金字塔的基本思想是利用采样自底向上生成金字塔,根据需求直接取其中某一级作为操作对象,以提高整体效率。当然就像这个世界中的其它事物一样,效率的提高是有代价的,这就是建塔带来的额外空间开销,建的级越多,越方便查询,但是数据冗余也越大。VPB采用倍率为2的等间隔划分法对海量地形数据金字塔模型进行分层简化,即上一层的分辨率是下一层的1/2。如图1所示。通过构建金字塔模型,可以直接从不同层调用不同分辨率的数据,避免了“实时”重采样的时间。虽然金字塔模型增加了数据量,但能够减少每一帧的绘制时间,因此这种方法是完全合理的。
图1影像金字塔结构
2.2 四叉树管理
OSG把整个地形场景作为四叉树的根节点[3],当视点距离地形较远时,场景以最粗略的根节点来显示。随着视点与地形的距离逐渐靠近,系统会逐级调入相应层次和区块的子节点数据,并从内存中清除父节点数据。视点远离地形的过程与此相反。这就保证了在同一时间内,只有一小部分数据被加载到了内存中,既提高了显示效率,又不影响显示效果。四叉树的结构如图2所示。
图2 地形的四叉树结构
3 三维地形制作
3.1 数据准备
VPB支持创建多种不同类型的地形数据库,而且其参数也十分复杂。本文以创建osgTerrain数据库为例,简要介绍一下如何制作地形数据。其中osgTerrain是OSG的地形处理库,用于实现实时的地形读取或显示。
制作三维地形需要用到高程数据和影像数据。
高程数据可采用数字高程模型(DEM),即一定范围内规则网格点的平面坐标及其高程的数据集。建立DEM的主要方法有:1.野外实地测量;2.根据航空或航天影像,通过摄影测量的途径获取;3.从现有地形图上采集等[4]。如果对精度要求不高,也可以通过网络上的某些开放资源获取所需高程信息。
影像数据可采用数字正射影像图(DOM),即对航空或航天相片进行数字微分纠正和镶嵌,按一定图幅范围裁剪生成的数字正射影像集。也可以利用地图搜索引擎如Google Earth,缩放到地球表面的任意位置,然后将屏幕截取下来。使用这种方法获得的影像数据还要经过数据格式转换、坐标系转化、坐标校正、数据分割或融合等工作方可使用。不论是DEM或DOM,如果数据源不止一个,可以使用ERDAS等工具将其分别拼成一个文件。当然,VPB也支持多数据源的自动处理,只需要在命令行参数中将其一一列出,用户可根据实际情况决定使用哪种方式。特别要注意的是高程和影像必须指定相同的空间参考系。同时建议DEM的范围不要超过DOM,否则超出的部分会产生黑边。
3.2 建立分页地形数据库
在命令行窗口下使用VPB中的vpbmaster程序制作地形。参数列表中主要包括需要创建的数据库的类型、影像文件的路径、高程文件的路径、分页地形数据库的输出路径等。由于VPB采用开源的栅格空间数据和影像数据读写库GDAL作为支撑,所以其支持的数据格式多达数十种,具体列表可参看http://www.gdal.org/formats_list.html。本次实验的影像数据采用的是Erdas Imagine(.img)类型,高程数据采用的是TIFF/GeoTIFF(.tif)类型。VPB采用分块的方法,对地形块由左下角开始,从左到右,由下至上的顺序生成地形模型。制作好的地形如图3所示。
图3 VPB生成的三维地形
构建好的地形模型以OSG自定义的二进制格式(.ive)写出到硬盘,可以快速的加载到OSG场景中进行漫游。写出时,取每层中四个临近的瓦片为一组,写出到一个ive文件中(第0层除外)。打开分页数据库所在文件夹,可以看到里面包含了很多名如out_xxx_L[a]_X[b]_Y[c]的文件夹,每个文件夹里面又有若干个名如out__L[a]_X[b]_Y[c]_subtile.ive的文件。其中,a代表数据所在的金字塔模型的层数,0为最顶层的粗模,数字越大则精细程度越高;b和c代表该地形块在该层中的列号和行号。从数据中我们可以看出,地形模型的细节层次被划分成10个级别。在最精细的L9级别,场景被分割为255×255个矩形区域。
4 结束语
本文对基于OSG的三维地形制作方法以及原理做了初步的研究,并使用OSG自带的场景浏览器osgViewer对地形模型进行实时漫游。本次制作的地形面积大约为319㎞²,分页数据库容量29GB,实验结果表明,漫游过程十分顺畅,完全可以满足各种实时仿真系统的要求,实现了海量地形数据的有效组织和管理。但是目前仅使用了VPB的一些简单功能,因此还需要对其更复杂、更高级的功能进行进一步的研究。
参考文献:
[1] 王锐、钱学雷 OpenSceneGraph三维渲染引擎设计与实践[M].北京:清华大学出版社,2009.11
[2] 伏光宝、严红平 OpenSceneGraph的大地形可视化方法研究[J].软件导刊,2010(3)
[3] 梁雅港、周杨、张勇等 基于OSG的火星形貌3维建模与绘制[J].测绘与空间地理信息,2011(2)
[4] OpenSceneGraph中文网站 http://www.osgchina.org
作者简介:
曲超(1982-),男,天津市测绘院,工程师
论文作者:曲超
论文发表刊物:《基层建设》2017年第29期
论文发表时间:2018/1/14
标签:地形论文; 数据论文; 高程论文; 模型论文; 影像论文; 金字塔论文; 分页论文; 《基层建设》2017年第29期论文;