cla*_*amp 16 geometry interpolation matrix
我将物体的位置存储在4by4变换矩阵中的3d空间中.现在,为了将对象从存储在矩阵A中的位置移动到存储在矩阵B中的位置,我想插入它们.
所以我只是通过插入矩阵中的16个值中的每一个来做到这一点,或者我是否必须特别注意某些事情?
谢谢!
让我重新表述你的问题:
您需要在 R0 和 R1 之间进行插值。
并提议这样做:
Ri = aR0 + (1-a)R1
正如维克多在他/她的回答中提到的那样,它不会很好用:你会得到歪斜和体积变形。
在数学上(在 3d 几何上下文中),加法没有多大意义:添加两个平移矩阵意味着什么?
一个既定的解决方案是插入为:
Ri = (R1*(inverse(R0)))^a*R0
我们将 R^a 定义为一个操作,它使我们围绕向量 [kx, ky, kz] 旋转 a*theta 度。
所以当 a = 0 时,Ri = R0;当 a = 1 时,Ri = R1。这使得基于乘法的插值在 3d 几何环境中更加自然。
现在是如何表示操作 R^a 的难点。事实证明,使用R 的四元数表示允许我们表示操作 R^a。基于 Ken Shoemake 的纸动画旋转与四元数曲线
仅对矩阵值进行插值可能不会给您带来想要的结果,除非您只进行非常简单的转换(例如平移或缩放)。
我认为有一些方法可以将矩阵分解为平移、旋转、缩放等,然后您可以构建基于这些参数进行插值的新矩阵。
您也可以只进行前后变换,然后对对象的顶点进行 lerp。这也可能不会给您想要的结果。