100 likes | 310 Views
3DVRI. osg与物理引擎的结合. osg与物理引擎的结合. 我们进行虚拟仿真时,为了表现真实世界的物理特型,老的做 法是使用一些简单的数学公式,而仿真的结果缺乏真实性,并且对 于仿真程序的编写也有很大的复杂性与难度,目前很多老式的仿真 系统已被淘汰,新一代仿真系统很多都是基于真实的物理模型进行 仿真,这样就导致了一些物理引擎被广泛引入到仿真系统中。目前 比较常用的物体引擎有PhysX,ODE,Newton等等。我们以Newton 引擎为例向大家介绍一下与OSG结合的应用。 首先我们先看一些Newton引擎中的一些范例。. Newton与osg的结合过程.
E N D
3DVRI osg与物理引擎的结合
osg与物理引擎的结合 我们进行虚拟仿真时,为了表现真实世界的物理特型,老的做 法是使用一些简单的数学公式,而仿真的结果缺乏真实性,并且对 于仿真程序的编写也有很大的复杂性与难度,目前很多老式的仿真 系统已被淘汰,新一代仿真系统很多都是基于真实的物理模型进行 仿真,这样就导致了一些物理引擎被广泛引入到仿真系统中。目前 比较常用的物体引擎有PhysX,ODE,Newton等等。我们以Newton 引擎为例向大家介绍一下与OSG结合的应用。 首先我们先看一些Newton引擎中的一些范例。
Newton与osg的结合过程 下面我给大家介绍下Newton与osg的结合过程。 1)当我们初始化完我们的图形环境后,我们需要进行物理世界的初始化工作: 1,创建一个物理世界。 _p_world = NewtonCreate( physicsAlloc, physicsFree ); 2, 设置物理世界更新的最小帧数率 NewtonSetMinimumFrameRate( _p_world, 1.0f / 60.0f );
Newton与osg的结合过程 3,设置物理世界的计算精度 NewtonSetSolverModel( _p_world, 0 ) // 0: exact, 1 adaptive, n linear. NewtonSetFrictionModel( _p_world, 0 )// 0: exact, 1 adaptive 4,设置物理世界中预定义的材质属性 setupMaterials() 5,设置物理世界的尺寸 NewtonSetWorldSize (_p_world, bmin, bmax)
Newton与osg的结合过程 2)载入我们三维图形场景的静态物理实体或刚体。 BuildStaticGeometry (...) NewtonBodySetMaterialGroupID(m_worldBody, LevelID) 3)设置我们图形场景中的动态物理实体或刚体。 1,创建动态几何体的刚体。 对于规则图形,Newton中有特定的创建函数如box, 球体,圆锥体等等。 对于不规则图形,我们首先要获得几何体的所有顶点坐标, 然后根据几何顶点进行创建。 NewtonCreateConvexHull (...)
Newton与osg的结合过程 2,设置动态集合体的相关属性,如材质,质量,重心,位置, 刚体关联数据等等。 NewtonBodySetMaterialGroupID (...) NewtonBodySetMassMatrix (...) NewtonBodySetMatrix (...) NewtonBodySetUserData (...)
Newton与osg的结合过程 3,设置几何体的回调函数,如作用力回调,空间位置回调, 销毁时回调等等,通过这些回调函数我们可以输入或获得物理 计算的结果,实现图形系统与物理引擎的交互。 NewtonBodySetDestructorCallback (...) NewtonBodySetTransformCallback (...) NewtonBodySetForceAndTorqueCallback (...)
Newton与osg的结合过程 4)对动态物体施加作用力。 NewtonBodySetForce( p_body, &force._v[ 0 ] ) 5)进行物理更新,一般放在图形的渲染循环中。 NewtonUpdate(_p_world, 1.0f / 60.0f) 这样一个简单的物体世界就创建完成。