在OpenGL中旋转0
我使用四元数来旋转OpenGL中的对象,但我遇到了一个问题,当我从5度旋转到-5度(穿过一个单位平面)时,我看到我的模型“长路”。 也就是说,它旋转整个350度,从5到-5而不是飞机上的10度。 这种情况发生在每个轴旋转时,任何时候我都会“旋转”0度,而我不确定如何修复它。
我的代码看起来像这样,滚动,俯仰和偏航表示我物体旋转的欧拉角:
quaternion[0] = cos(pitch/2)*cos(yaw/2)*cos(roll/2) + sin(pitch/2)*sin(yaw/2)*sin(roll/2);
quaternion[1] = sin(pitch/2)*cos(yaw/2)*cos(roll/2) - cos(pitch/2)*sin(yaw/2)*sin(roll/2);
quaternion[2] = cos(pitch/2)*sin(yaw/2)*cos(roll/2) + sin(pitch/2)*cos(yaw/2)*sin(roll/2);
quaternion[3] = cos(pitch/2)*cos(yaw/2)*sin(roll/2) - sin(pitch/2)*sin(yaw/2)*cos(roll/2);
glLoadIdentity();
glPushMatrix();
glRotatef((float) (2.0f * acos(quaternion[0]) * 180.0f / PI), quaternion[1], quaternion[2], quaternion[3]);
有什么建议么?
问题不在于你的四元数或glRotate(),它是你计算旋转步距的地方。
可能您正在使用某种类型的归一化,其中-5
这样的负角度会被“修正”为0到359之间的一个值,因此它将变成355,然后您的旋转将从5变为355。
上一篇: Rotating across 0 in OpenGL
下一篇: Should Quaternion based 3D Cameras accumulate Quaternions or Euler angles?