簡體   English   中英

縮放mesh1,mesh2的位置會自動更改嗎?

[英]Scale mesh1, mesh2 automatically change it's position?

基本上,我喜歡將網格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會自動更改其位置?

在此處輸入圖片說明

...

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 );

這是一個幾何問題。

我以前沒有使用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. 計算之間的區別mesh3mesh1meshDiff
  3. 設置mesh2 = meshDiff

方法二:

  1. k縮放mesh3
  2. 計算mesh3mesh31mesh32兩半, mesh3使它們分別沿着mesh2 mesh1mesh2定向。
  3. 設置mesh1 = mesh31mesh2 = mesh32

這些方法非常相似。 請記住three.js的API,以選擇最佳方法。

注意:不需要渲染mesh3 它僅作為計算輔助而存在。

概論:

上面提出的想法也可以用在其他情況下,其中共享一個公共特征的幾何形狀需要縮放。

希望這可以幫助。

PS:我知道這個答案有點抽象。 盡管如此,我希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM