【问题标题】:OpenGL rotation?OpenGL旋转?
【发布时间】:2011-04-22 19:50:39
【问题描述】:

我正在编写一个基于 openGL 和 qt 的简单应用程序。它创建原始(例如三角形),用户可以使用三个旋转框之一来更改其旋转 (坐标:x、y、z)。问题是局部坐标系。它在 Y 轴和 Z 轴上发生变化并正常工作,但在 X 轴上却不能正常工作。局部轴 X 始终与全局轴 X 重合。因此,当我将图形围绕 Y 旋转 90' 时,轴 X 和 Z 是平行的,因为局部 Z 发生了变化(因为我预期)并且本地 X 没有改变。这是我的paintGL() 函数的片段:

  • glRotatef(rot[0], 1.0, 0, 0);
  • glRotatef(rot[1], 0, 1.0, 0);
  • glRotatef(rot[2], 0, 0, 1.0);

【问题讨论】:

  • 您将需要发布所有相关代码。事实上,上面的代码很好,但你可能会遇到 Gimbal 锁。 rot[0]、rot[1]、rot[2]的值是多少?
  • 你的代码是什么样的?局部坐标轴变换问题可以通过 glPushMatrix() 和 glPopMatrix() 方法解决。查看 OpenGL SuperBible 第 4 版的第 3 章。

标签: opengl


【解决方案1】:

您应该使用旋转矩阵来指定旋转轴和旋转角度: http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle

通常,使用欧拉角执行旋转不是一个好主意:您将遇到的下一个问题是 180 度。翻转某些角度星座。这个问题被广泛称为gimbal lock 欧拉角。

【讨论】:

猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2019-05-03
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多