2015-11-04 33 views
1

Basicially我喜歡網1的右側連接到網孔2。縮放mesh1,mesh2會自動改變它的位置?

的左側目前,如果我縮放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); 
+0

連接網面怎麼樣? – gaitat

+0

您可以將mesh2添加到mesh1'mesh1.add(mesh2)'。但是,mesh1的每個轉換(平移,旋轉,縮放)都將繼承到mesh2。但我想,那不是你想要的? – Brakebein

回答

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. 規模mesh1mesh3分別由k
  2. 計算mesh3mesh1,meshDiff之間的差值。
  3. Set mesh2 = meshDiff

方法2:

  1. 量表mesh3通過k
  2. 計算mesh3,mesh31mesh32的兩半,使得它們分別沿着mesh1mesh2取向。
  3. Set mesh1 = mesh31 and mesh2 = mesh32

這些方法非常相似。保持三個。js的API考慮選擇最好的方法。

注意:您不需要渲染mesh3。它只是作爲一種計算工具而存在。

共性:

上面介紹的思想可以在其他情況下被用於這樣的方法,其中幾何結構共享一個公共的特徵需要被縮放。

希望這會有所幫助。

PS:我意識到這個答案有點抽象。儘管如此,我希望它有幫助。