在我的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之间的旋转?
有什么建议吗?
答案 0 :(得分:4)
使用四元数(SLERP)。旋转矩阵和欧拉角都不适合插值。
答案 1 :(得分:2)
在内部使用Matrix或Quaternion进行旋转表示。使用滚动/俯仰/偏航,您可以在理论上插入角度,但这不会每次都有效 - 请阅读Gimbal lock。
使用四元数,旋转插值很简单 - 只需插入单个坐标(就像使用r / p / y角度一样),必要时进行标准化。然后,您必须调整渲染函数以使用四元数(但我认为您已经这样做了,因为您自己提到了四元数)。
使用Matrix,插值不是那么好,几年前我一直在努力解决这个问题,而且我记得最终我决定使用四元数。所以我不能就此提出建议,抱歉。