可漫游的虚拟战场设计与实现

2012-07-02 00:50杨晓龙崔伟宁
兵器装备工程学报 2012年4期
关键词:碰撞检测视点漫游

杨晓龙,崔伟宁

( 装甲兵工程学院 信息工程系,北京 100072)

当前出现大规模全局战争的可能性已经非常渺茫,同时基于我国和平崛起的基本路线,发生局部战争的可能性也相对较小。在和平发展的时代大背景下如何保持和提高部队战斗力,随时应对突如其来的恶劣情况,成为部队战斗准备的重要课题。虚拟现实( virtual reality,VR)是一种新的人机交互方式,利用计算机技术等多项技术生成一个逼真的三维视觉、听觉、触觉、嗅觉等虚拟感官世界。而利用虚拟现实技术来实现逼真的虚拟战场可有效解决以上部队需求问题。

1 战场环境的可视化分析

1.1 战场地理环境

战场地理环境是指包括战场位置、形状等地理体征,战场中道路、河流、树木等地貌体征和日照、烟雾等自然现象在内的所有可见物理特征的总和。可以想象,在作战模拟过程中地理特征随时间和战争情况的变化十分小,可以认为他们是不变化的。而战场环境的地貌体征可能受到战斗破坏而导致状态变化。因此,在显示战场地理环境时,可根据物体状态是否有变化分为静态和可变两部分,分别针对他们进行构建,然后组合起来完成战场地理环境的三维视图,可有效提高实现效率。

战场环境中的光照主要来自太阳光,在模拟战场中设置一个点光源作为太阳,通过调节代表太阳的点光源的位置和辐射强度,就可以很容易的形成早晨、中午、夜晚的场景。另外大气现象中存在的雾以及烟尘、污染物等,都会影响视觉效果,可使用OpenGL 中的雾化技术来达到模拟自然现象的效果。

1.2 战场作战实体和特殊视景模型

对战场中作战实体的模拟主要体现在两个方面:一是建立实体的几何模型;二是让实体在场景中运动起来[1],如飞机、坦克的几何结构以及它们飞行、运动等各种行为。对于几何结构,可以利用3D 软件( 如3DS、AutoCAD 等)进行绘制,存为三维图形文件( 如3ds 文件),再利用OpenGL 的相关函数处理这些图形文件,形成作战模拟场景中的实体。

实体的运动实际上是指在作战模拟过程中实体特性的改变,包括位置与表面的变化。实体位置变化可通过对实体或其某一部分的移动、旋转、缩放来实现。实体的表面变化主要是由碰撞引起的,需要计算相互碰撞的两个实体的相对位置,一般可采用矩形边界检测方法进行碰撞计算,该方法虽然牺牲了一定的精确性,但提高了系统的实时性[2]。

特殊视景模型包括雨、雪、爆炸烟火等,这些特殊效果可以通过粒子系统来实现。

2 构建可漫游的虚拟战场场景的一般步骤

所构建的虚拟战场场景中主要包括:天空体、地形、地物地貌、人造地物、作战实体等,而漫游控制及时态势信息也必不可少。其中较为复杂的是地形的建模与显示、漫游控制及碰撞检测等技术。

构造可漫游的虚拟战场场景的一般步骤如下:

1)构造地形;

2)构造天空体;

3)建立人工地物及地貌特征;

4)为虚拟环境增加诸如雨、雪、雾等自然现象;

5)漫游控制的实现;

6)实时态势信息的标注;

7)系统测试,包括漫游控制的灵活性、信息显示的准确性、纹理是否会扭曲等。

3 可漫游的虚拟战场场景的实现

该虚拟战场场景是在Visual C++环境下通过调用Open-GL 函数库编程实现的。OpenGL 函数库与操作系统无关,使用OpenGL 函数库以前要对其进行特定的初始化工作,使他与Windows 兼容。OpenGL 有专门的初始化函数可以利用,他的初始化工作包括:设置像素格式,建立绘图描述表,清除缓存,光照初始化。

