缩放mesh1,mesh2会自动改变它的位置吗?

时间:2015-11-04 21:51:47

标签: javascript three.js

基本上我喜欢将网格1的右侧连接到网格2的左侧。

目前,如果我缩放mesh1,我必须重新定位mesh2,以便与之前的距离相同。

因此,我们将网格1 缩放为z:2

var tween = new TWEEN.Tween(mesh1.scale).to({ z: 2 }, 1000).start();
tween.easing(TWEEN.Easing.Elastic.InOut);

为了与之前的网格1具有相同的距离,我必须将网格2 重新定位到z:1.5

var tween = new TWEEN.Tween(mesh2.position).to({ z: 1.5 }, 1000).start();
tween.easing(TWEEN.Easing.Elastic.InOut);

连接彩色网格面是否有任何选项。那么如果我缩放网格1,网格2会自动改变它的位置吗?

enter image description here

...

var geometry = new THREE.BoxGeometry( 1, 1, 1 );


var mesh1 = new THREE.Mesh( geometry, 
new THREE.MeshPhongMaterial({color: 0x222222}));
mesh1 .position.set( 0, 0, 0 );
mesh1 .scale.set( 1, 1, 1 );
scene.add( mesh1 );

var mesh2 = new THREE.Mesh( geometry, 
new THREE.MeshPhongMaterial({color: 0x222222}));
mesh2 .position.set( 0, 0, 1 );
mesh2 .scale.set( 1, 1, 1 );
scene.add( mesh2 );

1 个答案:

答案 0 :(得分:2)

这是一个几何问题。

之前我没有使用过three.js,但我相信我有几何解决方案。

考虑第三个虚构网格mesh3,使其成为mesh1mesh2的组合。

那是:

mesh1: position(0, 0, 0), scale(1, 1, 1);
mesh2: position(0, 0, 1), scale(1, 1, 1);
mesh3: position(0, 0, 0), scale(1, 1, 2); // Loosely, mesh3 = mesh1 + mesh2

现在通过标量k来扩展结构,我提出了两种方法:

方法1:

  1. mesh1分别缩放mesh3k
  2. 计算mesh3mesh1meshDiff之间的差异。
  3. 设置mesh2 = meshDiff
  4. 方法2:

    1. mesh3缩放k
    2. 计算mesh3mesh31mesh32的两半,使其分别位于mesh1mesh2
    3. 设置mesh1 = mesh31mesh2 = mesh32
    4. 方法非常相似。记住three.js的API,以选择最佳方法。

      注意:您无需渲染mesh3。它只作为计算辅助工具存在。

      <强>共性:

      上面提出的想法也可以用于其他情况,其中需要缩放共享共同特征的几何图形。

      希望这有帮助。

      PS:我意识到这个答案有点抽象。尽管如此,我希望它有所帮助。