PhysX中的基本概念:
当前的物理引擎主要还是针对刚体的模拟,所以主要总结刚体部分。
PhysX中的概念主要有:
Shape: 描述物体的形状。其常用实例有Primary, ConvexShape, TriangleMeshShape等。
Body: 描述物体的速度,阻力。(Linear quantity, Angular quantity), 对于静态Actor(如地面),其Body属性无效(为NULL)。
Actor: 描述物体的质量,密度(如果物体的形状给定,则不用指定质量 ,质量将通过密度和shape指定的体积计算出来),位置等属性,并最终代表的物体在物理世界中的对象,其创建需要制定相应Shape和body属性。
PhysX的基本用法流程:
1. 创建PhysX SDK.
2. 创建PhysX Scene
3. 在场景中创建各种Actor
4. 每帧执行物理模拟计算。
5. 程序退出时回收资源
PhysX中的时间:
等同于渲染中的祯,物理模拟也有一个每帧的概念--"Simulation is done one time step at a time"。在实时模拟中,我们必须设置模拟的时间片步进以便和渲染达到同步效果。PhysX时间步进主要通过以下两个函数进行控制和实现。
其中第二个函数决定了时间片步进的策略。而第一个函数在使用是只是相当于往“时间池”中灌水,但是模拟时每步前进的时间由第二个函数控制(例如如果设置为定常步进,则每次模拟所用的 delta time是固定的,当然这时PhysX会在每帧中尽量进行多次模拟计算,以便接近第一个函数设置的时间)。 一般来说使用使用较短 的定常 时间步进能得到较好的模拟稳定性。
PhysX推荐的配置是: “The recommended time stepping method for a typical application is fixed time steps where maxTimestep is an exact multiple of elapsedTime and elapsedTime is a constant. ”即,使用定常步长,并且第一个函数的参数每帧都指定一个固定值。
PhysX与Ogre3D的结合:
主要有两种方法, 转载自这篇文章
1. 将Physx的NxActor的userData指针指向Ogre的SceneNode:
该方法适用于场景简单的应用。
2. 建立一个SceneNode和NxActor的对应表:
对于复杂的场景,这种低耦合的方式应该更好。