物理引擎在视景仿真中的应用

2012-02-26 05:40孙岽博王润杰
兵器装备工程学报 2012年3期
关键词:视景碰撞检测刚体

孙岽博,王润杰

(空军航空大学军事仿真技术研究所,长春 130022)

随着图形渲染技术的迅速发展,对于视景仿真系统来讲,物理真实感的缺乏成为了非常显著的问题,严重影响了系统的沉浸性和交互性。问题的焦点是如何利用物理的方法为虚拟场景下的物体运动和物体间的交互进行建模,于是本文引入了一种开放源代码的物理引擎(open dynamics engine,ODE)来解决这个问题。ODE是一个模拟关节化刚体的工业级开源软件,具有高级的联结类型和碰撞检测整合系统,它功能全面、技术成熟而且平台独立,易于和C++API配合使用,非常适于对飞行器、交通工具和虚拟现实中物体的运动进行模拟[1]。

本文的目的是建立一个基于PC机的三维物理引擎,其主要用途是作为虚拟环境中研究刚体运动和碰撞的仿真平台。这个引擎既要实现物体的实体部分,又要运行并用图像显示出物体运动和碰撞的过程。有关的物理现象如:自由落体、碰撞或物体在某个表面的滚动滑动等。

1 开发过程

1.1 ODE 引擎原理

ODE的核心是经典力学的基本原理的算法包,是牛顿力学的C++程序实现。在ODE中,需要用其内部定义的对象来模拟现实中存在的物体,然后,对其进行控制和模仿来表达物理世界。ODE的对象主要包含世界 (dWord)、碰撞空间(dSpace)、刚体 (dBody)、几何体 (dGeom)、节点 (dJoint)、节点组(dJoint-Group)以及函数处理返回对象 (dWorldID、dBodyID),其中dWorld和dBody用于刚体动力学模拟,而dspace和dGcom用于碰撞检测。物理引擎的核心部分是碰撞检测,与其它许多仿真器采用虚拟弹簧的方式来处理接触不同,ODE内建的碰撞检测系统采用硬接触的方式,当2个刚体相撞时不会出现穿透的情况的,大大提高了模拟结果的真实感和正确性。

下面简单介绍ODE的一些概念[2]:

(1)世界是一个存储物体对象的容器。在简单的系统中,只需要建立一个世界对象,不同的世界对象之间不存在任何关联,不能互相影响。

(2)刚体即是在系统中主要操作的对象。刚体从模拟的角度说具有各种属性,有些属性随时间而变化,如物体参考点的位置、线速度、朝向和角速度;另一些属性不随时间变化,如物体质量、质心相对于参考点的位置和惯量矩阵。

(3)几何体是碰撞系统中的基本对象。几何体可以是独立的刚体,几何体分为可置位和不可置位的。可置位的几何体表现为一个刚体,它可以在更新变化时被改变。而不可置位的几何体则用来表达环境中静止不动的物体。

(4)整合是按时间模拟刚体系统的过程。每个整合步将模拟从当前时间前进一个给定的时间步长,并计算新时刻的物体状态。

(5)碰撞空间主要是用来简化和加快碰撞检测的一个对象,我们将几何体插入到碰撞空间中,由碰撞空间执行判断、筛选,然后再调用碰撞检测,得出检测结果。

1.2 ODE 模拟过程

典型的ODE模拟过程[3]:

①创建一个动力学世界。

②创建动力学世界中的刚体。

③设置所有刚体的状态。

④创建动力学世界中的关节。

⑤把关节与刚体连接。

⑥设置关节参数。

⑦创建碰撞世界(空间)和碰撞几何对象。

⑧创建关节组来容纳接触关节。

⑨循环:

a.把力施加于刚体。

b.调整关节参数。

c.调用碰撞检测。

d.对于每个碰撞点创建一个接触关节,并加入接触关节组里。

e.进行一步模拟。

f.清除接触关节组里的所有关节。

⑩删除动力学世界和碰撞世界。

1.3 设计程序代码

2 测试

整个系统是在Windows平台上用Visual C++2008编译实现的,系统的场景及添加的物理实体在OpenGL中创建,系统中用到的各种SDK均是开源的,具有良好的平台移植性。系统测试生成动力学世界和3种刚体,实现3种碰撞,如表1。

表1 碰撞检测组合

下面是实验的6幅截图,第1幅创建的动力学世界和刚体,第2幅图是包围盒中的刚体,第3幅到第6幅是刚体之间的碰撞效果。程序能够安全高效稳定的运行,图形显示正常流畅。物理引擎逼真的实现了场景渲染,能实时生动地模拟出箱子、圆柱体等刚体的坠落、滚动和碰撞,且碰撞的物体不会发生贯穿的现象,增强了视景仿真的真实感,提高了仿真世界物体之间的交互性,达到了初设目标。利用包围盒法进行刚体的碰撞检测,接触点不太精确,有时反弹的方向和速度不太合理,有待于进一步改进和完善。

3 结论与展望

简要介绍了ODE基本理论,然后结合程序代码分析了物理引擎ODE的结构框架、碰撞检测机制和物理仿真流程,并进行了仿真实验,结果表明在视景仿真中应用物理引擎有效增强了虚拟场景中物体的运动真实感和交互性。另外,物理引擎的应用,降低了视景仿真对计算机硬件的要求,代码便于移植,并留有扩展接口,使整个仿真系统实用性强、灵活性好。随着计算机处理速度的提高和虚拟现实技术的进步,人们对可视化仿真将提出更高的要求,物理引擎必然成为视景仿真领域的最受关注的课题而得到广泛的应用。

[1] 高嵩,陈先桥,杨菊.基于OGRE和ODE的驾驶模拟系统的设计与实现[J].交通与计算机 2006(1):101-104.

[2] 杨俊杰,臧淑英,姜美芳.虚拟现实中的物理引擎ODE与虚拟引擎OSG结合探讨[J].测绘与空间地理信息,2010(1):66-68.

[3] Brian Beckman.The physics of racing Singapore[J].World Scientific,1997:50 -210.

(责任编辑周江川)

猜你喜欢
视景碰撞检测刚体
基于动力学补偿的机器人电机力矩误差碰撞检测
重力式衬砌闸室墙的刚体极限平衡法分析
全新预测碰撞检测系统
虚拟现实技术在游戏设计中的应用及研究
某炮模拟训练系统中三维视景的设计与实现
基于BIM的铁路信号室外设备布置与碰撞检测方法
基于预测和双缓冲区的直升机视景仿真
车载冷发射系统多刚体动力学快速仿真研究
基于Virtools的虚拟灭火系统碰撞检测设计与实现
全回转拖轮运动建模与视景仿真