【问题标题】:OpenGL ArcBall rotation and animation using interpolation?OpenGL ArcBall 旋转和动画使用插值?
【发布时间】:2012-01-04 16:43:23
【问题描述】:

在我的 OpenGL 应用程序中,我需要使用 ArcBall 旋转来使用鼠标旋转对象。

阅读这篇文章后,我意识到我必须使用四元数 - http://www.gamedev.net/page/resources/_/technical/math-and-physics/quaternion-powers-r1095

我在这里找到了一个易于使用的实现 - http://www.codeproject.com/KB/openGL/virtualtrackball.aspx

但我的问题是我还需要在保存的两个状态之间为我的对象设置动画。 那就是——

State(1)= (位置 X1,位置 Y1,位置 Z1,旋转 1);

State(2)= (位置 X2,位置 Y2,位置 Z2, 旋转 2);

*这些“旋转”是旋转矩阵

并且动画是分n步完成的。

此视频中显示的内容 - http://www.youtube.com/watch?v=rrUCBOlJdt4

如果我对三个轴(滚动、俯仰、偏航)使用 3 个单独的角度,我可以轻松地插入角度。 但是,由于 ArcBall 使用旋转矩阵,我如何插入 State 1 和 State2 之间的旋转?

有什么建议吗?

【问题讨论】:

    标签: opengl 3d geometry interpolation quaternions


    【解决方案1】:

    使用四元数 (SLERP)。旋转矩阵和欧拉角都不适合插值。

    见 45:05 here (David Sachs, Google Tech Talk)

    另见Interpolating between rotation matrices

    【讨论】:

      【解决方案2】:

      在内部使用矩阵或四元数进行旋转表示。使用roll/pitch/yaw,理论上你可以对角度进行插值,但这并不是每次都能奏效——请阅读Gimbal lock

      使用四元数,旋转插值很容易 - 只需插值单个坐标(就像使用 r/p/y 角度一样),必要时进行归一化。然后,您必须调整渲染函数以使用四元数(但我假设您已经这样做了,因为您自己提到了四元数)。

      使用 Matrixes 插值不是很好,几年前我一直在努力解决它,我只记得我最终决定使用四元数。所以我不能就此提出建议,抱歉。

      【讨论】:

      • 您遇到矩阵问题的原因是,笛卡尔坐标系的插值旋转不是线性无关的。您需要将其移动到它所在的某个坐标系中。与圆柱坐标一样,圆柱轴是旋转轴(球坐标也是如此,但圆柱的计算成本较低)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多