[英]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
,使得它的組合mesh1
和mesh2
。
那是:
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:
mesh1
和mesh3
各自通過k
。 mesh3
和mesh1
, meshDiff
。 mesh2
= meshDiff
。 方法二:
k
縮放mesh3
。 mesh3
, mesh31
和mesh32
兩半, mesh3
使它們分別沿着mesh2
mesh1
和mesh2
定向。 mesh1
= mesh31
和mesh2
= mesh32
。 這些方法非常相似。 請記住three.js的API,以選擇最佳方法。
注意:不需要渲染mesh3
。 它僅作為計算輔助而存在。
概論:
上面提出的想法也可以用在其他情況下,其中共享一個公共特征的幾何形狀需要縮放。
希望這可以幫助。
PS:我知道這個答案有點抽象。 盡管如此,我希望它會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.