欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

基于GLScene和ODE的火炮武器系统虚拟战场仿真

时间:2011-04-24  作者:秩名

论文导读:在OpenGL中,选择与反馈、动态纹理贴图、粒子系统、三维地形建模等算法的实现都具有一定难度。提供了内置的碰撞检测系统,而且也可以允许用户使用自己实现的碰撞检测系统。在火炮武器系统虚拟战场仿真环境中,应该提供诸如火炮、指挥车、飞机、炮弹等几何模型。对粒子系统的支持主要体现在对火焰的模拟上。
关键词:虚拟战场,开放动力学引擎,细节层次模型,碰撞检测,地形建模,粒子系统

 

0 引言

火炮武器系统是一种十分复杂的系统,其理论性强,精度要求高。计算机仿真及虚拟现实技术是武器研制过程中的一项重要内容,是在虚拟环境中模拟和测试真实武器系统的各项性能指标的一种重要手段。以虚拟仿真的方式完成对真实战场的逼真模拟,既保证了良好的效果,又提高了效率,降低了成本,成为诸多领域内复杂任务和复杂对象研究的主要方法[1],从某种意义上讲,其价值不亚于真实的试验。仿真技术在国防科研和其他行业的作用日益突出,被认为是继科学理论和实验研究后认识世界和改造世界的工具。在西方发达国家的武器系统研制过程中,计算机仿真往往是武器系统定型试验之前必须进行的步骤。

1 几何建模引擎GLScene与物理建模引擎ODE

GLScene是基于OpenGL的开放源代码的3D开发平台,它提供了可视化组件库和对象库来描述和渲染3D场景。与原始的OpenGL函数库相比,GLScene提供了更为强大的功能:

1) 将所有的OpenGL基本操作封装到组件库和对象库中,其面向对象的机制更适合做大型的开发,同时提供了可视化RAD开发工具;

2) 支持将多种已有的3D模型导入到GLScene的3D场景中,其支持的3D模型格式包括:3DS、OBJ、STL、VRML、MD2、SMD、PLY等十几种;

3) 在OpenGL中,选择与反馈、动态纹理贴图、粒子系统、三维地形建模等算法的实现都具有一定难度。在GLScene中,这些功能都封装成组件和对象,可以方便的使用。

GLScene的功能仅限于几何建模的领域。在对真实度要求很高的虚拟现实(VR)环境中,除了逼真的几何建模之外,还必须提供诸如碰撞检测、刚体静力学仿真、刚体运动学仿真、刚体动力学仿真等功能,甚至还要考虑实体的弹性力学模型。ODE(OpenDynamics Engine,开放动力学引擎)是一个自由许可的工业级刚体力学仿真开发库,可以在VR环境中很好的模拟刚体的力学特性,弥补了GLScene在物理建模上的不足。ODE具有以下特点:

1) ODE主要用于交互式实时仿真环境中,适合在可变的VR环境中模拟运动实体。它运行稳定、快速、鲁棒性好,并且可以在运行过程中自由的改变动力学系统的体系结构。

2) 相对于物理学意义上的精确性,ODE更强调计算速度和稳定性。ODE依靠一个高度稳定的整合器实现系统容错,以防止出现不能收敛的错误(这类错误将导致力学模型失稳,最后会失去控制)。

3) ODE支持“硬”接触,这就是说可以在任何两个实体干涉时实现不可渗透的强制约束。这一点非常难以实现,很容易引发不能收敛的错误。与之相反的是,在很多其它的物理建模工具中,使用虚拟弹簧来表现实体接触。

4) ODE提供了内置的碰撞检测系统,而且也可以允许用户使用自己实现的碰撞检测系统。

GLScene将ODE库封装起来,用户可以在几何模型上加载额外的“ODE块”。这些“ODE块”具备物理属性,符合刚体力学规律,可以是规则形状的,也可以是3D地形这种非规则形状的。

2 虚拟战场仿真的对象层次结构

在火炮武器系统虚拟战场仿真环境中,应该提供诸如火炮、指挥车、飞机、炮弹等几何模型。免费论文。如果自己编程实现3D几何建模,其工作量巨大。目前,已经有很多的成熟几何建模产品,如3D Max、Maya等,可以实现相当复杂的几何建模。因此,合理的实现方法就是在3DMax、Maya等工业级的建模工具中对仿真对象进行几何建模,然后在3D仿真环境中加载这些预制的模型。

GLScene提供了TGLFreeForm对象用来在3D场景中加载预制的几何模型。调用TGLFreeForm对象的LoadFromFile方法,便可以从指定的文件中读取模型节点信息,然后在3D场景中进行模型重建。

图1 虚拟战场仿真对象的层次结构

Fig.1Structural levels of object in the simulation of virtual battlefield

考虑到系统的可维护性和可复用性,使用了面向对象的设计方法。所有武器仿真对象(火炮、指挥车、飞机、炮弹等)都被设计为继承于一个共同的抽象基类-基础仿真对象TGLBaseSimulationObject。同时,考虑到同类武器的共性,例如,所有的飞机都可以飞行,所有的自行火炮都具备炮塔和炮管,建立第2层抽象类TFighter和TArtillery。在第二层抽象类下面才是具体的实现类,如F16型战斗机TFighter16、35mm自行高炮TArtillery35等。借助统一建模语言UML,仿真对象的层次结构图可以用图1描述。

