基于Delta3D的气象仿真框架设计与实现

时间:2022-04-29 08:13:19

基于Delta3D的气象仿真框架设计与实现

摘要:为解决传统气象仿真方法复用性差,耦合性高等问题,提出了基于组件、以事件为中心的独立气象仿真框架,并在Windows平台下形成一个动态链接库,该动态链接库可以方便的动态载入到各种仿真系统中。运用VC++2005和虚拟现实开发引擎Delta3D,通过键盘响应特定气象事件,实现了常见气象现象的仿真。 实验结果表明,利用该方法不仅降低了系统的耦合性,还提高了仿真系统的开发和运行效率。

关键词:虚拟现实; 气象角色; 角色; 事件消息; 低耦合; 仿真框架

中图分类号:TN91134; TP391.9文献标识码:A文章编号:1004373X(2012)04002904

Design and implementation of weather simulation framework based on Delta3D

BAI Xiaomei, WANG Ru, ZHAO Yunbing

(School of Information and Control Engineering, Xi’an University of Architecture and Technology, Xi’an 710055, China)

Abstract: A independent dynamic meteorology simulation framework centered on the events is put forward based on components to solve the poor reusability and high coupling of traditional meteorological simulation method. A dynamic link library is formed on Windows platform and can be conveniently loaded into all kinds of simulation systems. The common meteorological phenomenon simulation is achieved with VC++2005 and virtual reality to develop engine Delta3D, and response specific weather events through keyboard. The experimental results show that the method not only reduces the coupling of system, but also improves the development and operating efficiency of the simulation system.

Keywords: VR; weather actor; actor proxy; event message; low coupling; emulation framework

收稿日期:20110911

基金项目:教育部虚拟现实工程研究中心开放实验室项目(MEOBNUEVRA200902);陕西省教育厅科研专项项目(11JK0944)0引言

在仿真系统中,气象的模拟直接影响到系统的逼真度和可信度,动态气象因其运动规律无序,数量巨大,随机变化性强,一直是仿真系统的难题之一。1983年Reeves提出的粒子能充分体现模糊物体的动态性和随机性,所以能很好地模拟动态气象[1]。近年来,国内研究者用粒子系统的方法对动态气象进行模拟,取得了大量的成果。徐利明等人基于粒子系统利用OpenGL技术实现了实时雨、雪的模拟,该方法借助底层图形库OpenGL,实现起来工作量大且开发周期长[2];张汉清等人建立了基于图形处理器 (GPU )粒子系统的雨、雪效果模拟方法,使雨、雪模拟的逼真度和实时性都得到了增强,但这对硬件有较高的要求[3];曾博、陈澜基于可视化引擎MS Flight Simulator提出了一种基于粒子系统理论实时仿真气候现象的算法,但没有考虑复杂气象情况下雨、雪粒子的特征[4] ;杨述华等人提出了基于VEGA在大型场景漫游系统中实时模拟雨、雪的方法,但物理模型是依托VEGA软件的粒子特效模块[5]。

传统的粒子模型是表达气象环境的主要手段,建立合适的粒子系统表达气象模型是这一领域的主要内容。但这严重影响了仿真系统的开发周期和费用,如何在现有模型基础上进行独立的集成开发,使其可以应用到各种仿真系统,是仿真系统急需解决的难题之一。

本文提出了基于组件、以事件为中心的气象仿真框架,通过键盘响应特定事件,实现常见气象现象的仿真,并伴随相应的声音、动画等特效,可以动态载入到各种仿真系统中,解决了以往系统扩展和重用性差,维护困难等问题,大大提高了软件的开发效率,降低了软件的维护成本。

1气象仿真框架的结构设计

整个仿真框架包括了常见气象现象,主要有白天、傍晚、夜晚和雨、雪、雾等。框架不仅要实现气象角色的生成,还要各角色间的交互,如白天可以下雨、降雪等,但不会出现傍晚现象,如图1所示。

图1气象框架图1.1气象框架设计原理

框架的重点在于实现气象角色之间的交互,提供一个统一的消息处理机制,能够发送消息给相应的气象角色。该系统设计输入组件接收消息实现此功能。为了保护角色自身的特性和降低角色之间的耦合性,为每个角色提供一个角色来负责角色与外部的交互。角色在框架中起消息处理中间层的重要作用,其主要任务是给气象仿真框架提供接口,以管理气象角色之间的交互,原理如图2所示。

图2框架原理图1.2气象角色的动态仿真模型

气象角色具有动态行为,要进行相应的消息处理,如下雨、降雪、打雷等。依据上述原理,为每一个角色创建一个相应的角色。角色的模型建立分下述两个步骤。

1.2.1创建角色

角色的主要任务是给气象框架提供接口,以管理相应的角色。角色由角色产生,角色在得到角色类名后开始创建角色及角色属性。

1.2.2加入角色

