emi*_*hou 1 graphics animation rotation quaternions
我在动画中有四个关键帧,f0,f1,f2,f3,我试图在t =(f-f1)/(f2-f1)处插入位于f1和f2之间的帧f的旋转.
我的问题是,我可以在关键帧之间进行二次插值来找到旋转吗?我想使用所有四个关键帧.我也希望它能在关键帧中连续使用C1.
我已经调查的阵容,卡特莫尔-ROM样条曲线,但我还是有点犹豫,实现它们,因为我不知道确切的公式应该是什么样子.SQUAD讲述了如何在一系列旋转之间进行插值,我不确定如何将它应用到四个旋转中.提前致谢!
不幸的是,四元数并不存在于线性空间中,因此它们之间的插值有点棘手,正如您已经发现的那样.
我假设您想要使用加权平均值,就像在3D空间中计算曲线一样.
首先,没有定义超过两个四元数的精确球面插值(SLERP).这是因为它们的组合是使用乘法来描述的,并且它们的乘法是非交换的(除了其他原因).因此,您将不得不使用近似解决方案,如同其他所有动画软件:-)
SQUAD(又名Shoemake的四元数曲线)是一种可能性,甚至更高级(且更准确)的基于优化的广义四元数插值.然而,在实践中我总是使用NLERP(归一化线性插值,例如这里描述),如果插值四元数相当接近(约60到90度的差异仍然很好),这会产生很好的结果,同时非常简单和快速.一个很好的简单文章与3D矢量示例,显示了这些之间的差异在这里.
就个人而言,我总是回到几何工具的四元数代数和微积分注释,这些注释对CG中四元数的理论和实践方面都有非常简洁的描述.
并且不要忘记反对性,这是实现四元数插值时最常见的问题:)