基于DirectX的三维地理信息引擎设计与实现
2011-04-18向泽君薛梅
向泽君,薛梅
(重庆市勘测院,重庆 400020)
基于DirectX的三维地理信息引擎设计与实现
向泽君∗,薛梅
(重庆市勘测院,重庆 400020)
通过分析国内外三维地理信息系统技术现状,提出了基于DirectX实现三维地理信息引擎的架构设计,并在此基础上自主开发了三维地理信息引擎Spatial3D,并成功应用于沙盘展示、应急演练、GPS跟踪等多个业务领域。
三维地理信息系统;DirectX;3DGIS
1 前 言
近年来,随着三维可视化技术取得突破性进展以及计算机硬件效率的大幅度提升,三维地理信息系统(3DGIS)逐渐走入人们视野,并成为地理信息业发展的新方向,在规划、水利、应急等领域发挥着越来越多的作用。国内外地理信息平台商纷纷推出了各种商用三维地理信息平台,这些商用三维地理信息平台普遍具有价格高昂、扩展不易的问题,阻碍了三维地理信息系统在中小型应用中的推广。
本文通过分析国内外三维地理信息系统技术现状,提出了基于DirectX的三维地理信息引擎的架构设计及关键技术,并在此基础上开发了可扩展、易配置的自主三维地理信息引擎Spatial3D,成功应用于沙盘展示、应急演练、GPS等多个领域。
2 国内外三维地理信息系统技术现状[2]
由于三维建模和绘制技术突破,现有的国内外三维地理信息技术相对比较成熟,主要包括商用和开源两大类。
代表性的商用三维地理信息平台为Skyline和ArcGlobe。Skyline是美国Skyline公司为网络运营三维地理信息提供的企业级解决方案,给客户提供一站式服务,并开放了所有的接口。ArcGlobe是ESRI公司开发的ArcGIS产品系列之一,它使用标准的ArcGIS数据源和图层,提供了海量地理数据的交互式可视化,允许全球数据、本地数据和街道级数据间的无缝过渡。和Skyline相比,ArcGlobe的显示效果有所不及,其主要长处在于强大后台空间分析功能。
开源三维地理信息平台中最具代表性的是World Wind。它是NASA(美国国家航空与航天管理局)发布的开源软件,通过可视化的地球仪,将NASA、USGS(美国地质局)以及其他WMS(基于网络的地图服务)服务商提供的图像通过一个三维的地球模型展现。软件用C#编写,调用微软的SQL Server影像库来进行全球地形三维显示。目前,包括国内部分三维GIS软件在内的全球许多主流三维软件都是以WorldWind为技术内核发展而来。
3 三维地理信息引擎总体设计
3.1 总体目标
由于人力和投入限制,在规模上,自主三维地理信息引擎不能和商用三维地理信息平台相比,但具备成本低廉、应用灵活的特点。自主三维地理信息引擎应实现以下目标:
(1)低硬件配置:不需要独立显卡支撑,在普通台式机或笔记本上也能浏览;
(2)低平台依赖:在最小应用情况下,不依赖任何第三方地理信息系统平台,节约成本;
(3)高配置性:使用外部配置的方式,可在很短时间内装配出适用于不同区域的三维沙盘;
(4)高扩展性:提供良好的插件机制,让核心研发人员之外的技术人员扩展引擎功能,如GPS跟踪、视频监控、空间搜索等;
(5)高标准性:支持通用数据格式,并可扩展这些输入。例如Shape文件、GeoDatabase等。
3.2 架构设计
经过大量论证[1,3,5],自主三维地理信息引擎(Spatial3D)架构主要包括基础程序集、场景绘制程序集、数据加载程序集、场景管理程序集、界面程序集五个部分,其中场景绘制程序集和数据加载程序集是可以提供给二次开发者扩展的(如图1)。
图1 Spatial3D引擎架构图
各程序集主要作用如下:
(1)基础程序集。此部分是Spatial3D的基础,提供配置结构定义、基础空间模型定义、界面模型定义、三维要素模型定义、公共结构定义、公共数据结构及算法实现等内容。
(2)数据加载程序集。依赖于基础程序集,实现其中的数据加载接口。在Spatial3D中,每个图层都配置了一个数据加载类,这为多数据源的程序部署提供了最大便利性。根据实际数据源格式,可对数据加载类进行各种扩充。考虑到软件环境依赖性,还可将其拆分为不同的程序集。根据部署环境决定选用哪一个数据加载类。
(3)场景绘制程序集。此部分集中体现了对Direct3D技术的应用,依赖于DirectX 9,是Spatial3D的核心。
(4)场景管理程序集:其中SceneManager起到工厂作用,它通过读取配置,进行场景的初始化以及各个图层的组装,并控制图层加载、绘制及资源销毁,保证非托管资源的有效释放。同时对外提供地图浏览、查询等各种公用API接口。
(5)界面程序集:包括场景管理程序集基础上封装的用户控件,使三维应用变得更加简单。
4 关键技术及实现[4]
4.1 依赖倒置及可配置化
依赖倒置和可配置化是提高应用程序扩展性、伸缩性和配置性的主要方式。考虑到不同的数据源及应用场景,有必要分离数据加载,而场景绘制的声明与实现,则通过配置进行对象的创建和初始化。所有实现相关类都采用了无参数的构造函数,通过设置属性的方式进行注入,通过显示实现Idisposable接口进行资源释放。Spatial3D中所有动态信息都可以通过配置进行定义。在配置节中主要的配置节点包括:
(1)场景采用的核心绘制程序集定义
(2)环境设置,包括摄影机、灯光、天空盒、雾、参考坐标系
(3)图层集合,每个图层包括数据源、显示样式及数据加载类和场景绘制类名称
(4)所有数据加载类
(5)所有场景绘制类
(6)菜单
(7)状态栏
4.2 图层加载多线程化
在三维场景中,常常包含多个图层(地形、道路、建筑、地标…),如果采用单线程进行顺序的加载,用户体验将非常糟糕,如WorldWind采用单线程方式进行加载和绘制,从进入应用系统到显示场景,要等上数分钟之久。
在Spatial3D中,场景管理器统一提供对外接口,包括导航、图层管理和数据查询定位,其中所有地物要素都是以图层的方式进行管理的,包含名称、编码、是否可见、最大最小显示高度、数据来源、数据加载类、场景绘制类、图层的显示样式等。图层加载和绘制过程中,当一个图层创建后,它需要首先创建对应的加载和绘制类,由数据加载类进行数据加载,然后再根据数据类型进行场景绘制,该过程使用多线程技术,大大提高了数据加载和绘制速度,程序流畅、可操控性好。
4.3 界面设计定制化
Spatial3D参照成熟商用软件界面要素,搭建了一套可扩展、易配置的界面模型。将所有界面要素分为四种类型:菜单、侧边栏、状态栏、对话框窗体。
图2 Spatial3D界面构成
菜单通常停靠在界面的上方。菜单中包含一个或多个按钮。用于响应用户的各种操作。侧边栏通常停靠在界面左端,常作为操作面板使用,例如图层管理等。状态栏通常停靠在界面下端,用于表现标志、提供使用帮助以及记录当前位置等。对话框窗体通常浮动在界面中央,用于定位、查询等相关操作,如图2所示。
4.4 场景绘制技术扩充化
不同的地物要素,所对应的绘制方法也有所不同。在二维世界中同样是线状要素的管网和道路,在三维世界中有着很大的区别。例如道路不需要考虑管径,而管网则必须考虑,它们算法的差异性是非常巨大的。Spatial3D为每种基础地物要素编写了单个的绘制算法,一个绘制算法代表一个场景绘制类。主要包括:
(1)简单建筑物绘制
(2)地形绘制
(3)道路绘制
(4)三维地标绘制
(5)3Dmax模型绘制
(6)GPS跟踪及回放绘制
(7)统计绘制
图3 主要绘制效果
随着应用范围的扩展,这些场景绘制类还可逐渐增加,出现管线绘制类、土地利用绘制类等多种绘制类。部分效果如图3所示。
4.5 通用数据加载技术
Spatial3D默认采用Shape文件格式读取及其四叉树的空间索引算法。Shape文件是已经公开的格式,不需要依赖于任何地理信息平台。同时,采用四叉树空间索引算法,最快索引到某一范围的空间数据,大大提高加载速度。
5 结 语
基于DirectX的自主三维地理信息引擎Spatial3D由于其低廉的成本和灵活的配置性,已经体现出一定的商业价值,满足了中小型项目应用的需要。目前已验证可运行的最低硬件环境为:处理器:Intel®Pentium®4 CPU 2.40GHZ,内存:1.00 GB,显卡:GeForce4 MX 440-8X(显存64MB),而运行的软件环境为:WindowsXP Professional,.Net Framework 2.0,DirectX 9 Redist Pack。下一步,将继续加强对场景绘制类的扩充,使其更加广泛地应用于各个领域。
[1] Fletcher DunnParberryIan.3D Math Primer for Graphics and Game Development[M].Wordware Publishing,2005
[2] 吴军,鱼小刚,郭英.二维、三维GIS系统的结合研究与应用[M].北京:数字石油和化工,2009
[3] 刘艳,马劲松,张永玉.3DGIS中空间对象的存储与快速查询[J].测绘科学,2009,34(4):147~149
[4] 宇林军,孙丹峰,李红.基于紧密型二三维结合的GIS构架与系统实现[J].地理与地理信息科学,2009,25(5): 17~20
[5] 苏莉.三维GIS纹理坐标数据管理方法的研究[J].科技信息,2009(5):125~127
Design AndImplementation of DirectX-based Three-demensial Geographic Information Engine
Xiang ZeJun,Xue Mei
(Chongqing Surveying Institute,Chongqing 400020,China)
By analyzing the domestic and international status of three-dimensional geographic information system technology,this paper propos architecture implemented by DirectX based on three-dimensional Geographic Information Engine,and self-developed three-dimensional Geographic Information Engine named Spatial3D,and successfully applied to sand table display,emergency drills,GPS tracking and other business areas.
Three-dimensional Geographic Information System;DirectX;3DGIS
1672-8262(2011)02-7-03
P208
A
2011—01—17
向泽君(1965—),男,正高职高级工程师,主要从事水利工程勘察设计、城市勘测管理和技术研究、及数字城市建设研究。
重庆市信息产业发展基金项目(2009-009)