我正在使用四元数在 OpenGL 中旋转对象,但是我遇到了一个问题,当我从 5 度旋转到 -5 度(穿过单位平面)时,我看到我的模型旋转“很长一段路”。也就是说,它从 5 到 -5 旋转了整个 350 度,而不是整个平面的 10 度。每当我通过旋转 0 度“通过”时,围绕每个轴的旋转都会发生这种情况,我不知道如何修复它。
我的代码如下所示,其中 roll、pitch 和 yaw 代表我的对象旋转的欧拉角:
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]);
有什么建议么?