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 );