日期:2023-01-24 阅读量:0次 所属栏目:软件技术
针对目前在航海模拟器中缺少对船舶碰撞响应的三维仿真,提出在航海模拟器中基于开源场景图形(OpenSceneGraph, OSG)渲染引擎开发的三维视景中加入Bullet物理引擎的技术方案.根据刚体动力学、接触与碰撞动力学和能量守恒定律,基于Bullet刚体碰撞响应模型,建立船舶三维碰撞动力学模型;运用Projected GaussSeidel迭代算法,得到碰撞后船舶实时的六自由度位置姿态参数;根据碰撞检测阶段获取的碰撞点位置参数,实时绘制划痕并添加爆炸特效.该方案已成功应用于航海模拟器视景系统中,渲染效果良好.
关键词:
航海模拟器; 三维视景系统; 碰撞响应; 开源场景图形(OSG); Bullet物理引擎
中图分类号: U666.158
文献标志码: A
0引言
随着国际航运业和现代造船技术的不断发展,船舶大型化、高速化趋势明显,通航密度也越来越大,通航安全问题备受瞩目.为提高海上航行安全,降低海事事故发生率,通常运用航海模拟器对船员进行培训和评估.国际海事组织发布的《STCW公约》马尼拉修正案对航海模拟器提出更高的设备要求,完善航海模拟器的功能迫在眉睫.碰撞检测和碰撞响应是航海模拟器的关键技术之一,目前的模拟系统对碰撞后的船舶往往只做简单的停船处理,碰撞响应视景真实感欠缺.若能有效解决船舶碰撞响应的真实感问题,则可进一步完善航海模拟器的性能,提高船员应急情况下的模拟操纵能力.针对该问题,笔者提出将开源场景图形(OpenSceneGraph,OSG)三维渲染引擎与Bullet物理引擎结合的技术方案,研究三维碰撞响应算法,最终将该方案成功应用于航海模拟器的视景系统中.
1技术支持
1.1OSG
OSG扩展功能突出,跨平台性和可移植性好,且具备良好的场景管理和图形渲染优化功能,能实时高效绘制并控制三维模型,支持多类型外接设备.目前,国内多数航海模拟器的三维视景系统是基于OSG开发的.
1.2Bullet
物理引擎通过为刚性或柔性物体赋予真实物理属性的方式,计算物体的运动、旋转和碰撞反应.世界三大物理引擎分别为Havok,PhysX和Bullet,其中Bullet是一个开源的、易扩展的动力学类库,可有效解决虚拟环境中可移动物体的碰撞问题,且运算快速稳定.Bullet可作为一个碰撞检测库单独使用,开发者可根据需求自行设计仿真过程.
1.3OSG与Bullet的结合
1.3.1OSG与Bullet结合的可能性
OSG和Bullet均使用四元数和三维向量表示物体的方位,用三角网格表示不规则几何体,并根据时间帧循环运行,这为Bullet与OSG的结合提供可能.OSG主要用于管理场景结构并渲染三维视景,其碰撞检测功能具有一定的局限性,无法满足用户的精确碰撞检测要求;Bullet赋予模型物理属性,提供多种碰撞检测方法,并根据动力学原理作出碰撞响应.将OSG与Bullet结合,可弥补二者自身存在的不足,提高三维虚拟场景的真实感,符合物理世界的规律.
1.3.2OSG与Bullet结合的过程
OSG与Bullet结合的过程:①初始化物理世界,即对碰撞配置对象(btDefaultCollisionConfiguration)、碰撞调度器对象(btCollisionDispatcher)、解算器(btConstraintSolver)、碰撞粗测阶段(BroadPhase)、动态世界(btDynamicsWorld)进行初始化;②定义碰撞检测,为进行碰撞检测的物体构建合适的碰撞几何体(btCollisionShape);③创建虚拟场景,设置物理世界中各物体的初始速度、位置、质量、摩擦力等物理参数;④设置回调,包括设置作用力和空间位置的回调,获取物理计算结果;⑤物理更新,根据回调获取的物体的位置姿态等参数,实时更新物体的空间位置.
4.2碰撞划痕特效模拟
根据碰撞检测阶段获取的碰撞接触点的位置参数,将碰撞接触点依次连接,可实时绘制船舶碰撞的划痕,即:从连续碰撞的第2个碰撞接触点p2开始绘制划痕;将当前获取的碰撞接触点pi与前一个碰撞接触点pi-1相连,形成线段pi-1pi;每产生一个新的碰撞接触点,便绘制一条线段,直到下一次碰撞检测无碰撞接触点时停止本条划痕的绘制.若某时刻又产生新的碰撞接触点,则开始一条新划痕的绘制.碰撞划痕特效见图6(a).
每条划痕实际上是连接一次连续碰撞过程中的所有碰撞接触点p1,p2,…,pi-1,pi,…,pn的折线段.为使折线段更加光滑,可适当提高碰撞检测的频率.
4.3碰撞爆炸特效模拟
碰撞爆炸特效的产生主要借助OSG的粒子系统osgParticle实现,在每次连续碰撞的第1个碰撞接触点位置模拟爆炸的效果.碰撞特效主要运用OSG粒子系统中ParticleEffect中的ExplosionEffect模拟爆炸效果,FireEffect模拟火的燃烧效果,ExplosionDebrisEffect模拟爆炸后的四散颗粒效果,以及SmokeEffect模拟爆炸后的烟雾效果.碰撞爆炸特效见图6(b).
5结束语
将OSG三维渲染引擎与Bullet物理引擎结合以解决航海模拟器中船舶碰撞响应问题.根据刚体动力学相关理论和能量守恒定律,以Bullet的刚体碰撞响应原理为基础,引入船舶碰撞动力学模型,运用Projected GaussSeidel迭代法,根据船舶碰撞前的速度、角速度等物理参数,算出碰撞后的相应参数,进一步推算碰撞后船舶的位置姿态,并进行实时更新.此外,还根据碰撞检测阶段求得的碰撞点的位置,实时绘制划痕并加入爆炸特效,并实时更新这些特效的位置和姿态,使其随船舶的运动位置和姿态的改变而改变. 该方案创造性地在航海模拟器的视景系统中加入物理引擎Bullet,不仅可完善碰撞响应的仿真效果,而且符合物理规律,能提高视景的真实感和逼真度.
参考文献:
[1]关克平, 江靖楠, 王静波. 基于OSG的船撞桥碰撞检测的研究[J]. 中国航海, 2014, 37(2): 4953.
[2]施朝健, 陈锦标, 胡勤友. 船舶操纵模拟器开发和应用的全球协作[J]. 上海海事大学学报, 2007, 28(1): 16.
[3]於文. 基于OSG的航海模拟器视景系统关键技术研究[D]. 厦门: 集美大学, 2012.
. Int J Technol & Desig
n Education, 2012, 22(3): 311327.
[5]张靖. 虚拟现实技术在吊装仿真与方案制定中的应用[D]. 大连: 大连理工大学, 2009.
[6]MA Liang, MA Ruina, CHABLAT Damien, et al. Human arm simulation for interactive constrained environment design[J]. Int J Interactive Design & Manufacturing, 2013, 7(1): 2736.
[7]有人, 陈定方. 虚拟现实环境中的物理模拟及物理引擎应用的研究[J]. 湖北工业大学学报, 2008, 23(2): 79,22.
[8]李少华, 马金博, 张立栋. 碰撞检测技术在颗粒混合中的应用[J]. 软件导刊, 2013, 12(3): 7779.
[9]胡伟超. 基于物理引擎建模方法的沥青混凝土等效导热系数研究[D]. 哈尔滨: 哈尔滨工业大学, 2012.