如何使用Ogre3D和BulletPhysics优化刚体碰撞

时间:2015-01-22 09:01:39

标签: bulletphysics ogre3d

我正与朋友一起开发一些游戏,使用Ogre3D和Bullet Physics。 我设法让我们的游戏角色移动(只需简单的跑步和转弯)。

我想我可以通过这个类来实现'跳跃':

btCollisionWorld::ClosestRayResultCallback res(btFrom, btTo);.

但是,我的重大问题是碰撞优化。

我试过了:

  1. 添加100~500个刚体对象(在我们的游戏中将这些对象更改为mapobject之后)
  2. 一个staticplanecollision对象(地面)
  3. 一个角色刚体对象
  4. 刚刚在飞机上移动的FPS是60~80 = ok。但是当我的角色与任何其他刚体对象发生碰撞时,FPS将降至7。

    我不知道解决这个问题。 我没有使用DynamicCharacterControllerKineticCharacterController。 字符由setLinearVelocity()rigidbody->getWorldTransform().setRotation(quat)函数

    控制

    更多信息:

    PhysicsManager::GetInstance()->getDynamicsWorld()->stepSimulation(evt.timeSinceLastFrame,8);
    

1 个答案:

答案 0 :(得分:0)

我以前遇到过这个问题,我不知道你的情况是否如此,但我们正在实施Damned(游戏),当我们模拟厨房时,我们将炉灶的网格用作碰撞对象(btDbvtTriangleMeshShape),每当角色靠近火炉时,FPS都会熄火......

解决方案是为每个炉子使用简单的碰撞形状(比如带有几个盒子的btCompound),并且FPS问题消失了:)

希望您的问题类似于此,以便通过降低您正在使用的碰撞形状的复杂性来解决它。

如果不是这样,请告诉我你处理角色时运行的代码(强烈建议使用KinematicCharacterController,更推荐从Bullet转到PhysX; D)。

最佳。