基于OpenSceneGraph的大场景三维浏览系统设计与实现
发布日期:2019-08-01

文/洪 洲1,徐 颖2,张正鹏2( 1. 铁岭市测绘管理办公室,辽宁 铁岭 112000;2. 辽宁工程技术大学 测绘与地理科学学院,辽宁 阜新 123000)

    近年来国际上涌现了许多三维开发平台和系统, 如OpenSceneGraph, Vega, Quest 3D, Skyline 等。它们的出现大大推进了城市三维的发展。但是这些软件普遍有一些不足之处,如无法集成不同的数字地球数据无法满足多方面需求,传输效率低,价格昂贵等等。OpenSceneGraph 作为一个开源的高性能三维图像渲染工具包,以其可扩展,可移植,快速开发的特点很好的克服了这些缺点,从实用的角度上更有意义。

1 OpenSceneGraph 及其组件简介

1.1 OpenSceneGraph

    OpenSceneGraph是一个开源的高性能三维图像渲染工具包,一般用于视觉仿真、游戏、虚拟现实、科学可视化和建模等领域。完全由C++和OpenGL编写而成。采用 OpenSceneGraph 图形引擎克服了传统的 OpenGL 以及 Direct3D 开发周期长、 难度大的缺点,解决了使用 OpenGVS、 Vega 等商业引擎开发成本过高,不利于产品推广的问题, 从实用的角度上更有意义。目前已经有很多成功的基于 OpenSceneGraph 的应用, 如 Delta3D、 3DVRI、 Rem03D、 虚拟地形系统、交通工具仿真系统、景区模拟系统[ 2] 、 卫星可视化仿真系统[3] 、林地可视化系统[4] 、水利工程三维可视化系统[5]等等, 效果不亚于商业视景渲染软 件[6] 。

1.2 OSGEarth

    OSGEarth 是一个基于 OSG 开发的实时地形模型加载和渲染工具。OSGEarth 使用一个基于 XML的文件格式,被称为 Earth File 的文件来说明数据是怎样加载进 OSG 的。它可以直接从网络上的服务器端读取数据, 并实时地 进 行 处 理 和 显 示。它 支 持WMS,WCS,TMS 等多种地图数据服务器端, 自己则作为一个不断获取和解析数据的客户端, 它还可以和 Google map, Yahoo map, ArcGIS Online 等数字地球服务器建立连接并从中获取所需要的数据。

1.3 VirtualPlanetBuilder

    VirtualPlanetBuilder 是一种地形数据库创作工具,是能够阅读各种地理图象和高程数据并建立小面积地形数据库, 乃至大规模如整个地球的庞大数据库。这些数据库可以上传到互联网, 并能够提供象在线 Google Earth 一样的风格漫游整个地球的数据库,或保持对本地磁盘高速接入等所需的专业飞行模 拟 器。VirtualPlanetBuilder 本 身 是 一 个 基 于openscenegraph 实时图形工具箱, 它可以创建基于openscenegraph 的二进制的最高效率的数据库。

2 三维场景模型的建立

2.1 独立建筑物模型的建立

    在 3Dmax 中构建三维场景中的建筑物等独立模型,关键步骤如下:
    (1) 下载建筑体外观贴图;
    (2) 以 CAD 矢量底图为主, 结合近期航片或卫片影像获得精确完整的建筑模型结构;
    (3) 3DMax 建模, 导入单个封闭的 CAD 矢量底图,通过线条描出矢量图,挤出建筑造型;
    (4) 三维模型生成, 模型生成后进行表面贴图,最后优化压缩模型,将看不到的面全部删除, 减少模型中面和点的数量,简化模型,以提高运行速度;
    (5) 生成单幢. X 模型, 简化后的. max 模型通过PandaDXExporter 插件导出生成. X 模型;
    (6) 数据集成, 将所有导出的单幢. X 模型进行数据集成工作。如图 1 所示。

2.2 DEM 模型建立

    城市精细 DEM 模型可利用免费的 SRTM 数据构建,并在 ArcGIS 下利用“Mosaic To New Raster” 工具完成大场景的栅格 DEM 拼接。

2.3 全球 DEM 模型的建立

    利用 VirtualPlanetBuilder 进行全球 DEM 数据的建立。首先下载 land_shallow_topo_east. tif 数据, 再利用 VirtualPlanetBuilder 中的 osgdem 工具将 tif 转换为 ive 模型如图 2 所示,提高全球 DEM 的浏览效率,VirtualPlanetBuilder 命令行如下:
osgdem - - bluemarble - west – t land_shallow_topo_west. tif - - bluemarble - east - t land_shallow_topo_east. tif - - geocentric - l 12 - o earth. ive - a earth. osga

3 系统设计

    本文提出的大场景三维浏览系统, 是以 VisaulStido 为编译环境、 利用OpenSceneGraph、 OSGEarth、VirtualPlanetBuilder 三维渲染库实现的。

3.1 系统的框架设计

    三维浏览系统采用三层架构,从下至上分别为:数据访问层、 功能支撑层、 表示层,如图 3 所示。

3.2 OpenSceneGraph 与 MFC 交互

    OpenSceneGraph 与 MFC 的具体交互过程, 如图4 所示。

