子弹|刚体翻译正确但打印位置错误

时间:2015-09-08 21:09:26

标签: c++ bulletphysics

我有一个非常简单的问题,但我无法看清我做错了什么。

我有一个从pos开始的刚体: 0.0,3.0,0.0 。我应用翻译,-90度旋转,然后另一个翻译。刚体的最终位置应 2.0,1.0,0.0 ,但打印出的位置仍然 0.0,3.0,0.0。

我通过在有问题的刚体上方放置一些小立方体来执行碰撞测试。 奇怪的是,它们停在2.0,1.0,0.0之上,表明刚体被正确移动。

//Rigidbody in question
btRigidBody *btPhys;

//First transform
btPhys->translate(btVector3(0.0, -2.0, 0.0));

//Perform -90 degree rotation
btMatrix3x3 orn = btPhys->getWorldTransform().getBasis();
orn *= btMatrix3x3(btQuaternion( btVector3(0, 0, 1), btScalar(degreesToRads(-90))));
btPhys->getWorldTransform().setBasis(orn);

//Perform second transform
btPhys->translate(btVector3(2.0, 0.0, 0.0));

//Print out final position
btTransform trans;
btPhys->getMotionState()->getWorldTransform(trans);
float x, y, z;
x = trans.getOrigin().getX();
y = trans.getOrigin().getY();
z = trans.getOrigin().getZ();

printf("\n\nposition: %f %f %f\n\n", x, y, z);

基本上,我只是想从这段代码(2.0,1.0,0.0)中获得刚体的正确位置。谢谢!

1 个答案:

答案 0 :(得分:1)

在您的情况下,如果您想获得btRigidBody的正确位置,请致电:

btPhys->getWorldTransform().getOrigin();

您正在致电

btPhys->getMotionState()->getWorldTransform(trans);

相反,MotionState尚未更新。所有MotionStates都在模拟步骤中更新。