Matrix 网格世界的相对缩放

Matrix 网格世界的相对缩放,matrix,three.js,Matrix,Three.js,在Object3D中包含一个网格 Object3D具有任意缩放 网格具有任意旋转。因此,我的网格相对于世界坐标进行缩放 但是,当我在场景中分离网格时(例如,借助THREE.SceneUtils.detach(mesh,obj3d,scene),我得到的结果不正确,网格仅局部缩放 我试图更改网格的几何体,但仍然得到错误的结果: 我意识到我犯了什么错误。 必须应用我的第一个矩阵的getInverse。使用负值从Euler进行旋转 var firstMatrix=new THREE.Matr

在Object3D中包含一个网格 Object3D具有任意缩放 网格具有任意旋转。因此,我的网格相对于世界坐标进行缩放

但是,当我在场景中分离网格时(例如,借助THREE.SceneUtils.detach(mesh,obj3d,scene),我得到的结果不正确,网格仅局部缩放

我试图更改网格的几何体,但仍然得到错误的结果:


我意识到我犯了什么错误。 必须应用我的第一个矩阵的getInverse。使用负值从Euler进行旋转

    var firstMatrix=new THREE.Matrix4().makeRotationFromEuler(mesh.rotation);
    var inverseMatrix=new THREE.Matrix4().getInverse(firstMatrix);

   mesh.geometry.applyMatrix(firstMatrix);        
        mesh.geometry.applyMatrix(new THREE.Matrix4().makeScale( 
                                     obj.scale.x, 
                                     obj.scale.y,  
                                     obj.scale.z
                                 ));
    mesh.geometry.applyMatrix(inverseMatrix);   

     mesh.geometry.verticesNeedUpdate=true;   
    var firstMatrix=new THREE.Matrix4().makeRotationFromEuler(mesh.rotation);
    var inverseMatrix=new THREE.Matrix4().getInverse(firstMatrix);

   mesh.geometry.applyMatrix(firstMatrix);        
        mesh.geometry.applyMatrix(new THREE.Matrix4().makeScale( 
                                     obj.scale.x, 
                                     obj.scale.y,  
                                     obj.scale.z
                                 ));
    mesh.geometry.applyMatrix(inverseMatrix);   

     mesh.geometry.verticesNeedUpdate=true;