代码之家  ›  专栏  ›  技术社区  ›  Jaitnium

项目符号|刚体平移正确,但打印位置错误

  •  0
  • Jaitnium  · 技术社区  · 9 年前

    我有一个很简单的问题,但我看不出我做错了什么。

    我有一个刚体,从位置开始: 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 回复  |  直到 8 年前
        1
  •  1
  •   Estiny    9 年前

    在您的情况下,如果您想获得 btRigidBody 您应该拨打:

    btPhys->getWorldTransform().getOrigin();
    

    你在打电话

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

    而是 MotionState 尚未更新。在模拟步骤中更新所有MotionState。