项目符号 |刚体翻译正确但印刷位置错误
Bullet | Rigidbody translated correctly but printed position is wrong
我有一个非常简单的问题,但我看不出我做错了什么。
我有一个从位置开始的刚体: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) 中获得刚体的正确位置。谢谢!
在你的情况下,如果你想获得 btRigidBody
的正确位置,你应该调用:
btPhys->getWorldTransform().getOrigin();
您正在呼叫
btPhys->getMotionState()->getWorldTransform(trans);
,但 MotionState
尚未更新。所有 MotionStates 都在模拟步骤中更新。
我有一个非常简单的问题,但我看不出我做错了什么。
我有一个从位置开始的刚体: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) 中获得刚体的正确位置。谢谢!
在你的情况下,如果你想获得 btRigidBody
的正确位置,你应该调用:
btPhys->getWorldTransform().getOrigin();
您正在呼叫
btPhys->getMotionState()->getWorldTransform(trans);
,但 MotionState
尚未更新。所有 MotionStates 都在模拟步骤中更新。