在OpenGL中旋转到0
Rotating across 0 in OpenGL
我使用四元数在OpenGL中旋转对象,但我遇到了一个问题,当我从5度旋转到-5度(穿过单位平面)时,我看到我的模型旋转"很长一段路"。也就是说,它从5到-5旋转了整整350度,而不是在平面上旋转10度。这种情况发生在每个轴的旋转中,每当我通过旋转0度来"传递go"时,我不确定如何修复它。
我的代码看起来像这样,其中滚动,俯仰和偏航代表我的对象旋转的欧拉角:
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。
相关文章:
- 发布旋转矩阵(openGL/glm)
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何在 openGL 中围绕全局轴旋转模型?
- 如何在 opengl 中仅旋转特定对象而不影响其他对象?
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 鼠标单击 OpenGL 时无法围绕其自己的中心旋转对象
- OpenGL:在那个方向上旋转和移动
- 在 OpenGL 中旋转一个正方形
- 如何使用gluLookAt围绕OpenGL中的点旋转相机视图
- 如何在 opengl 中旋转矢量?
- 现代 OpenGL 多维数据集旋转未按预期工作
- 在使用PI上的OpenGL ES绘制之前,如何旋转纹理
- C++ OpenGL 如何从 quaterion 获取旋转 x,y,z
- Opengl 旋转不起作用
- 绕摄影机旋转opengl c++/设置旋转中心
- 使用 GLM 围绕点旋转 OpenGL
- 第一人称相机,旋转OPENGL
- 立方体旋转- OpenGL