旋转,使用四元数

我有正确旋转我的对象的问题。 我需要的是创建一条线(沿X轴)抓住该点,以便当您沿着水平,垂直或这两个移动的组合移动它时,线条的末端会围绕球体平面的一部分和起点的线保持静止。

我正在使用子弹物理引擎,它提供像四元数和函数这样的对象来设置它们的值,例如使用欧拉角或者只是创建3个四元数,填充它们的字段(W,X,Y,Z),最后将它们相乘,得到最终的四元数。

我试过使用欧拉角度,当我使用EulerYXZ设置(仅偏航和滚动)时,效果很好。 但是,当我添加音高(应该沿线的轴线方向滚动)时,物体会旋转,但它不会再循环球体。 也许我的额外轮换引入了一些错位,我不知道如何弄清楚。

首先,我创建了代表偏航和转动的四元数:

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);

我应该如何在线的轴上添加滚动以便不改变线的最终位置?

链接地址: http://www.djcxy.com/p/81781.html

上一篇: Rotation, using Quaternions

下一篇: Quaternion from Tait