1

我正在使用四元数在 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]);

有什么建议么?

4

1 回答 1

2

问题不在于您的四元数或 glRotate(),而是您计算旋转步距的地方。

可能您正在使用某种归一化,其中负角(例如-5)被“校正”为 0..359 范围内的值,因此它将变为 355,然后您的旋转从 5 执行到 355。

于 2011-12-08T11:46:08.307 回答