我有正确旋转对象的问题。我需要的是创建一条线(沿 x 轴)抓取到该点,以便当您水平、垂直或这两种运动的组合移动它时,线的末端会环绕球面的一部分和开始线保持静止。
我正在使用子弹物理引擎,它提供像四元数这样的对象和函数来设置它们的值,例如使用欧拉角或只创建 3 个四元数,填充它们的字段(W、X、Y、Z),最后将它们相乘,得到最终的四元数.
我尝试使用欧拉角,当我使用 EulerYXZ 设置(仅 Yaw 和 Roll)时效果很好。但是当我添加音高(应该沿线轴的方向滚动)时,对象会旋转,但它不再环绕球体。可能我的额外旋转包含了一些错位,我不知道如何弄清楚。
首先,我创建了代表偏航和滚动的四元数,如下所示:
btQuaternion qx,qy,qz,
qx.setW(1);
qx.setX(0);
qx.setY(0);
qx.setZ(0);
qy.setW( btCos( -x*DEGREE/2.0f )); //x is the example angle value, * DEGREE provides radians
qy.setX(0);
qy.setY(btSin( -x*DEGREE/2.0f ));
qy.setZ(0);
qz.setW(btCos(( y+inclined )*DEGREE/2.0f ));
qz.setX(0);
qz.setY(0);
qz.setZ( btSin( (y+inclined)*DEGREE/2.0f ));
现在我可以通过将它们相乘得到最终的四元数:
TransformStick.setRotation(qx*qy*qz);
我应该如何沿线的轴添加滚动,以免改变线的结束位置?