本地矩阵: 一个对象的本地矩阵.materix包含了该对象的旋转、平移和缩放变换,本地矩阵是平移矩阵、缩放矩阵和旋转矩阵的乘积。
世界矩阵:一个对象的世界矩阵.matrixWorld是该对象本地矩阵及其所有所有祖宗对象本地矩阵的乘积,或者每一个对象的世界矩阵是对象本地矩阵和父对象的世界矩阵的乘积。
最近写项目的时候碰到了两个函数难以理解矩阵的compose、decompose
.compose ( position : Vector3, quaternion : Quaternion, scale : Vector3 ) : this
设置将该对象位置 position,四元数quaternion 和 缩放scale 组合变换的矩阵。
.decompose ( position : Vector3, quaternion : Quaternion, scale : Vector3 ) : this
将矩阵分解到给定的平移position ,旋转 quaternion,缩放scale分量中。
可能上述的描述你在看了之后和我一样很难理解,那可以继续看看下面。
这里compose主要将模型对象的平移象位置 position,四元数quaternion 和 缩放scale转化为矩阵对象
而decompose是将模型对象的矩阵对象中的position,四元数quaternion 和 缩放scale,给到目标对象中
decompose 主要可以用来获取模型的世界坐标位置,如:
const worldObj = new THREE.Object3D();
localObj.matrixWorld.decompose(worldObj.position, worldObj.quaternion, worldObj.scale);
当然也可以使用threejs的Api--getWorldPosition进行获取
var worldPosition = new THREE.Vector3();
mesh.getWorldPosition(worldPosition);
console.log('世界坐标',worldPosition);
console.log('本地坐标',mesh.position);