基于WorldWind的三维模型植入研究

时间:2022-05-14 09:25:44

基于WorldWind的三维模型植入研究

摘要:World Wind 是美国航天宇航局(NASA)的三维地理信息系统。因其代码开源,开发成本低廉,可扩展性强且功能强大,以其为基础平台开发特定功能的GIS应用程序得到了广泛使用。但WorldWind作为一个地理信息应用平台,对三维模型植入应用还没有提出完善的解决策略。该文通过研究WorldWind运行机制、分析三维模型的植入原理并对其三维模型加载过程进行改进,实现了三维模型在该地理信息平台的合理植入,通过实现三维模型碰撞检测实现了模型与使用者的互动响应,该文对利用WorldWind进行城市规划、资源勘探、战场环境模拟等应用的开发人员具有一定的参考价值。

关键词:World Wind;3D建模;模型植入;碰撞检测

中图分类号:TP37文献标识码:A文章编号:1009-3044(2011)30-7356-02

1 WorldWind运行机制

1.1 平台功能及版本

WorldWind是NASA的开源三维地理信息系统,通过将Landsa卫星图像和航天飞机雷达遥感数据结合在一起,用户可以浏览由因特网上WMS服务器提供的地球、月球、火星和木星等星球的三维实景影像资料;可在所观察的行星上随意进行放大、缩小、倾斜、旋转等操作。通过卫星数据进行自动更新, World Wind能够在世界范围内跟踪天气云图、火灾、自然灾害等情况。

WorldWind的开源代码有两种版本,分别为java版本和C#版本,Java版本支持B/S模式,C#版本支持C/S模式,本文以C#版为例进行了研究,软件版本为1.4.0版。

1.2 WorldWind运行机制分析

通过分析软件源代码(重点分析了程序配置加载流程),得出WorldWind程序的运行机制如表1。

1.3 三维地理模型构建原理

WorldWind模型由数字高程模型和卫星图片数据构成。数字高程模型包含地表海拔高度信息,构成星球的骨架,而卫星图片数据构成星球的血肉,两者相结合生成了我们看到栩栩如生的三维星球。通过网络浏览星体时,随着用户浏览角度和位置的变化,从WMS服务器下载的图片会按指定的算法与数字高程模型结合一起,生成用户看到的影像。如图2所示。

2 三维模型建模介绍

2.1 三维建模介绍

