【发布时间】:2018-08-31 18:40:12
【问题描述】:
我试图找到两个矩阵之间的变换矩阵,所以我可以保存它,然后将它应用到一个对象上,这样它将保持其相对于另一个对象的位置和旋转。使用这个建议的解决方案:
3d (THREE.js) : difference matrix
我使用了这个代码:
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
]
我希望转换矩阵又名变量aTrans 元素将是94.64320536824728, 6.92473686011361, 13.58,因为这些是位置的差异,但我得到94.64320536824728, 70.89555757320696, -19.340048577797802, 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
]
我会为这种差异提供任何有根据的解释,或者解决这个问题的其他方法。
【问题讨论】:
-
只是指出通过数学/矩阵标签到达这里的任何人,three.js 使用列优先矩阵(在这种情况下并不重要)。
-
你能计算
aTrans.aMat1吗?
标签: math three.js matrix-multiplication