首页 > 解决方案 > 4x4 矩阵 (3D) 动画

问题描述

我目前正在尝试将 3D 对象从一个变换矩阵设置为另一个。我知道“原点”和“目标”变换矩阵 (4x4),并希望在“中间”矩阵之间获取“进度”变量 [0, 1] 的动画。

例如,我可以从:

1  0  0  0
0  1  0  0
0  0  1  0
0  0  0  1

至:

0.70711  -0.70711  0  0
0.70711   0.70711  0  0
      0         0  1  0
      0         0  0  1

这是一个简单的 45 度旋转,例如,我希望能够找到0.5级数的中间矩阵。当然,这里很简单,而且我完全知道如何为它设置动画,但我的算法能够处理更复杂的变换矩阵(包含平移、多轴旋转和缩放)。

我找到了一些文章:

甚至搜索使用这种算法动画css变换属性的chrome和firefox源代码:https ://github.com/chromium/chromium/blob/2ca8c5037021c9d2ecc00b787d58a31ed8fc8bcb/cc/animation/transform_operation.cc

可悲的是,我无法找到明确的解决方案。没有作者提供适当的算法(提供的算法非常抽象,没有指定他们的“子功能/算法”)。只有极少数的论文可用。最后,他们没有提供任何示例(从一个矩阵到另一个矩阵),因此几乎不可能验证他们的方法。

你们中是否有人已经面临这个问题并实施了解决方案?如果有人知道答案,清晰的示例或伪代码将是完美的。

无论如何,提前感谢您的所有帮助。

标签: animationmatrix3d

解决方案


所以,我终于找到了一个解决方案:w3c 提供了一种插入变换矩阵的算法:https ://www.w3.org/TR/css-transforms-2/#matrix-interpolation

它分三个步骤工作:

  • 分解:在平移、缩放、倾斜、透视和旋转(四元数)向量中拆分矩阵
  • 插值:从以前的向量创建插值的新向量
  • 重组:从这些向量组成一个变换矩阵

它可能不是更快,但它可以完成工作。


推荐阅读