gpt4 book ai didi

c++ - 您如何控制 Bullet Physics 中的玩家角色?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:39 25 4
gpt4 key购买 nike

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

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

这是我用来设置 Controller 的代码:

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);

这是我用来访问 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() 为真)。

现在的问题是角色会发出一点点 Spark ,然后从静止的地板上掉下来。显然这不是故意的。这是因为缺乏刚体吗?如何整合它?

实际上,现在它只是正常下落,但随后慢慢沉入地板。

我已经把这条线移到了创建动态世界之后

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

现在是这样的:

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

如果相关的话,我还使用了从 blender 导入的 .bullet 文件。

问题出在项目符号文件上,该文件已被修复(碰撞盒不工作)。但是,我还是有心神不宁,偶尔上不去,一下子从高处跳下等问题。

最佳答案

我在这里对这个问题的回答告诉你什么对我有效,显然也对提出问题的人有效。

Avoid ground collision with Bullet

不幸的是,bullet 中的角色 Controller 实现非常“基础”。要获得好的角色 Controller ,您需要投入这么多。

关于c++ - 您如何控制 Bullet Physics 中的玩家角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18345710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com