animation - 四元数的二次插值 (SQUAD)

标签 animation graphics rotation quaternions

我在动画中有四个关键帧,f0、f1、f2、f3,我试图在 t = (f-f1)/(f2-f1 ).

我的问题是,我可以在关键帧之间进行二次插值来找到旋转吗?我想使用所有四个关键帧。我还希望它在关键帧之间是 C1 连续的。

我研究过 SQUAD 和 Catmull-Rom Splines,但我仍然有点犹豫要不要实现它们,因为我不确定这些公式到底应该是什么样子。 SQUAD 告诉我们如何在一系列旋转之间进行插值,我不确定如何将它应用于四个。提前致谢!

最佳答案

不幸的是,四元数不存在于线性空间中,因此它们之间的插值有点棘手,正如您已经发现的那样。

我假设您想使用加权平均值,就像您计算 3D 空间中的曲线一样。

首先,没有定义超过两个四元数的精确球面插值 ( SLERP )。这是因为他们的组合是用乘法描述的,他们的乘法是non-commutative (除其他原因外)。所以你将不得不使用一个近似的解决方案,就像所有其他动画软件一样:-)

SQUAD(又名 Shoemake 的 Quaternion curves )是一种可能性,甚至是更高级(更准确)的基于优化的 generalized quaternion interpolation .然而,在实践中,我总是使用 NLERP(归一化线性插值,例如描述 here ),如果插值四元数相当接近(大约 60 到 90 度的差异仍然很好),它会给出很好的结果,同时非常简单和快速。一篇带有 3D 矢量示例的不错的简单文章显示了它们之间的区别是 here .

就个人而言,我总是回到几何工具的 Quaternion Algebra and Calculus注释,对 CG 中四元数的理论和实践方面进行了极其简洁的描述。

并且不要忘记对映体,这是迄今为止实现四元数插值时最常见的问题:)

关于animation - 四元数的二次插值 (SQUAD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27111391/

相关文章:

java - getGraphics 和 paintComponent 的图形对象之间的区别

c++ - OpenGL 二维旋转

android - 围绕给定点 2D 沿圆运动

javascript - 如何使用 css3 为文本中的字母设置动画?

ios - 当 GMSMapView 移动时,如何为 NSLayoutConstraint 设置动画?

jquery - 使用 css3 动画加载网站

c# - 有没有简单的方法来制作 ScrollViewer "bouncy"?

ruby - 如何根据数据点制作螺旋星系图像?

user-interface - 是否有任何基本的即时模式 gui 教程?

iOS 在 Modal View Controller 旋转时旋转 View Controller