Rom*_*man 3 transformation matrix three.js
我想在创建对象时为对象设置一个变换矩阵,然后通过位置、旋转和缩放来控制它,但是虽然更改矩阵确实改变了世界空间中的对象,但它的位置参数仍然保持为 0, 0, 0。
let mesh = new THREE.Mesh(
new THREE.BoxGeometry(),
new THREE.MeshPhongMaterial({color:0xf15728})
)
this.scene.add(mesh)
let pos = new THREE.Vector3().setFromMatrixPosition(m)
mesh.matrixAutoUpdate = false
mesh.matrix.copy(m)
// ***************//
mesh.updateMatrix()
// ***************//
console.log("mesh.position", mesh.position)
console.log("pos", pos)
Run Code Online (Sandbox Code Playgroud)
pos这是和的值的输出mesh.position
更新对象matrix不会更新其位置或旋转字段,默认情况下, Three.js 将根据渲染前的 、 和 值更新矩阵position(rotation您scale已通过设置为 false 禁用了这些值matrixAutoUpdate)。
如果您想从矩阵初始化对象转换,您可以使用Matrix4.decompose函数,如下所示:
// m is the initial local matrix transform
m.decompose(
mesh.position,
mesh.quaternion,
mesh.scale,
);
Run Code Online (Sandbox Code Playgroud)
另外,如果保留,则每当、或值发生更改时mesh.matrixAutoUpdate = false,您都必须在渲染之前调用。mesh.updateMatrix()positionrotationscale
您可以在此处阅读有关矩阵变换如何工作的更多信息。