【问题标题】:Three.js Reseting Matrix before Transformation三.js在转换前重置矩阵
【发布时间】:2020-03-26 02:22:57
【问题描述】:

我想多次将相同的矩阵变换应用于three.js 网格,但我只想要第一次变换所描述的变换。在重新应用转换之前,如何将网格的矩阵“重置”为转换前的值?

我尝试了以下方法,但没有成功

const identity = model.matrix.identity();
model.matrix = identity;
model.matrixWorld = identity;
model.updateMatrix();
model.updateMatrixWorld();
model.applyMatrix4(newMatrix);

【问题讨论】:

    标签: javascript three.js 3d transformation matrix-multiplication


    【解决方案1】:

    编辑: 替换我的整个答案,因为我不知道Object3D.applyMatrix4 除了修改matrix 之外还更新了position/quaterion/scale 属性。

    解决此问题的最简单方法是备份模型的原始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 );
    

    【讨论】:

    • 我认为这行不通。我创建了这个代码框:codesandbox.io/s/jovial-elgamal-fbzni 并添加了您的代码。在第二次应用转换之前,模型似乎没有被重置。谢谢!
    • @withintheruins14 我的理解中遗漏了一些东西。我已经更新了我的答案。
    猜你喜欢
    • 2022-10-05
    • 2017-06-17
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2015-06-10
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多