我有一个非常简单的问题,但看不到我在做什么错。

我的刚体从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)中获得刚体的正确位置。谢谢!

最佳答案

对于您的情况,如果要获取btRigidBody的正确位置,应致电:

btPhys->getWorldTransform().getOrigin();


你在打电话

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


而是MotionState尚未更新。在仿真步骤中将更新所有MotionState。

关于c++ - 项目符号刚体翻译正确但打印位置错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32467276/

10-14 09:55