使用插值OpenGL ArcBall旋转和动画?

时间:2012-01-04 07:53:16

标签: opengl 3d geometry interpolation quaternions

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

我认为在阅读本文后我必须选择Quaternions - 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使用旋转矩阵,我如何插入状态1和状态2之间的旋转?

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

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

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

另见Interpolating between rotation matrices

答案 1 :(得分:2)

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

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

使用Matrix,插值不是那么好,几年前我一直在努力解决这个问题,而且我记得最终我决定使用四元数。所以我不能就此提出建议,抱歉。