如何控制Bullet Physics中的玩家角色?

时间:2013-08-20 22:04:26

标签: c++ bulletphysics

我不确定你应该如何控制子弹中的玩家角色。我读过的方法是使用提供的btKinematicCharacterController。我还看到了从演示中使用btDynamicCharacterController的方法。但是,在手册中指出,运动控制器有几个突出的问题。这仍然是首选路径吗?如果是这样,是否有任何教程或文件?我发现的只是演示中的代码片段,以及使用Ogre的控制器,我没有使用。

如果这不是应该走的道路,那么有人指出我正确的解决方案。我是新手,想要一个简单明了的解决方案。我目前拥有的是btKinematicCharacterController的一部分。

这是我用来设置控制器的代码:

playerShape = new btCapsuleShape(0.25, 1);
ghostObject= new btPairCachingGhostObject();
ghostObject->setWorldTransform(btTransform(btQuaternion(0,0,0,1),btVector3(0,20,0)));
physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
ghostObject->setCollisionShape(playerShape);
ghostObject->setCollisionFlags(btCollisionObject::CF_CHARACTER_OBJECT);
controller = new btKinematicCharacterController(ghostObject,playerShape,0.5);
physics.getWorld()->addCollisionObject(ghostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);
physics.getWorld()->addAction(controller);

这是我用来访问控制器位置的代码:

trans = controller->getGhostObject()->getWorldTransform();
camPosition.z = trans.getOrigin().z();
camPosition.y = trans.getOrigin().y()+0.5;
camPosition.x = trans.getOrigin().x();

我控制它的方式是通过setWalkDirection()和jump()(如果canJump()为真)。

现在的问题是这个角色会稍微产生一些,然后通过静态地板掉落。显然这不是预期的。这是由于缺乏僵硬的身体吗?如何整合那个?

实际上,现在它只是应该下降,但随后慢慢沉入地板。

在创建动态世界之后,我已将此行移至正确

physics.getWorld()->getPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());

现在是这样的:

broadphase->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());

我也在使用从blender导入的.bullet文件,如果这是相关的。

问题出在子弹文件上,后来已经修复(碰撞盒不起作用)。然而,我仍然经历紧张,无法偶尔加强,瞬间从高处走高,以及其他问题。

1 个答案:

答案 0 :(得分:1)

我在这里对这个问题的回答告诉你什么对我有用,显然也对那些问过的人有用。

Avoid ground collision with Bullet

子弹中的角色控制器实现非常基本"不幸。 为了获得良好的角色控制者,你需要投入这么多。