3.3 系统的功能设计

    大场景三维浏览系统旨在提供一个三维大场景的显示平台,在这个平台上我们可以添加,查看. earth模型和其他格式文件并对模型进行基本的放大, 缩小,平移,导航等操作,界面功能模块包括:
    ( 1) File: 包括基本的新建文件, 打开已有文件,打开最近打开的文件,关闭和退出功能。
    ( 2) View: 包括工具栏,放大、 缩小、 平移、 导航等功能。
    ( 3) Add Earth Model: 打开文件夹中的* . earth文件。
    ( 4) Add OSG 3D Model: 打开 OpenSceneGraph支持的各种格式的文件, 如* . ive, * . osg, * . 3ds,* . tif 等。

4 系统的实现

4.1 OpenSceneGraph 窗口的初始化

    在 Visual studio 中创建一个工程,其窗口的初始化实现的核心代码为:
void cOSG: : InitOSG( std: : string modelname)
{
    m_ModelName = modelname;
    InitManipulators( ) ;
    InitSceneGraph( ) ;
    InitCameraConfig( ) ;
}

4.2 模型加载功能的实现

    以加载 earth 模型为例,核心代码如下:
CMFC_OSG_MDIApp: : OnOSG3DEarthModel( )
{
CFileDialog OSG3DEarthModelDlg( TRUE," OSG EarthModel Files ( * . earth) " ,
NULL, OFN _ FILEMUSTEXIST | OFN _ NOCHANGEDIR,_T( " EarthModel Files ( * . earth) |* . earth; ) | | " ),NULL) ;
OSG3DEarthModelDlg. m _ ofn. lpstrTitle = " 打开OSGEarth 模型文件" ;
if( OSG3DEarthModelDlg. DoModal( ) ! = IDOK)
return;
CString strFileName = OSG3DEarthModelDlg.GetPathName( ) ;
osgViewer: : Viewer viewer;
viewer. setSceneData( osgDB: : readNodeFile( strFileName. GetBuffer( ) ) ) ;
viewer. run( ) ;
}

4.3 系统浏览功能的实现

    放大、 缩小、 平移等功能的实现主要是调用了OpenSceneGraph 中的 MatrixTransform 命令, 其核心代码如下:
osg: : ref _ ptr < osg: : MatrixTransform > trans =new osg: : MatrixTransform( ) ;

4.4 系统漫游功能的实现

    OpenSceneGraph 中是利用 TravelManipulator 实现漫游的,漫游场景的演示如图 5 所示。把漫游器添加到场景中的核心代码如下:
TravelManipulator* TravelManipulator: : TravelToScence( osg: : ref_ptr < osgViewer: : Viewer > viewer)
{
TravelManipulator* camera = new TravelManipulator;
viewer - > setCameraManipulator( camera) ;
camera - > m_pHostViewer = viewer;
return camera;
}

4.5 系统演示

    本文实现了三维场景的模型加载、 浏览、 漫游等功能,系统演示效果见图 6、 图 7、 图 8、 图 9 所示。

5 总结

    本文研究了基于 VS 和 OpenSceneGraph 的大场景三维浏览系统的设计与实现。给出了大场景三维建模的方法和流程,包括三维建筑物模型的建立、 全球 DEM 模型的建立、 区域精细模型的建立, 最后利用 OSGEarth、 VirtualPlanetBuilder、OpenScenGraph 等工具实现了大场景中三维模型的整合和优化。在Visual Stido 和 OpenSceneGraph 开源库基础上设计了大场景三维浏览系统,实现了模型加载、 快速三维浏览、 漫游等功能。三维场景的查询和分析功能有待进一步的完善。
参考文献:
[ 1] 孙艳英. 三维场景建模及其实时渲染方法[ D] . 武汉:武汉理工大学,2004.
[ 2] 包富华. 基于 OSG 的西安市景区虚拟旅游系统设计与开发[ J] . 咸阳师范学院学报,2012,3: 68 - 71.
[ 3] 刘宏才. 基于 OSG 的卫星可视化仿真系统研究[ J] . 硅谷,2011,20: 55.
[ 4] 黄友良, 淮永建, 于鹏, 等. 基于 OSG 的林地可视化系统研究[ J] . 系统仿真学报, 2008, 9 ( S1) : 352 - 354,358.
[ 5] 万定生, 徐亮. 基于 OSG 的水利工程三维可视化系统研究与应用[ J] . 计算机与数字工程, 2009 ( 4) : 135 -137,150.
[ 6] 王金宏. 基于 OSGEarth 的虚拟校园场景建模研究[ J] .世界地理信息,2011( 2) : 65 - 71.
[ 7] 徐青. 地形三维可视化技术[ M] . 北京: 测绘出版社,2000.
[ 8] 刘宇,王永生, 孙庆辉. 数字城市地理空间信息公共平台的设计[ J] . 测绘科学技术学报,2006,23( 5) : 359 -362.
[ 9] 李新放,刘海行, 等. 基于 OpenSceneGraph 的海洋环境三维可视化系统研究[ J] . 海洋科学,2012( 1) : 54 - 58.
[ 10] 万剑华, 朱长贵. 3DGIS 中空间对象的几何表示[ J] .矿山测量,2001( 20) : 16 - 19.
作者简介: 洪洲( 1983 - ) , 男, 汉族, 辽宁铁岭人, 硕士, 高级工程师,主要从事测绘业务研究工作。