收藏 分销(赏)

物理引擎和图形引擎介绍.doc

上传人:xrp****65 文档编号:6146182 上传时间:2024-11-28 格式:DOC 页数:17 大小:5.72MB
下载 相关 举报
物理引擎和图形引擎介绍.doc_第1页
第1页 / 共17页
物理引擎和图形引擎介绍.doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述
物理引擎和图形引擎介绍 2015-2 1 引言[1] [2] 物理引擎是一个仿真物理系统的软件,它使虚拟世界中的物体运动符合真实世界的物理定律,对虚拟现实中的物体进行运动学、动力学、其它物理学仿真等。在虚拟现实系统开发中,开发人员可以使用物理引擎与渲染引擎相结合的方法,不但可以缩短开发周期,而且可以产生良好的效果。随着虚拟现实技术的发展,物理引擎已广泛应用在游戏、动画、电影、工程仿真和军事模拟等诸多领域。 在以往的游戏中,例如一位士兵往一个油桶旁边扔一个手雷,手雷爆炸,引起了油桶的爆炸。不过这个过程显得相当死板,不管是把手雷丢在油桶的左边还是右边,油桶都只会按照设计者预先设计好的脚本方式爆炸,不会有区别。加入物理引擎后,它完全突破了以往按预定脚本执行的方式,在游戏中的物体都遵守物理定律来运行,这样手雷扔在油桶的左边或右边都会产生不同的爆炸效果,石块会朝不同的角度飞溅起来,烟雾也会慢慢冒起来,使游戏更加富有真实感。 通常物理引擎可以分成两类:高精度物理引擎和实时物理引擎。高精度物理引擎要求计算出精度很高的物理对象,通常用于工程仿真或用电脑制作电影中的动画。在视频游戏中,物理引擎通过简化其运算复杂度,降低其精度来满足游戏中对实时性的需求,以增加动画的真实感。 物理引擎使用对象属性(速度、加速度、动量、冲量、碰撞、力、力矩、阻尼、扭矩或弹性等)来模拟刚体的运动、旋转和碰撞等行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许模拟复杂的机械装置,像球形关节、轮子、气缸或者铰链等。有些还支持非刚性体的物理属性,如软体、流体等。 物理引擎只关心动力学微分方程的求解,而为了获得逼真的仿真环境,还需要图形引擎的配合。输入场景信息(包括物体的形状、物理参数和位置等),通过物理引擎计算出场景中所有物体的形状和位置,再由图形引擎渲染它们,最终将它们显示在计算机上。 目前常用的物理引擎有Havok、PhysX、Bullet、ODE、Newton、Vortex和TOKAMAK等,常用的图形引擎有OGRE、OSG、OpenGVS和Vtree等。本文将介绍物理引擎Havok、PhysX、Bullet、ODE和图形引擎OGRE、OSG的背景、功能、用法及其在工程仿真领域中的应用,以及物理引擎和图形引擎联合应用的方法。 2 物理引擎 2.1 Havok[1][3] Havok公司成立于1998年,总部位于爱尔兰首都都柏林。该公司在2000年游戏开发者大会上发布了Havok 1.0 ,在2003年的GDC上发布了2.0版本,在2007年3月发布4.5版本,最新版本为5.5。引擎基于C/C++语言而成。2007年9月,Intel宣布收购Havok之后不久,Intel宣布Havok引擎开放源代码并允许游戏开发人员免费使用。  自从Havok引擎发布以来,它已经被应用到数百个游戏之中。最早,使用Havok引擎的游戏大多数都是第一人称射击类别,但随着游戏开发的复杂度与规模越来越大,其他类型的游戏也想要有更加真实的物理表现,有越来越多的其他类型的游戏采用Havok引擎。应用Havok的著名游戏有:《暗黑破坏神III》、《星际争霸II》、《半条命2》、《刺客信条:兄弟会》、《马克思·佩恩2》、《凯恩与林奇:死人》、《凯恩与林奇2:伏天》、《荣誉勋章:太平洋突袭》、《斩除妖魔》、《帝国时代III》、《极度恐慌》、《细胞分裂:混沌法则》、《光环2》、《光环3》、《大乱斗Smash Brothers X》以及《上古卷轴IV:湮没》等。  使用Havok的软件有3D Mark06、3DMark Vantage、3ds Max、Adobe Atmosphere和Adobe Shockwave等。 Havok具有以下主要功能: ● 碰撞检测(包括连续的物理体) ● MOPP技术(大碰撞网格的简洁表达) ● 动力学和约束的求解 ● 车辆动力学 ● 数据序列和布景工具支持 ● 内置诊断反馈虚拟调试器 Havok注重在仿真和游戏中对现实世界物理行为的模拟,提供了大量的应用程序编程接口(API),用于刚体建模、碰撞检测和实时动力学计算等。利用该引擎,可快速建立虚拟三维物理世界,以及物理世界中的物理实体,并向物理实体添加物理属性,完成仿真系统的实时计算,并检测计算结果。 “帧”是仿真系统中的单幅画面,两个连续帧之间的时间间隔称为帧时间。Havok物理引擎的工作流程就是在上一帧渲染完毕之后,以及下一帧渲染开始之前的帧时间内,将外部设备的输入信号转化为物理世界中具有物理属性的实体的受力,根据实体间的约束信息,进行碰撞检测以及活动实体的受力分析,求出加速度和角加速度等,最后对时间进行积分求出实体在下一帧中的位置和姿态。求解完毕之后交付图形引擎渲染,并进入下一个计算过程。对于交互式仿真系统,物理引擎还要有接收外部设备的输入信号并转化为实体力和力矩的功能。Havok物理引擎的处理流程如下图所示。 在其官方网站:http:// www. SDK、样例、技术文档,以及支持Maya、3ds Max和Avid XSI等3D建模软件的格式转换工具等。 2.2 PhysX[1][3][4][9] PhysX物理运算引擎由五名年轻的技术人员开发,他们在2002年成立了Ageia公司,于2005年发布了NovodeX,后改名为PhysX。 2006年Ageia公司发布了第一张PhysX PPU(物理加速卡),称为PhysX 100 Series,设计为搭载128MB GDDR3显存,采用PCI接口。生产PhysX 100 Series的包括华硕和BFG,其中华硕的PhysX物理加速卡搭载了256MB GDDR3显存。后来,Ageia公司又开发了第二代PhysX物理加速卡,称为PhysX 200 Series,与第一代产品最大的不同在于采用了PCI-E插槽,增强了数据交换能力。 2008年Ageia公司被NVIDIA(英伟达)收购后,PhysX物理加速卡停止了开发,但NVIDIA在原基础上推出了NVIDIA PhysX物理加速,并将PhysX物理加速功能移植到NVIDIA GPU中。借助CUDA架构,NVIDIA重新编写了PhysX物理加速程序,将PhysX物理加速引擎从Ageia PPU移植到了NVIDIA GPU上,利用GPU强大的浮点计算能力和并行处理能力,加快了PhysX物理引擎的计算速度。  使用PhysX的著名游戏有:《虚幻竞技场3》、《幽灵行动2:尖峰战士》、《好战者(warmonger)》、《细胞因子》、《赌命战士》、《战争机器》、《Beowulf》、《 City of Villains Medal Of Honor: Airborne》、《 Bladestorm: The Hundred Years' War》等140多款经典游戏。 PhysX是一个模拟刚体动力学的物理引擎,支持速度、加速度、动量、冲量、碰撞等物理概念。PhysX的开发库支持跨平台,多线程,高速碰撞检测等特性,专门对汽车的物理模拟做了优化。可以实现软、固质体动力学、通用碰撞检测、有限元分析、流体动力学、关节铰链模拟、毛发模拟、布料模拟、自然模拟等。 PhysX具有以下主要功能: ● 大量平行物理体的体系结构 ● 高速GDDR3存储接口 ● 通用的连续碰撞检测 ● 物理的敏捷粒子技术 ● 复杂的对象物理系统 ● 可升级的地形逼真度 ● 动力学游戏构架 利用GPU超强的并行处理能力,PhysX使物理加速处理能力呈指数倍增长,将游戏、工程模拟等提升至一个全新的水平,呈现丰富多彩、身临其境的环境。其特色如下: ● 爆炸引起的烟尘和随之产生的碎片 ● 复杂、连贯的几何学计算使人物的动作和互动更加逼真 ● 布纹的编织和撕裂效果非常自然 ● 运动物体周围烟雾翻腾 所有的物理模拟都在场景(Scene)中进行,一个虚拟环境允许同时存在多个场景,场景各自进行模拟运算,通常之间的对象没有联系。场景中可包含角色、关节等多个对象,角色(Actor)为场景中参与运算具有形状、实体的对象,形状(Collision Shape)用于描述角色的外形,提供六种基本形状:盒子(Box) 、球体( Sphere ) 、胶囊( Cap sule ) 、凸状网格( Conv2exMesh) 、三角网格( TriangleMesh) 和平面( Plane ) ,用多个基本形状可以组成较复杂物体。实体(Body)用于描述角色的物理参数,比如密度、质量、重心、惯性张量等。两个角色可以通过关节( Joint)连接,常用的关节有固定关节( Fixed Joint) 、旋转关节(Revolute Joint) 、球状关节( Spherical Joint) 和棱柱关节等多种形式,可根据需要选择关节使物体的连接符合真实情景。此外场景中还可创建流体、布料、粒子等其他可描述现实世界的对象。 PhysX引擎提供了上述多种关节来实现多个角色的连接,其中,固定关节可以模拟铆接、焊接、螺钉固定等连接方式;旋转关节模拟铰接连接方式,可使两个角色围绕一条轴线发生转动,如合页、门柱;球状关节用来模拟肩关节、球铰等连接方式,可使两个角色围绕一个点发生自由转动;棱柱关节模拟滑动连接方式,可使两个角色沿一条轴线运动,如吸振器;此外还有圆柱关节、滑轮关节、点线关节、点面关节、六自由度关节等多种连接方式,开发人员可根据需要,将单个角色利用关节进行组合,实现人物、机器、汽车等复杂物体的模型创建。 场景中的角色对象分为静态角色( Static Actor) 、动态角色(Dynamic Actor)和运动角色(Kinematic Actor)。静态角色对象主要用于碰撞检测,必须有形状属性而无实体属性,静态角色一旦被创建,就不能对它进行任何操作。动态角色是符合物理学定律的普通刚体,比如移动的汽车、可推动的箱子等。运动角色是一种特殊的动态角色,不接受外力作用,只能由用户操作从一个位置移动到另一个位置。在场景中运动角色会与动态角色发生碰撞,而不会与静态角色发生作用。 在其官方网站: 2.3 Bullet[1][5][6] Bullet是一个开源的跨平台的物理模拟计算引擎,可免费用于包括PLAYSTATION 3,XBox 360,Wii PC,Linux,Mac OSX and iPhone平台的商业开发,而且Bullet也整合到了Maya和Blender 3D中。 大部分的物理引擎都是通过CPU完成物理模拟计算,目前仅有NVIDIA PhysX可以调用GPU完成物理模拟计算且将其实用化。GPU有着CPU无法比拟的并行计算和浮点计算能力,而复杂的物理模拟计算(例如流体模拟和柔性物体模拟)却十分依赖并行计算能力和浮点计算能力。在与AMD合作后,Bullet Physics物理引擎可以透过OpenCL或者Direct3D,使用GPU完成物理模拟计算,这也是AMD开放物理计划的内容之一。 用Bullet开发的游戏有《模拟城市(EA)》、《汽车总动员2》、《侠盗猎车4》等。使用Bullet物理模拟引擎制作的电影有《2012》、《全民超人》、《大侦探福尔摩斯》和《闪电狗》等。支持Bullet物理引擎的设计软件有Blender 3D、Cienma 4D、3Ds Max和Maya等。 Bullet具有以下主要功能: ● 各种形状的物体(刚体、软体) ● 离散的刚体碰撞检测 ● 铰链、点对点约束和扭曲锥形约束 ● 6自由度约束 Bullet主要组件的结构如下: Bullet中,根据物体的特性将它们分三种不同的物体类型: 1)动态的刚体拥有大小为正的质量,每个仿真帧都会更新自己的在世界中的变换。 2)不能移动,但可接受碰撞的刚体称为静态刚体,质量设为0。 3)在运动学上面的刚体,质量为0。使用运动学的刚体可以制作动画,但是这种刚体能够接受碰撞,只能对碰撞物体有作用,碰撞物体对运动学的刚体没有任何影响。 Bullet中刚体之间的位置和角度约束关系是使用关节进行实现,每种类型的关节约束在底层是使用动力学特性的约束方程,Bullet还提供对不同约束的solver(求解器)。 Bullet在碰撞检测方面包括射线和凸扫测试在内的离散和连续碰撞检测,可检测的碰撞物体形状包括凹凸网格以及所有的基本形状。在碰撞检测的初测阶段,Bullet提供了基于重叠包围盒的加速结构方法快速排除碰撞对,方法有三种:使用AABB层次包围体树、增量三维扫描和裁剪以及使用GPU图形硬件的快速均匀网格。 Bullet的特性还包括快速和稳定的刚体动力约束和求解、动态车辆、人物控制和滑动器、铰链、普通的6自由度和针对碎布木偶的圆锥和扭曲约束。软体动力学方面可用于布料、绳子和双向变容的刚体,包括约束支持。 在其官方网站:http://bulletphysics.org /可以免费下载Bullet的有关资源。 2.4 ODE[1][7][10][11] ODE (Open Dynamic Engine) 是一个免费的具有工业品质的刚体动力学库,一款优秀的开源物理引擎,由Russell Smith在一些贡献者的帮助下开发而成的。它能很好地仿真现实环境中的可移动物体,它是快速、强健和可移植的。而且它有内建的碰撞检测系统。非常适于对飞行器、交通工具和虚拟现实中物体的运动进行模拟。 用ODE开发的游戏有Call of Juarez、Dead Island、Jumper Buggy、Mario Strikers Charged、Nail'd、Stunt Marble Racers、World of Goo、X-Moto、Overgrowth等。 ODE具有以下主要功能: ● 支持任意的质量分布的刚体 ● 支持球套、铰链、滑杆、特殊铰链、固定、角向和普通连接 ● 支持球体、盒子、胶囊、地面、射线和三角网格面碰撞图元。 ● 支持四叉树、哈希和简单碰撞空间 ● 支持硬接触和摩擦模型 ● 碰撞检测 ODE在模拟关节连接的刚体结构方面做得很好,例如模拟地面上的车辆的轮子通过关节被连接到底盘,有腿的生物的腿通过关节被连接到身体等等。ODE被设计用于交互式或实时模拟,尤其是对模拟虚拟现实环境中的可移动物体做得特别好。使用者在模拟环境中可以完全自由地改变系统的结构。 ODE具有一个内建的碰撞检测系统,该系统通过空间(Spaces)的概念实现潜在的相交物体的快速识别。对于硬接触,每当两个实体碰撞时,一个特别的非穿透约束被使用。在许多其他的模拟器中是使用虚拟弹簧处理接触,这样做是很容易出错的。 ODE时间步采用两种方法:标准的大矩阵方法和较新的迭代快速时间步方法。接触模型和摩擦力模型是建立在由Baraff描述的DantzigLCP方法上,实现快速逼近的库伦摩擦力模型。ODE使用一个高度稳定的一阶积分器,所以模拟中的错误可以得到控制,这样被模拟的系统就不会没有理由的“崩溃”。ODE强调在物理准确运行中的高速性和稳定性,这也是它比其他物理引擎的优势所在。 在其官方网站:http:// www.ode.org/可以免费下载ode-0.13.tar.bz2软件等资源。 3 图形引擎 3.1 OGRE[4][8] OGRE(Object-Oriented Graphics Render Engine)是用C + +开发的面向对象且使用灵活的3D图形引擎,对底层Direct3D和OpenGL系统库的全部使用细节进行了抽象,并提供了基于现实世界对象的接口,使用少量代码就能构建一个完整的三维场景,使开发人员更方便、更直接地开发基于三维硬件设备的应用程序。 OGRE引擎采用可扩展的程序框架,拥有高效率和高度可配置的资源管理器,支持多种场景类型,支持高效的插件体系结构,采用高效的网格资料格式储存模型数据,并且具有清晰、整洁的设计以及全面的文档支持,支持Windows,Linux以及Mac OSX等平台。而且OGRE是一款开源引擎,更新迅速,功能日益强大,采用MIT授权,使用时不会产生授权费用,OGRE引擎在涉及到三维图形绘制的仿真、游戏等方面有着极为广泛的应用前景。 OGRE引擎的场景管理结构如下图所示,根节点(Root)是整个三维场景的入口点,用于配置系统内的其它对象,必须最先创建和最后释放。渲染系统(Render System)设置场景的渲染属性并执行渲染操作。场景管理器( Scene Manag2er)负责组织场景,生成并管理灯光、摄像机、场景节点、实体、材料等元素。灯光(Light)为场景提供照明,有点光源、聚光源和有向光源三种类型。摄像机(Camera)用来观察所创建的场景,通过视口可将渲染后场景输出到屏幕。实体( En2tity)为场景中的几何体,一般通过网格(Mesh)创建。材质(Material)为场景中几何体的表面属性,支持从多种格式的图片文件加载纹理( Texture) ,并可拥有足够多的纹理层,每层纹理支持各种渲染特效,支持动画纹理。场景管理器通过场景节点( Scene Node)来确定实体、摄像机、灯光等元素的位置和方向。OGRE场景组织原理是将场景划分成抽象的多个空间,这些空间还可以划分成多个子空间,每个空间由一个场景节点来管理,实体、灯光等场景元素本身并不负责与空间位置相关的行为,全部交给场景节点来做。OGRE将大量场景节点按照空间的划分层次组织成树状结构,从而完成对整个场景的有序组织。 在其官方网站:http://www.ogre3d.org/可以免费下载OGRE 1.8.1 Source和OGRE 1.8.1 SDK for Visual C++ 2010 (32-bit)等资源。 3.2 OSG [12-13] OSG(OpenSceneGraph)场景图形渲染引擎是一个开源的跨平台图形管理开发库,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能,被广泛应用于虚拟现实、虚拟仿真、地理信息系统(GIS)、动画、游戏、科学和工程可视化等领域。随着OSG 模块和第三方附加库的不断完善,OSG 已具备对高性能渲染、海量地形数据库、地理信息及多通道的支持。 OSG特性: 1)质量高。在程序架构和执行效率方面都有着较高的品质。 2)开源性。所有源代码都是遵循OSGPL开源协议发布的。 3)跨平台。支持的操作系统平台有Windows、UNIX、Linux、MacOSX、IRIX、Solaris、HP-UX、AIX和FreeBSD。 4)可扩展性。强大的扩展能力,支持对节点、渲染属性、回调以及交互事件的扩展,并且支持第三方插件扩展,目前引入的插件已有几十种。 三维场景数据的组织: 场景的基本单位是节点,包括组节点和叶节点。叶节点管理一个或多个可绘制体的信息,并可以通过它的接口函数对可绘制体的信息进行查询。 OSG渲染引擎采用一种自顶向下的、分层的树状结构(场景树)来实现空间数据的组织,这样大大提高了场景的渲染效率。地理要素场景树如下图所示。 在其官方网站:http://www.openscenegraph.org/可以免费下载OpenSceneGraph 3.2软件等资源。 4 应用框架[4] 物理引擎的功能是使模拟对象产生物理效果,最终将物理引擎生成的效果显示在计算机上。输入场景信息(包括物体的形状、物理参数和位置等),通过物理引擎计算出场景中所有物体的新的形状和位置,再由图形引擎将它们渲染后显示在计算机上。 以PhysX和OGRE为例介绍物理引擎与图形引擎联合应用的框架。框架采用OGRE图形引擎的初始化、输入处理、帧循环更新图形的流程,再将PhysX物理引擎的相关部分融入其中,其主要流程如下图所示。首先对OGRE引擎进行初始化,创建需要在三维场景中显示的对象、地形、灯光等元素,完成渲染之前的所有准备;然后进行PhysX引擎的初始化,建立物理环境设置相关参数;再根据OGRE场景中的几何体创建用于模拟计算的动态、静态或运动角色,将OGRE中的几何体和PhysX中的角色一一对应进行关联,并对各角色的位置、速度、受力等状态参数进行设定,完成模拟计算前的所有准备;之后创建帧监听器,进行帧循环更新图形显示,同时调用PhysX引擎中的运算函数,对场景中物体与物体之间的相互作用进行模拟运算。由于PhysX引擎的模拟计算线程是独立的,与OGRE帧循环线程分开,因此物理引擎的计算过程与图形引擎的显示渲染过程同时进行。根据物理引擎计算的结果,更新场景内物体的位置、方向、速度等参数,将更新后的参数传递给OGRE更新图形显示,循环进行下一步模拟计算。 5 应用实例 本章将介绍物理引擎Havok、PhysX、Bullet、ODE和图形引擎OGRE、OSG在工程仿真领域中被成功应用的六个例子。 1)王波兴等在“基于物理引擎的汽车起重机实时仿真[3]”中研究了Havok物理引擎在汽车起重机实时仿真中的应用。 提出了层次模型的汽车起重机模型组织方法。该模型按整车各部件之间的关系逐层分解,将独立的部件组织成树状结构,如下图所示。在层次模型的基础上,利用输入设备接口、Havok物理引擎和OGRE图形引擎实现了某型全路面多轴汽车起重机的实时驾驶和吊装仿真。 输入设备接口包括方向盘,油门踏板,刹车踏板,档位操纵杆,吊臂操纵手柄和吊钩操纵手柄。操作设备的输入通过传感器转化为计算机系统可以识别的数据。物理引擎中实体的受力来自于输入设备的信号,物理引擎的求解结果也需要专业图形引擎表现出来。 2)于佳民等在“PhysX物理引擎在航天员虚拟现实训练系统中的应用[14]”中研究了PhysX物理引擎在虚拟现实训练系统中的应用,仿真航天员和物体在太空失重状态下运动特性。 提出了一种基于PhysX物理引擎的仿真方法,建立了航天员虚拟现实训练系统架构:受训人员、人机交互设备、接口API 和物理引擎,见下图所示。利用PhysX 物理引擎结合数据手套和位置跟踪仪等人机交互设备建立了基于碰撞体的可驱动虚拟人体模型,并通过PhysX物体引擎实现了太空操作中人体与飞船及被操作物体之间的碰撞检测,完成了手部接触力计算及力反馈设备与PhysX接口。并对所建立的模型及方法进行了仿真验证。仿真结果表明,利用所建立的方法可有效仿真人体及物体运动,增强了虚拟现实训练系统的沉浸感和真实感。 3)苏柏华在“大型结构物吊装的虚拟现实系统[15]”中研究了Bullet物理引擎在大型结构物吊装的虚拟现实系统中的应用。 以汽车起重机和动态环境建模为基础,着重研究了两台起重机协同吊装仿真的数学和物理模型,建立了基于Bullet物理引擎的协同吊装仿真模型,此模型对起重机运行机构进行了划分,划分成为动力学模型和运动学模型,此种分析方法有一定的通用性,能够扩展到三台和三台以上的吊装作业情况;把双机协同的主臂臂头的滑轮组、起升钢丝绳、吊钩、平衡梁、设备等进行必要的抽象,使用关节进行约束建立动力学模型;引入了基于有限自动机的数学模型来控制复杂的起重机,提高了起重机状态控制的稳定性;建立了基于开源的OGRE图形渲染引擎的汽车起重机和吊装设备的模型结构树,以及静态和动态场景模型;开发了可维护、可扩展、可复用、灵活的三维吊装仿真系统软件,实现了交互式的实时仿真系统,提高了吊装方案制作的高效性和准确性。 4)段化鹏在“虚拟现实中物理引擎关键技术的研究与应用[16]”中研究了ODE物理引擎在巷道漫游系统中的应用。 建立了ODE物理引擎模拟的应用框架,如下图所示,其中对物体施加力及调用碰撞检测都是在循环过程中进行。利用3DS Maxs创建矿井虚拟场景三维模型,以OgreODE作为物理引擎进行碰撞检测及动力学模拟,实现了人物与地面工业建筑以及人物与巷道的漫游模拟。将关联的刚体用ODE的关节连接表示;人物用胶囊与球相连接的包围盒表示,并且施加力与力矩,实现人物的移动与旋转;在物体上加三角网格面线,人物与物体的碰撞用包围盒与三角网格面的碰撞检测。 OgreODE是由monster所写,它是ODE应用于OGRE的物理引擎开发包,实现了OGRE与ODE的融合,它还提供了两个预制的对象ragdoll和vehicle。 5)廖晋民等在“地形影响下驾驶模拟器机动行为仿真技术研究[17]”中研究了ODE物理引擎在车辆驾驶模拟器中的应用。 利用开源物理引擎ODE(Open Dynamic Engine)和开源场景图形引擎OSG(OpenSceneGraph),建立了一个逼真的虚拟驾驶环境,对车辆行为进行模拟,逼真地反映出车辆的爬坡、转弯等行为。 ODE是一个高性能的开源工业级刚体动力学模拟库,内建了采用硬碰撞方式的碰撞检测系统,防止了碰撞时传统现象的出现,并提供了多种高级关节类型,如下面的hinge和hinge 2关节示意图,十分适合于交通工具的运动模拟。 典型的物理空间的构建可以通过以下步骤完成: 1)创建一个动力学世界; 2)在动力学世界中创建各种刚体; 3)设定各个刚体的状态(位置等); 4)在动力学世界中创建关节; 5)联结关节到刚体上; 6)设定所有关节的参数; 7)按需要创建一个碰撞世界和一个碰撞几何体对象; 8)创建一个关节组来保存所有的接触关节; 9)循环 a)按需要给物体施加力或扭矩; b)按需要调整关节的参数; c)调用回调函数进行碰撞检测; d)为碰撞点创建相应的接触关节,并且将其添加到关节组中; e)执行一个模拟步骤; f)删除接触关节组中所有的接触关节; 10)销毁动力学和碰撞世界。 通过上述过程,就能够建立起一个具有物理属性的物理空间,并在其中建立一个车辆的物理模型,对车辆的各种行为进行模拟。 车辆在直线行驶时主要受到重力,地面支持力,车辆牵引力,空气阻力,坡度阻力和地面阻力。当车辆转弯时,除了在行驶方向上受到上述后四种力外,在其径向方向上还受到地面阻力和沿坡度阻力提供的向心力。文章考虑了坡度大小对地面阻力的影响、海拔对车辆牵引大小的影响,以及地面土质对地面阻力的影响。 由于ODE和OSG都是基于帧循环的,这就使得二者有结合起来的可能性。为了使场景图形引擎创建的图形模型具有物理引擎创建的物理模型的物理属性,需要创建物理世界和图形世界,使物理模型与图形模型一一对应,并且通过更新旋转矩阵实时同步的更新虚拟物体的姿态和方向,最后用物理引擎的计算结果驱动场景图形引擎进行绘制和渲染。具体流程如下图所示。 车辆的车身和车轮用hinge2 关节连接。这样就建立了一个车辆的物理模型。相应的就应该建立一个CVehicle类,对车辆的物理属性、地形影响因素和各种驾驶操作进行封装。 程序的基本结构是采用一个循环,利用物理模型不断更新图形模型的运动状态,达到二者运动的同步,不断更新每帧画面,产生连续运动画面。在每一帧中,车辆都会探测它所处的地方属于那一类地形,获得海拔高度、土质等外部影响因素,并据此对地面阻力因素、车辆最大速度等变量赋予相应的值,并带入到相关方程中,调整车辆的运动状态。 下面二图显示了车辆在草地上转弯和车辆爬坡的情景。 6)高嵩等在“基于OGRE和ODE的驾驶模拟系统的设计与实现[18]”中利用OGRE图形渲染引擎和ODE物理引擎, 设计并实现了一个跨平台的模拟汽车驾驶系统。 利用3DS MAX和Milkshape3D建模软件创建了虚拟场景和车辆模型,并转化为OGRE模型;实现了交通信号灯动态模拟,确定了路网的数字化方案;实现了虚拟场景中的智能车辆,增强驾驶环境的真实感;实现了3D音效系统,提高了系统的沉浸感。系统运行效果表明,通过系统实时产生的汽车行驶虚拟环境、3D音响效果和车辆运动仿真,使操作者具有较真实的视觉、听觉、触觉等驾车感受。 驾驶模拟器系统框架如下图所示。操作者在驾驶模拟器上操纵各操纵机构, 驾驶模拟器上分布的传感器实时地将各个操纵机构的状态传送给信号采集处理单元(该单元负责双向的A/ D, D/ A 和开关量的转换工作)。这些操作信号分为两类:一类是模拟量信号,包括油门开度、制动踏板位置、离合器位置、转向盘转角和驻车制动器位置;另一类是开关量信号,包括档位、点火、喇叭、雨刮、左转向、右转向、雾灯和远近灯等。这些数据通过计算机串口发给驾驶模拟器软件系统,软件系统通过计算得出虚拟车辆的新状态,并显示在终端上,同时系统按当前状态通过声效系统发出相应的声音。模拟器软件系统把新得到的虚拟车辆的发动机转速、车体线速度、水箱温度、油量表值通过串口发送至信号采集处理单元,使驱动仪表盘上各指针运动显示出相应刻度值。 驾驶模拟器系统软件结构如下图所示。 1)资源管理器从外部文件中载入系统需用的资源, 包括模型文件( . mesh )、骨骼动画文件( .skeleton)、粒子模板定义文件( . part icle)、材质定义文件( . material)和各种图像文件, 以备系统调用。 2)建立场景管理器, 负责管理场景文件。系统从场景文件中载入场景,这个场景文件是xml格式,记录着各个独立模型的相对位置,场景管理器按给定文件载入模型,驾驶模拟系统以Dot scene方式管理,建立起虚拟场景。 3)道路信息管理器从道路信息文件中读入道路信息。 4)车辆对象管理器从车辆定义文件中载入车辆,这个文件也是xml格式的, 包含了车辆各个关键部件的几何物理参数和外观模型。载入后场景按道路管理器指定值设置车辆初始位置。 5)OGRE帧监听器开始循环监听,读取串口、鼠标键盘和网络数据,并进行处理。 6)OGRE渲染引擎见渲染的结果显示在终端上。如果没有收到用户结束指令, 则进入下一个帧监听,否则结束渲染。 驾驶模拟系统实现了逼真的场景渲染, 并且能生动的模拟出汽车驾驶的各种状态。下图显示了汽车上坡和两车碰撞的效果图。 6 结论 本文介绍了物理引擎Havok、PhysX、Bullet、ODE和图形引擎OGRE、OSG的背景、功能、用法及其在工程仿真领域中的应用,以及物理引擎和图形引擎联合应用的方法。上述六个软件都是开源的,用户可以在其官方网站上免费下载它们的源程序及其相关资源。 在国际游戏领域中广泛应用的物理引擎的排名依次为Havok、PhysX、Bullet、ODE[1],但是,作者检索和分析了中国知网的有关论文,发现在国内工程仿真领域中应用最广泛的物理引擎恰是ODE和PhysX,远多于其它物理引擎,并且常常联合应用图形引擎OGRE,应用OGRE的远多于其它图形引擎。 工程仿真与游戏不同,不但要求实时、逼真,更要求精确模拟,所以它对物理引擎的要求更高,建立的物理模型要完全遵守物理定律,如运动学、动力学等。当物理引擎不能提供正确的物理模型时,需要加入合适的物理学方程。 PhysX物理引擎的最大优点是可以调用GPU进行物理模拟计算,充分利用GPU强大的并行和浮点计算能力,使得它可以进行复杂的物理模拟计算,例如流体模拟和柔性物体模拟等,并使游戏和工程仿真等实时、逼真和流畅。另一优点是提供了最多的关节连接,包括固定、旋转、球状、棱柱、圆柱、滑轮、点线、点面和六自由度等关节,可以模拟各种复杂物体的模型。PhysX的缺点是编程比较复杂,需耗费较多的人力和时间,对用户来说,需要配置性能更好、价格更高的显卡。 在国内工程仿真领域中应用最广泛的物理引擎ODE可以对刚体进行运动学、动力学仿真和碰撞等仿真,可以方便地与图形引擎OGRE联合应用,并且有OGRE与ODE相融合的软件OgreODE供免费使用,所以编程相对比较简单、方便,可以缩短开发周期。ODE的缺点是只能仿真刚体的运动,而不能仿真软体和流体等的运动。 与物理引擎联合应用最多的图形引擎OGRE可以方便地构建三维场景、对物体进行渲染,以及与物理引擎协同进行工程仿真。 文献[4]、[17]和[18]分别较详细地介绍了用PhysX与OGRE协同虚拟仿真;ODE与OSG协同对车辆驾驶模拟器在不同地形环境下机动行为的仿真,逼真地反映出车辆的爬坡、转弯等行为;ODE与OGRE协同对车辆驾驶模拟系统的仿真,通过系统实时产生的汽车行驶虚拟环境、3D音响效果和车辆运动仿真,使操作者具有较真实的视觉、听觉、触觉等驾车感受。它们对从事车辆运动仿真的开发者提供了极好的范例。 文献[19-21]详细地介绍了物理引擎的基本物理原理,可供想深入了解物理引擎原理的人员参考。 参考文献 [1] 物理引擎,。 [2] 胡海峰,杜海娟,物理引擎的研究与开发,福建电脑,2009,4。 [3] 王波兴、冯茂盛,基于物理引擎的汽车起重机实时仿真,计算机工程与设计,2011,32(5):1753-1758。 [4] 牛红攀,高勇,侯忠明,图形引擎与物理引擎结合的研究与实现,计算机仿真,2011.6, 28(6):299-303。 [5] Bullet Physics,。 [6] Bullet物理引擎中文文档,http://bulletphysics.org。 [7] ODE,。 [8] Mage小组,OGRE(O-O Graphics Rendering Engine) V0.01a使用指南,2003。 [9] 魏立新,浅谈物理引擎PhysX SDK的使用,电脑知识与技术,2009, 5(20):5561-5562。 [10] 有人, 陈定方,虚拟现实环境中的物理模拟及物理引擎应用的研究,湖北工业大学学报, 2008, 23(2):7-9。 [11] Russell Smith,Open Dynamics Engine v0.5 UserGuide,http://www.ode.org,2006。 [12] 项杰、靳媛媛、李爱光,OSG中三维场景构建的关键技术,地理空间信息,2012.2,10(1):43-45。 [13] Paul Martz著,王锐、钱学雷译,OpenSceneGraph快速入门指导。 [14] 于佳民、刘玉庆、周伯河,PhysX 物理引擎在航天员虚拟现实训练系统中的应用,计算机应用,2011年S1期。 [15] 苏柏华,大型结构物吊装的虚拟现实系统,大连理工大学硕士论文,2010。 [16] 段化鹏,虚拟现实中物理引擎关键技术的研究与应用,山东科技大学硕士论文,2010。 [17] 廖晋民、李锋、钟国虎,地形影响下驾驶模拟器机动行为仿真技术研究,系统仿真学报,2013.8,25(增刊):390-393。 [18] 高嵩、陈先桥和杨菊,基于OGRE和ODE的驾驶模拟系统的设计与实现,交通与计算机,2006,24(1):101-104。 [19] Bourg,D.M.,游戏开发物理学,电子工业出版社,2004.10。(有电子版) [20] Helmut Garstenauer,A Unified Framework for Rigid Body Dynamics。 [21] Kenny Erleben,Stable, Robust, and Versatile Multibody Dynamics Animation。 17
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服