角色创建完角色后,通知仿真框架加入新角色。角色通过BuildInvokables()将角色及其在仿真框架中注册的消息进行连接,实现角色和消息的统一管理。创建过程如图3所示。

1.3输入组件的设计思想

输入组件的主要作用是接受所有的键盘按键消息,并传送到仿真框架,由于框架拥有一个消息和气象角色的映射关系来统一管理角色的发送和消息的接受,所以当仿真框架轮询到消息处理时,会寻找注册该消息的角色,通知它处理该消息事件。

2仿真框架的实现过程

气象仿真框架的实现主要有三个方面内容:

(1) 创建气象角色WeatherActor和相应的角色WeatherActorProxy,在Windows平台下编译成.dll文件,使其可以动态载入系统。

(2) 创建输入组件InputComponent实现特定按键激发特定事件,模拟不同的气象现象。

(3) 运用仿真软件Delta3D,实现气象仿真框架。

2.1创建气象角色

气象角色声明为class _declspec(dllexport),使其生成动态链接库,它包括创建和删除雨、雾、雪、打雷,以及白天、傍晚、夜晚,并实时设置大小和风速等特效。由于Delta3D封装了渲染引擎OSG,所以它继承了OSG提供的粒子系统,结合osgParticle::PrecipitationEffect()方法,以创建降雪的处理过程为例,代码如下:

//创建雪

void WeatherActor::creatSnow(void){

aSnow = new osgParticle::PrecipitationEffect();

if(m_SceneRoot.valid())//设置根节点

m_SceneRoot>addChild(aSnow.get());

aSnow>snow(0.005);//设置密度

aSnow>setParticleColor(osg::Vec4(1,1,1,0.5)); //设置颗粒颜色

aSnow>setWind(osg::Vec3(1,0,1)); //设置风向

setSnowParticleSpeed(1); //设置速度

setSnowParticleSize(0.1); //设置大小

aSnow>setPosition(osg::Vec3(1,2,1);}//设置位置

图3气象角色生成时序图2.3实现仿真框架

Delta3D是一款由美国海军研究学院(Naval Postgraduate School)开发的,以OSG为内核建立的全功能开源游戏与仿真引擎。它将Open Dynamics Engine(ODE),Character Animation Library(CAL3D)和OpenAL等优秀开源图形引擎再次进行了封装,得到美国军方巨大的支持与丰厚的投资。利用Delta3D提供的GameStart标准执行程序,可以在不编写代码的前提下启动用户的应用程序。GameStart以程序中GameEntryPoint类作为入口[7],如图4所示。完成初始化工作和建立好游戏管理器实例后,利用上述原理在OnStartup()中依次建立输入组件;导入地形文件;动态加载上面生成的天气角色;调整相机位置,实现气象仿真框架。

2.3.1建立输入组件

图4程序处理流程图3实验测试与分析

该试验是在普通PC机上(AMD Athlon 64 2800、NG6200显卡、512 MB内存)利用上述方法实现的,通过帮助信息,根据相应的按键激发事件,并且可以并发激活多个事件,如傍晚雪景、夜晚雨景、白天大雾雪景等多种气象效果,如图5~图7所示。

图5帮助信息图6白天雪景

如果启动场景漫游功能(按R键),可以通过鼠标和键盘来实现整个场景漫游。实验结果表明,该系统能较好地实现基本气象仿真,可为复杂场景的仿真提供独立的气象现象链接库,具有一定的实用价值。

图7夜晚大雾小雨夹雪4结语

本文所设计的气象仿真系统,较好地解决了仿真耦合性高,可重用性差,维护困难的问题。实验结果表明,该系统具有较好的扩展性和重用性,采用基于组件、事件驱动的仿真框架生成动态链接库,大大提高了复杂场景仿真的开发效率,降低了软件的维护成本,具有一定的现实意义。 在以后工作中可结合Delta3D提供的dtHLA方法,实现大规模分布式仿真系统的气象仿真。

参考文献

[1]REEVS W T. Particle system: a technique for modeling a class of fuzzy objects \[J\]. Computer Graphics, 1983, 17 (3): 359376.

[2]徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟[J].计算机仿真,2005,22(7):242245.

[3]张汉清,张科.基于GPU粒子系统的战场实时雨雪效果模拟[J].计算机仿真,2007,24(10):200203.

[4]杨述华,廖守亿,王仕成,等.基于粒子系统和 Vega的实时雨雪模拟[J].计算机应用,2008(28):238240.

[5]曾博,陈澜.飞行仿真系统中气候现象的仿真[J].计算机仿真,2010,27(3):228231.

[6]BMH Associates. Software design document (SDD) Delta3D game and simulation engine \[EB/OL\]. \[20051026\]. http// www.省略/filemgmt/visit.

上一篇:基于蓝牙的数据互联传输系统设计 下一篇:基于J2EE的高校后勤管理系统的研究和实现