网格世界相对的缩放

时间:2015-04-11 19:47:47

标签: matrix three.js

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

但是当我在场景中分离我的网格时(例如,在THREE.SceneUtils.detach(网格,obj3d,场景)的帮助下,我得到一个不正确的结果,网格只在本地缩放。

我尝试更改网格的几何图形,但结果仍然不正确:

http://jsfiddle.net/Ni55aN/VsWb9/3426/

 var euler = new THREE.Euler(-mesh.rotation.x,-mesh.rotation.y,-mesh.rotation.z);

 mesh.geometry.applyMatrix(new THREE.Matrix4().makeRotationFromEuler(mesh.rotation));        
 mesh.geometry.applyMatrix(new THREE.Matrix4().makeScale( 
                         obj.scale.x, 
                         obj.scale.y,  
                         obj.scale.z
                     ));
 mesh.geometry.applyMatrix(new THREE.Matrix4().makeRotationFromEuler(euler));        
 mesh.geometry.verticesNeedUpdate=true;   

1 个答案:

答案 0 :(得分:0)

我意识到我的错误。 有必要应用我的第一个矩阵的getInverse而不是负值的.makeRotationFromEuler

    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;