3.1 虚拟战场中地形的建模与显示

地形的模拟可以分为两类:真实地形与模拟地形。真实地形和模拟地形的主要区别是数据来源,真实地形是现实世界中真实地形的再现,具有非常高的真实度,必须采用真实世界中的具体数据来构造,实现起来比较困难。如果在可视化过程中对地形的生成只是视觉上的要求,而非真实世界的再现,则可以采用模拟地形,即可以采用随机生成地形高程数据的方法或使用高度图的方法生产地形,这样操作和实现起来都较为容易。

不管模拟哪种地形,通常都是采用经纬度线构成的规格化网格体逼近的方法,关键在于获取网格点的有关参数,即经纬度、高程和颜色等数据。真实地形的高程值通常通过航拍图片或卫星图片获取,而模拟地形的高程值则如上面所提到的,可采用随机生成的方法或读取高度图文件得到。如果地形规模较大,一次性实现则需要大量的网格体,因而需要的数据量大,而可通过采用层次细节简化LOD( level of details)的方法,以多层简单的网格体复合形成复杂度高的网格体,来达到场景实时绘制的要求。

本文所构造的虚拟战场场景采用的是模拟地形,而模拟地形又有两种情况: 一种是比较平坦的地形,可采用平面模拟地形实现,这种办法实现起来相对简单,而且对系统资源的消耗较少。另一种是丘陵山地地形,此时要采用三维模拟地形实现,使用较多的是二叉树地形模型[3]或四叉树地形模型[4],而且根据视点与地形距离的远近使用不同精度的格网绘制地形,在不失真的情况下减少资源消耗和复杂度,同时实现了使用LOD 技术对地形绘制的简化[5],达到虚拟战场场景的实时绘制和显示的真实效果。图1 ( a)是平面模拟地形网格,图1( b)是二叉树实现的三维网格地形。

3.2 虚拟天空的制造

天空体往往能起到增强虚拟场景真实感的效果,使人有更好的沉浸感。构造天空体常用的方法有两种:一种是立方体盒天空体,它是采用雾化的天蓝色背景,将天空纹理贴在立方体盒上。另一种是半球形网格天空体[6]。半球形的天空体有很多优点,但是比较复杂,处理不当会在两极出现明显的折皱。立方体盒状的天空体则相对简单一些,但是当离立方体盒边缘近的时候天空会有明显的变形,解决的方法是采用质量较好的全景贴图,同时利用OpenGL 的雾化效果,在漫游时可以达到乱真的效果。本文采用的就是第一种方法,图2 是本文在绘制天空体时使用的5 幅纹理贴图。

图2 盒状天空体的纹理贴图

3.3 加入虚拟战场中的地物地貌特征

在虚拟场景中加入诸如树木、草地等地物地貌特征,可以大大增强虚拟战场场景的真实感。本文在虚拟战场场景中加入了300 棵树木。

目前在三维虚拟环境中构造的树木多采用以下三种形式:分形树、仿真树和Bill-board 树。分型树的形式占用系统资源较多,因而不宜在实时性要求较高的漫游场景中采用。仿真树通过多边形进行拼装,形成树冠及树干,然后再在相应的部分贴上纹理,这种形式实现比较简单,但是真实感不强。Bill-board 树则是将一棵树的图片作为纹理贴到矩形面片上,然后对图片中不是树结构的部分进行透视处理,并且保证纹理始终正对观察者,这样一个面就可以表现为一棵树,如图3 所示是采用这种技术处理后的树,就是本文采用的4 种不同的Bill-board 树。

图3 本文采用的4 种Bill-board 树

3.4 加入战斗实体模型