WorldWind本身不提供三维建模工具,因其采用了direct3D技术,只能加载directX格式(.x)三维模型文件。用户建模可以使用 3DSMAX、AutoCAD等成熟的建模商业软件,也可以使用Google公司提供的建模软件:GoogleSketchUp快速创建三维模型,该软件支持导入常用 3D格式的文件:*.3ds/*. max/*.dwg/*.dxf,编辑后导出为 *.skp格式,然后可以通过格式转换插件导出成.x格式模型文件。

2.2 WorldWind三维模型加载接口

WorldWind加载三维模型参数以XML文件形式存储,其格式范例如下:

tiny

160.0

40

116

2

Data\Model\tiny.x

0.0

-90.0

90.0

10000.0

10

WorldWind程序提供了一个三维模型类ModelFeature,用以解析相关三维模型加载的XML文件,并应用到地理信息平台中。ModelFeature继承自渲染对象基类RenderObject,因此在程序初始化配置时将三维模型对象加载后,在主程序渲染函数中能自动进行渲染。

3 WorldWind平台三维模型加载问题及改进策略

WorldWind程序只是提供了.x文件的加载接口,简单实现三维模型的显示,实际使用过程中发现三维模型的加载还存在一些问题,下面重点对这些问题进行分析并提出解决策略。

3.1 模型的倒置镜像对称问题

具体现象为模型文件加载后,显示在地理平台上为原模型的镜像对称模型。

原因分析:一般制作三维模型采用的是左手坐标系,而WorldWind显示采用了右手坐标系,因此地理平台上显示出原模型的对称镜像。

解决策略:通过对ModelFeature类中direct3D设备转换矩阵初始化时进行一次对称矩阵变换可将加载坐标系变换回左手坐标系。变换矩阵如下:■

3.2 大规模加载模型时的低效问题

具体表现为大规模加载模型时内存消耗明显上升,加载速度变慢。

原因分析:WorldWind维模型是否可见,是通过视锥裁剪实现的,当视锥范围内模型过多时,消耗内存急剧上升导致加载速度变慢。

解决策略:首先模型可见增加视角高度要素,高度增加意味着可视范围增大,可视范围内的模型数量增多,因此在一定视角高度范围内(5KM左右)应将模型占用内存卸载;其次可采用模型纹理压缩,多级LOD显示;最后在模型制作过程中必须控制模型复杂程度和模型文件大小,减轻模型加载负担。

3.3模型管理模块复杂问题

WorldWind并没有单独的模型管理模块,加载的模型在图层管理中统一显示,要改变模型的高度、经纬度等信息时只能修改相应XML文件并重启程序才能看到效果。

解决策略:将模型XML文件反序列化解析到管理界面,模型参数更新保存到模型XML文件,同时更新WorldWind渲染对象队列即可实现模型参数管理可视化。通过对模型XML文件查询可以实现模型的定位。管理界面如图3所示。

4 模型互动实现

用户观察三维模型过程中会有对三维模型的相关信息进行了解查询的需要,此时需要三维模型对用户鼠标进行或碰撞检测。WorldWind并没有直接提供三维模型的鼠标响应事件,解决方案就是在对每个模型对象渲染时首先映射鼠标射线,然后判断该三维模型的相交关系并作出响应。射线由射线位置和射线方向组成,通过鼠标位置向量与屏幕变换矩阵、缩放矩阵及视图矩阵的逆矩阵相乘即可得到世界坐标系下的射线,此时即可对模型与射线相交进行判断,在相应位置编写相交事件即可,实现程序代码如下:

//定义射线位置和射线方向向量

Vector3 pos = new Vector3(DrawArgs.LastMousePosition.X,DrawArgs.LastMousePosition.Y, 0);

Vector3 dir = new Vector3(DrawArgs.LastMousePosition.X, DrawArgs.LastMousePosition.Y, 1);

//将鼠标射线变换到世界坐标系

pos .Unproject(DrawArgs.Device.Viewport, drawArgs.WorldCamera.ProjectionMatrix, drawArgs.WorldCamera.ViewMatrix, drawArgs.device.Transform.World);

dir.Unproject(DrawArgs.Device.Viewport, drawArgs.WorldCamera.ProjectionMatrix, drawArgs.WorldCamera.ViewMatrix, drawArgs.device.Transform.World);

if (mesh.Intersect(pos, dir))

{

//处理相交事件

}

实现原理可参阅Direct3D模型碰撞检测资料,系统实现效果如图4。

5 结束语

本文对WorldWind平台植入模型进行了一些摸索,并解决了地理平台本身的一些缺陷,通过文中介绍的方法,可以解决用户在平台上自主植入并显示三维模型遇到的一些实际问题,通过对模型的鼠标碰撞检测解决了三维模型与用户的互动响应问题,对于要用WorldWind进行三维模型植入开发的人员有一定的借鉴作用。

参考文献:

[1] OpenGIS.Beaujardiere,J OGC WebMapService InterFace 2004

[2] Geospatial Data Abstraction Library(GDAL)

[3] 杨磊 高素青 基于worldWind的三维GIS研究[J].电脑知识与技术,2010(22).

[4] 颉继珍.城市3维地理信息服务系统框架研究[J].测绘与空间地理信息.2008(6):95-99.

[5] /jk276993857/article/details/6158352.

上一篇:二叉树的遍历 下一篇:浅谈《计算机应用基础》课程设计