1

我有正确旋转对象的问题。我需要的是创建一条线(沿 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);

我应该如何沿线的轴添加滚动,以免改变线的结束位置?

4

0 回答 0