除了地形、地物地貌以外,在虚拟战场环境中还应该存在一些其他的三维实体对象,如表示各种军事设施的实体以及在较高细节层次时的作战实体,如坦克、汽车、推土机、飞机等。实体建模有两种方法,一种是利用OpenGL 中的绘制API 函数,绘制简单的几何体,然后通过组合来建立模型,图4 就是虚拟战场中利用这种方式建立的雷达实体。另一种方法是通过专业的三维建模软件,如3DS MAX 建立好模型,然后通过OpenGL 函数加载到虚拟战场场景中,图5 就是利用这种方式建立的推土机模型、直升飞机模型。

除了在虚拟战场中增加以上三维实体模型以增强虚拟战场真实感外,在虚拟战场中加入模拟的士兵人物也是必不可少的一项重要内容,利用OpenGL 载入MD2 文件,可以实现栩栩如生的战斗人员,增强了虚拟战场的沉浸感。图6 是虚拟战场中的士兵人物。

图6 战场中的虚拟士兵

3.5 虚拟战场场景中的漫游控制

虚拟战场场景中分布地域很广,并有很多战斗实体和地物地貌,视点就象摄像机的镜头,他的位置、方向和角度以及变焦镜头的变化,都将影响观察者所看到的虚拟战场的场景。视点变换的模式有很多种,如绝对模式、跟踪模式、级联模式、罗盘模式等[7-8]。

在绝对模式下,视点的位置和旋转均由手工操作改变或程序预先设定;跟踪模式中视点旋转角度由被附着的实体决定,而位置可以进行人为的调整; 级联模式中视点位置由被附着的实体决定,当确定了视点相对实体的位置后,视点就随着实体运动[9];罗盘模式中视点的位置和指向都由被附着的实体决定,视点随着实体的运动而运动,二者的相对距离可以事先确定。由此看以看出,这4 种视点变换模式的主要区别在于视点的位置和旋转是由谁控制的问题,绝对模式下完全由操作人员决定,而罗盘模式下完全由实体决定,其他两种由操作人员和附着实体共同决定。

关于场景的漫游,OpenGL 函数库中有一个专门的函数,本文利用了这个函数gluLookAt( eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz)来实现漫游功能。

4 碰撞检测算法应用

4.1 碰撞检测算法的原理

碰撞检测问题是基于这样一个事实:两个不可穿透的对象不能共享相同的空间区域,其目的是发现碰撞并报告,即检查两个物体是否发生干涉[10]。

碰撞检测算法大致可分为两类:空间分割法和层次包围盒方法。这两种方法的目的都是为了尽可能减少需要进行相交测试的对象对或基本几何元素对的数目[11]。空间分割法的基本原理是将整个虚拟空间划分成等体积的小的单元格,然后只对占据了同一单元格或相邻单元格的几何对象进行相交测试,这样大大减少了需要相交测试的对象数目。空间分割法比较适用于类似物体在障碍物之间飞行这样的虚拟场合。

层次包围盒方法的基本思想是用体积稍大且特性简单的几何体( 称为包围盒)来近似地代替复杂的几何对象,并通过构造树状层次结构逐渐逼近对象的几何特性。进行重叠测试时只需对包围盒重叠的部分进行进一步的相交测试,从而可以大大减少参与相交测试的包围盒的数目,提高碰撞检测的效率。到目前为止,用于碰撞检测的包围盒主要有包围球、坐标轴的轴向包围盒( AABB)、带方向包围盒( OBB)、散方向多面体k-DOP、固定方向凸包FDH 等。

在实际应用中我们可以结合空间分割法和层次包围盒方法同时使用,对于大的空间或区间首先用空间分割法进行划分,排除不可能相交的测试对,对于在同一单元格内或相邻的几何对象进行测试时使用再使用层次包围盒方法,进一步减少测试对,从而提高膨胀检测的效率,尤其在实时性要求比较高的虚拟战场环境中,这种途径的优点更加突出。

4.2 碰撞检测算法在虚拟战场中的应用

