我知道它破坏了物理规律,但是尽管通常有实际的理由来改变游戏中身体的位置和方向,但大多数物理模拟库赢得了“允许它,所以Bullet物理学也不会。在Bullet Physics中动态改变btRigidBody的位置/方向
所以,我会很感激任何建议或评论这一个。顺便提一下,让我们想起那些需要瞬间改变的远距传送技术。此外,更奇特的应用可能是惯性 - 例如,当用加速度计倾斜或旋转便携式设备时,使得物体相对于用户看起来是静态的。增强现实听起来应该不俗。
我知道它破坏了物理规律,但是尽管通常有实际的理由来改变游戏中身体的位置和方向,但大多数物理模拟库赢得了“允许它,所以Bullet物理学也不会。在Bullet Physics中动态改变btRigidBody的位置/方向
所以,我会很感激任何建议或评论这一个。顺便提一下,让我们想起那些需要瞬间改变的远距传送技术。此外,更奇特的应用可能是惯性 - 例如,当用加速度计倾斜或旋转便携式设备时,使得物体相对于用户看起来是静态的。增强现实听起来应该不俗。
假设我正确理解你的问题,我建议检查BulletDynamics/Character/btCharacterControllerInterface.h
和/或BulletDynamics/Dynamics/btActionInterface.h
。在执行角色移动时,人们常常想要“弯曲规则” - 例如实施传送,可以使用btCharacterControllerInterface
中的void warp(const btVector3& origin)
方法。
就个人而言,我有最好的运气直接从btActionInterface
继承,保存一个指向btGhostObject
,我可以更新,并从那里执行我的逻辑,但情况因人而异。
注意:如果您是只是想要更改位置和方向,您应该可以调用void setWorldTransform(const btTransform& worldTrans)
方法btRigidBody
。
setWorldTransform是否也改变了身体的位置和旋转角度,还是只改变了“皮肤”或图形表示? – rraallvv
实际上,对setWorldTransform的调用应该只更新物理部分 - 更新图形表示取决于您,虽然相当简单。 (: –