如何在世界轴上拉伸(缩放)网格

时间:2014-04-09 06:14:02

标签: javascript three.js

有一个在线3D编辑器,您可以在其中编辑单个网格(移动,缩放,旋转)。能够编辑使用基于threejs的TransformControls代码的自定义变换控件实现的网格。这是来自mousemove事件的片段:

var intersect = intersectObjects(pointer, [xzPlane]); // intersect mouse's pointer with horizontal plane

var point = new THREE.Vector3();
point.copy(intersect.point);
point.sub(offset); // coords from mousedown event (from start stretching)

// some code for 'scale' value calculating base on 'point' variable
// var scale = ...;
//

 mesh.scale.x = scale;

如果网格不旋转,此代码可以正常工作。

要求缩放始终发生在世界坐标系中。这是编程问题

例如,从中:

rotated, but not scaled

对此:

rotated, then scaled

P.S。我认为必须创建自定义网格矩阵,但我对矩阵的经验很少

谢谢!

1 个答案:

答案 0 :(得分:0)

而不是设置旋转,如下所示:

mesh.rotation.set( Math.PI/4, 0, 0 );

将相同的旋转应用于几何体,而不是:

var euler = new THREE.Euler( Math.PI / 4, 0, 0 );
mesh.geometry.applyMatrix( new THREE.Matrix4().makeRotationFromEuler( euler ) );

现在,您可以设置比例并获得所需的结果。

mesh.scale.z = 2;

小提琴:http://jsfiddle.net/Tm7Ab/5/

three.js r.67