Math 求两个矩阵之间的变换矩阵

Math 求两个矩阵之间的变换矩阵,math,three.js,matrix-multiplication,Math,Three.js,Matrix Multiplication,我试图找到两个矩阵之间的变换矩阵,这样我可以保存它,然后将它应用到一个对象上,这样它将保持相对于另一个对象的位置和旋转。使用此建议的解决方案: 我使用了以下代码: var aInv1 = new THREE.Matrix4().getInverse(firstObject.matrix.clone()); var aMat2 = new THREE.Matrix4().copy(secondObject.matrix.clone()); var aTrans = new THREE.Matri

我试图找到两个矩阵之间的变换矩阵,这样我可以保存它,然后将它应用到一个对象上,这样它将保持相对于另一个对象的位置和旋转。使用此建议的解决方案:

我使用了以下代码:

var aInv1 = new THREE.Matrix4().getInverse(firstObject.matrix.clone());
var aMat2 = new THREE.Matrix4().copy(secondObject.matrix.clone());
var aTrans = new THREE.Matrix4().multiplyMatrices(aMat2, aInv1);
矩阵元素的值为:

firstObject.matrix.elements = [ 
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, -358.483421667927, 1
]

secondObject.matrix.elements = [
    0.5137532240102918, -0.844167465362402, 0.15309773101731067, 0,
    0.8579380075617532, 0.5055071032079361, -0.091678480502733, 0,
    -1.3877787807814457e-17, 0.1784484772418605, 0.983949257314655, 0,
    94.64320536824728, 6.92473686011361, -372.0695450875709, 1
]
我希望转换矩阵aka variable
aTrans
元素将是
94.64320536824728,6.92473686011361,13.58
,因为这些是位置上的差异,但我得到
94.64320536824728,70.89555757320696,-19.34004857797802,1

aTrans.matrix.elements = [
    0.5137532240102918, -0.844167465362402, 0.15309773101731067, 0,
    0.8579380075617532, 0.5055071032079361, -0.091678480502733, 0,
    -1.3877787807814457e-17, 0.1784484772418605, 0.983949257314655, 0,
    94.64320536824728, 70.89555757320696, -19.340048577797802, 1
]

对于这种差异,我希望有任何有教育意义的解释,或者其他解决这个问题的方法。

你不能简单地添加翻译,因为第二个矩阵可能会影响第一个矩阵的有效翻译

让我们考虑一个简单的例子——假设两个矩阵只包含一个旋转和平移:

M = R + T
R
对应于左上角的3x3子矩阵,
T
是最后一列的前3个元素。具有任意3D点的乘法规则
p

M * p = R * p + T
其中两项建议:

M2 * M1 * p = R2 * R1 * p + R2 * T1 + T2

M2*M1
的最后一列是
R2*T1+T2
,而不是简单的
T1+T2
,即
M1
p
施加的有效翻译是
R2*T1
,而不是简单的
T1

只需向通过math/matrix标记到达这里的任何人指出,three.js使用列主矩阵(在本例中这并不重要)。你能计算
aTrans.aMat1吗?
?你认为(p)是什么?@t表示你想用矩阵变换的任何点。