Three.js 转换前重置矩阵
Three.js Reseting Matrix before Transformation
我想多次对 three.js
网格应用相同的矩阵变换,但我只想要第一次变换所描述的变换。在我重新应用变换之前,我怎样才能 "reset" 将网格的矩阵调整到它的变换前值?
我尝试了以下方法,但没有用
const identity = model.matrix.identity();
model.matrix = identity;
model.matrixWorld = identity;
model.updateMatrix();
model.updateMatrixWorld();
model.applyMatrix4(newMatrix);
编辑: 替换我的整个答案,因为我不知道 Object3D.applyMatrix4
更新了 position
/quaterion
/ scale
属性除了修改matrix
.
解决此问题的最简单方法是备份模型的原始 matrix
属性,并在下次更新之前将其复制回原位。这可以使用 Object3D.userData
.
来完成
// before doing any updates, ensure the local matrix is set from postion/quaternion/scale:
model.updateMatrix();
// back-up the matrix:
model.userData.originalMatrix = model.matrix.clone();
// reset the model before each update
model.userData.originalMatrix.decompose( model.position, model.quaternion, model.scale );
model.matrix.copy( model.userData.originalMatrix );
我想多次对 three.js
网格应用相同的矩阵变换,但我只想要第一次变换所描述的变换。在我重新应用变换之前,我怎样才能 "reset" 将网格的矩阵调整到它的变换前值?
我尝试了以下方法,但没有用
const identity = model.matrix.identity();
model.matrix = identity;
model.matrixWorld = identity;
model.updateMatrix();
model.updateMatrixWorld();
model.applyMatrix4(newMatrix);
编辑: 替换我的整个答案,因为我不知道 Object3D.applyMatrix4
更新了 position
/quaterion
/ scale
属性除了修改matrix
.
解决此问题的最简单方法是备份模型的原始 matrix
属性,并在下次更新之前将其复制回原位。这可以使用 Object3D.userData
.
// before doing any updates, ensure the local matrix is set from postion/quaternion/scale:
model.updateMatrix();
// back-up the matrix:
model.userData.originalMatrix = model.matrix.clone();
// reset the model before each update
model.userData.originalMatrix.decompose( model.position, model.quaternion, model.scale );
model.matrix.copy( model.userData.originalMatrix );