Bullet Physics - 如何根据另一个物体移动物体?

时间:2015-06-18 17:01:46

标签: c++ bulletphysics

我正在使用Bullet Physics引擎。我目前有一个可以移动和旋转的平台(btRigidBody)。在这个平台上,我想放置4个立方体(每个角落都有。现在,当平台平移或旋转时,我希望立方体留在这些角落。基本上,我希望它们相对于平台的位置/方向保持不变

这是我尝试过的:

btTransform transform;
m_platform->getMotionState()->getWorldTransform(transform);
btQuaternion platformRotation = transform.getRotation();
btVector3 platformOrigin = transform.getOrigin();
btMatrix3x3 platformBasis = transform.getBasis();

for (int i = 0; i < CubeEnvironment::OBJECT_COUNT; ++i)
{
    btTransform objTransform;
    m_bodies[i]->getMotionState()->getWorldTransform(objTransform);

    objTransform.setRotation(platformRotation);

    m_bodies[i]->getMotionState()->setWorldTransform(objTransform);
}

此处,m_platform是平台,m_bodies由4个多维数据集组成。使用此代码,立方体会与平台一起旋转,但仅在其本地框架中旋转,这意味着它们的原点保持在同一位置。

我还对get/setOriginget/setBasis进行了一些实验,但没有帮助。

我应该做些什么?

1 个答案:

答案 0 :(得分:0)

我建议在立方体和平台之间使用某种形式的约束,根据您的需要,您可以修复平台上的立方体(btfixedconstraint),或者您可以围绕轴移动它(bthingeconstraint)或其他人。

您可以在http://bulletphysics.org/mediawiki-1.5.8/index.php/Constraints

上找到完整列表