【问题标题】:Change btRigidBody's position/orientation on-the-fly in Bullet Physics在 Bullet Physics 中即时更改 btRigidBody 的位置/方向
【发布时间】:2012-11-21 18:11:27
【问题描述】:

我知道它违反了物理定律,但尽管在游戏中瞬时改变身体的位置和方向通常有实际原因,但大多数物理模拟库都不允许这样做,所以 Bullet Physics 也不会。

因此,如果您对此提出任何建议或评论,我将不胜感激。

顺便说一句,我想到了需要即时更改的传送。还有一个更奇特的应用可能是惯性——例如,当倾斜或旋转带有加速度计的便携式设备时,物体相对于用户看起来是静态的。增强现实不应该听起来俗气。

【问题讨论】:

    标签: rotation position bulletphysics on-the-fly


    【解决方案1】:

    假设我正确理解了您的问题,我建议您查看BulletDynamics/Character/btCharacterControllerInterface.h 和/或BulletDynamics/Dynamics/btActionInterface.h。在实现角色移动时,通常想要“改变规则”——例如,实现传送,可以使用btCharacterControllerInterface 中的void warp(const btVector3& origin) 方法。

    就个人而言,我很幸运直接从btActionInterface 继承,存储了一个指向btGhostObject 的指针,我可以从那里更新和实现我的逻辑,但是YMMV。

    注意:如果您只是想要更改位置和方向,您应该可以为btRigidBody 调用void setWorldTransform(const btTransform& worldTrans) 方法。

    【讨论】:

    • setWorldTransform 是否也会改变物理身体的位置和旋转,还是只改变“皮肤”或图形表示?
    • 实际上,对 setWorldTransform 的调用应该只更新物理部分 - 更新图形表示由您决定,尽管操作相当简单。 (:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多