在本文中碰撞检测主要针对两种碰撞情况。一是主观点( 漫游者)与树木、3D 模型实体的碰撞绕行;二是子弹在飞行过程中击中目标产生的爆炸的过程。

碰撞绕行算法:zhangai( )的入口参数是上一步视点的位置,进入zhangai( )后,用当前视点位置( X,Y)和所有对象的位置( X,Y)进行比较,即障碍检测。如果两者的位置差小于给定值就认为有碰撞发生,有碰撞时再分别看是在哪个分量上发生的碰撞,对发生碰撞的分量取上一步的值。这样就实现了碰撞的绕行。

子弹击中目标的算法很很多种,最简单的是直接以瞄准点为爆炸点,这种算法以屏幕定位为基准,无需碰撞检测,但是这样只能实现爆炸效果,不能模拟虚拟战场中战斗的真实效果,如击中目标后出现的状态变化,因此,此方法有一定的局限性。本文是基于运动物体碰撞检测的原理,子弹发射后,在飞行过程中随时检测是否与其他物体发生碰撞。当检测到子弹与其他任何物体发生碰撞时,子弹就会爆炸,这样更加真实,同时检测到与子弹发生碰撞的实体发生状态的变化,如士兵被子弹击中后应由活跃状态变为死亡状态,即有自由活动的实体变为固定状态的实体。子弹碰撞检测函数Hitexamina( float x,float y,float z),射击函数fire( )调用此函数,判断是否命中目标以决定子弹的爆炸。

5 结束语

虚拟现实技术是综合性极强的高新技术,被认为是仿真技术最热门的发展方向。利用虚拟现实技术建立虚拟战场仿真系统是部队未来训练、演习等的重要研究课题,它将军官战术训练拓展到模拟实战新的训练领域,较好地解决常规训练方法中存在的问题,能充分调动各级军官战术训练的积极性和深入研究战术思想的主动性。本文的研究对于部队深入开展未来虚拟作战仿真系统有一定借鉴意义。

[1]徐明亮,卢红星,王琬.OpenGL 游戏编程[M].北京:机械工业出版社,2008.

[2]Robert Short,Pamela Kiley,Rodney Ritter.2D Polygon Detection[R].Simulation Interoperability Workshop,2009.

[3]林继承,万旺根,周俊玮.等.基于三角形二叉树的实时大规模地形渲染算法[J].计算机工程,2009,35(2):268-270.

[4]李颖,陈业斌.基于四叉树的三维地形绘制算法[J].安徽工业大学学报:自然科学版,2008,25(1):80-82.

[5]彭海.三维地形可视化技术的研究与实现[D].武汉: 武汉理工大学,2010.

[6]David W.Seidel.Generating Terrain Based on Bitmap File[R].Simulation Interoperability Workshop,2010.

[7]M Pauline Baker,Robert J. Stein. BATTLEVIEW: TOURING A VIRTUAL BATTLEFIELD[D]. Illinois: University of Illinois,2009.

[8]马峰.基于OpenGL 的虚拟战场环境构建[D].大连:大连理工大学,2006.

[9]Judith Dahmann,Marnie Salisbury,Lashon Booker,et al.An Extension of DIS Virtual Simulation[R]. Standardsfortheinteroperation of Defense Simulations:22102,2004.

[10]边美玲,任建平.包围盒碰撞检测技术的研究[J].机械管理开发,2008,24(2):27-31.

[11]刘晓东,姚兰,邵付东,等.一种基于混合层次包围盒的快速碰撞检测算法[J]. 西安交通大学学报,2007,41(2):141-145.

猜你喜欢
碰撞检测视点漫游
基于动力学补偿的机器人电机力矩误差碰撞检测
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
霹雳漫游堂
基于Virtools的虚拟灭火系统碰撞检测设计与实现
NASA漫游记
环境视点
让你每天一元钱,物超所值——《今日视点—2014精萃》序
边走边看:漫游海底 梦想成真
寻找新的视点