3 虚拟战场3D地形建模

对于虚拟战场仿真环境,需要大规模地形模型的实时显示。而这种地形模型常常包含数十万甚至上百万个多边形,而且有越来越复杂的趋势。对此问题,Clark提出LOD算法加以解决,其主要思想是为虚拟场景中的物体建立多层次的细节模型,在模型驱动时根据一定的规则选择相应的层次,从而达到实时简化模型而又不影响视觉效果的目的[2]。总结近年来LOD技术的研究成果,一般可以将其分为两类:一是与视点无关的LOD 算法(VILOD:View-Independent LOD)[3];二是与视点相关的LOD(VDLOD:View-Dependent LOD)[4-5]。如果按照模型所使用的数据类型,又可以将它们分为基于规则格网(RSG)的LOD和基于不规则三角网(TIN)的LOD[4-5]。其中,对基于RSG的VDLOD的地形模型的研究最为普遍,目前已经比较成熟。

GLScene对LOD算法有很好的支持,它采用基于RSG的VDLOD地形模型,不但渲染的实时性很好,完全满足虚拟战场的要求,而且对LOD算法进行了非常合理的面向对象的封装,使用简单方便。GLScene提供了诸多属性操作,以实现对地形面积、LOD细节精度、LOD单位面片的大小等地形建模特征的控制。GLScene可以从单色位图生成3D地形,其基本思想就是把一张单色位图作为节点数据源,位图上不同位置的色差就代表地形中不同位置的高度差。如果通过卫星将某个区域的俯视图拍摄下来,然后将该俯视图处理为单色位图,就可以通过以下的代码生成节点数据:

GLBitmapHDS.Picture.LoadFromFile('terrain.bmp');

其中,GLBitmapHDS为GLScene的组件,而terrain.bmp是一张具有色差的单色位图。免费论文。

这样,通过简单的代码,就可以实现一个基本的战场3D地形。如果要在战场上进行虚拟漫游,只需要改变相机的位置和角度即可。至于地形网格节点的生成、地形的实时渲染等代码,全部在后台进行,使用者可以不掌握全部实现的细节。

4 基于粒子系统的特殊效果生成

粒子系统方法是一种模拟不规则的复杂几何形体的方法,用其对矢量场进行显示,具有灵活方便的特点,尤其适合于对火焰等具有模糊外形的物体的造型[6]。在3D虚拟战场的对抗环境中,粒子系统的应用主要是对火焰和爆炸的模拟。在火炮发射炮弹或敌方目标被击中时,都需要模拟火光;特别是敌方目标被击中时,还需要模拟爆炸的场景。

GLScene对粒子系统的支持主要体现在对火焰的模拟上。在GLScene中,通过TGLFireFXManager组件实现对火焰外观的控制,它包含很多属性,如InnerColor控制内焰的颜色,OuterColor控制外焰的颜色;FireDir控制火焰的方向;FireDencity控制火焰的粒子密度;MaxParticles控制火焰的最大粒子数量;ParticleLife控制粒子的存活时间;ParticleSize控制火焰的粒子大小等等。通过对这些属性进行微调,可以获得不同的火焰景观。值得一提的是,有关粒子系统的属性微调,目前还没有成熟的理论进行指导,需要进行大规模的数值实验才能够获得较好的效果。

对于爆炸的模拟,GLScene则是通过其它的方法实现的,而且只支持继承于TGLBaseMesh的网格实体模型,如基于三角面片的3DS模型等。免费论文。在具体实现上,需要为爆炸的实体加上一个特效组件TGLBExplosionFX,该组件渲染算法的基本原理就是:将构成网格模型的每个单位面片全部肢解,然后让这些面片在很短的时间里做随机的扩散运动,从而在视觉上达到的爆炸的效果。

5 基于ODE的火炮运动仿真

基于ODE,可以实现火炮在虚拟战场中的运动仿真。为火炮对象添加“ODE块”―TGLODEDynamic对象,其碰撞检测的边界就是火炮的几何表面(外表面)。所有的TGLODEDynamic对象都被TGLODEManager组件管理起来,只要为TGLODEManager组件设置重力大小,则其管理的所有TGLODEDynamic对象就都具有了重力,会做自由落体运动。如果这些具有重力的对象没有“感知”到来自地面的碰撞检测,那么就会一直下落,直到溢出为止。为此,借助ODE,还可以为TGLTerrainRenderer地形组件添加一个碰撞检测对象TGLODEHeightField,该对象的碰撞检测边界就是地形的几何表面(上表面)。这样,当具有重力的火炮碰到地形的“硬表面”时,将会发生碰撞之后的振动,最后会逐渐稳定下来。当然,在仿真的初始化时,可以设定火炮从距离地表很近的地方下落,这样就不会发生长时间无法收敛的振动,看起来就像静止不动一样。

查看相关论文专题
加入收藏  打印本文
上一篇论文:基于CAN 总线的电力集中抄表系统的研究(图文)
下一篇论文:基于GPRS的城市照明监控系统的设计(图文)
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文