OpenGL圆弧球旋转和使用插值的动画?

OpenGL圆弧球旋转和使用插值的动画?,opengl,3d,geometry,interpolation,quaternions,Opengl,3d,Geometry,Interpolation,Quaternions,在我的OpenGL应用程序中,我需要使用ArcBall旋转来使用鼠标旋转对象 读了这篇文章后,我重新认识到我必须使用四元数- 我在这里找到了一个易于使用的实现- 但我的问题是,我还需要在保存的两种状态之间设置对象的动画。 就是- 状态(1)=(位置X1,位置Y1,位置Z1,旋转1) 状态(2)=(位置X2、位置Y2、位置Z2、旋转2) *这些“旋转”是旋转矩阵 动画分n步完成 类似于此视频中显示的内容- 如果我对三个轴(滚动、俯仰、偏航)使用3个独立的角度,我可以很容易地插值这些角度。 但是,由

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

读了这篇文章后,我重新认识到我必须使用四元数-

我在这里找到了一个易于使用的实现-

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

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

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

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

动画分n步完成

类似于此视频中显示的内容-

如果我对三个轴(滚动、俯仰、偏航)使用3个独立的角度,我可以很容易地插值这些角度。 但是,由于ArcBall使用旋转矩阵,如何在状态1和状态2之间插值旋转


有什么建议吗?

在内部使用矩阵或四元数作为旋转表示。通过横摇/俯仰/偏航,理论上可以对角度进行插值,但这不会每次都起作用-请继续阅读

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

对于矩阵,插值不是很好,几年前我一直在努力解决这个问题,我所记得的是,我最终决定使用四元数。对不起,我不能提供这方面的建议。

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

见45:05


另请参见

矩阵出现问题的原因是,笛卡尔坐标系的插值旋转不是线性独立的。你需要把它移到它所在的坐标系中。与圆柱体坐标一样,圆柱体轴是旋转轴(球面坐标也是如此,但圆柱体的计算成本较低)。