2

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

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

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

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

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

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

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

动画分n步完成。

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

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

有什么建议么 ?

4

2 回答 2

4

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

请参阅此处的 45:05 (David Sachs,Google 技术讲座)

另见旋转矩阵之间的插值

于 2012-01-04T08:43:23.770 回答
2

在内部使用 Matrix 或 Quaternion 进行旋转表示。使用滚动/俯仰/偏航,您可以在理论上插入角度,但这不会每次都有效 - 请阅读Gimbal lock

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

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

于 2012-01-04T08:18:23.247 回答