2015-09-07 9 views
6

私はこのシーンに27個のメッシュを持っています。メッシュはそれぞれに番号が付いています。最高の番号を持つものはスケール1を持ちます。残りの値は1未満の値を連続して持ちます。位置を変えずにメッシュをスケールする方法は?

次のように、私はそれがそれに応じてそれぞれのループを登りたい。私の問題は、各メッシュの位置が変更されたときに発生します。

実際、それは予定されているサイズにスケーリングされますが、位置が変更されます。私はいくつかの画面が積み重なっているので苦労しています。

私はちょうどあなたが登ると、この例のように同じ位置に滞在する必要があります。

、アメリカはスケールが、それでも自分の位置を維持しています。私は彼らがフィギュアの中心に伸びていると思う。メッシュの位置がその中心にいない、またはあなたがそれになりたいものは何でも参照するので

私は(「municipios」と呼ばれる各)メッシュ

for(var s=0; s< features.features[x].geometry.coordinates[0].length; s=s+1){      
    geometria[x].vertices.push(new THREE.Vector3((((features.features[x].geometry.coordinates[0][s][0])+75.5)*10),(((features.features[x].geometry.coordinates[0][s][1])-5.5)*10),0));         
} 
forma_figura[x]=new THREE.Shape(geometria[x].vertices); 
extrude_geometria[x]=new THREE.ExtrudeGeometry(forma_figura[x],datos_extrusion); 
municipios[x] = new THREE.Mesh(extrude_geometria[x], materialExtrude[x]); 
scene.add(municipios[x]); 

// so I change the scale: 
//formula is the value of scale. The biggest number has escale 1. 
new TWEEN.Tween(municipios[x].scale).to({ x: formula, y: formula }, 1000).start(); 
//this ultimate line is the same: municipios[x].scale.set(formula,formula,formula); 
+0

です。通常、スケールを変更する前です。 http://i.imgur.com/okQQ5Ue.png?1 – velez11

答えて

6

を作成しました:あなたは平均的な頂点を持つジオメトリを作成した場合x 100を超えるコンポーネントである場合、その可視位置は、その実際の位置プラス(100,0,0)になります。メッシュの位置を指定しなかった場合(デフォルトでは(0,0,0))、正確に(100,0,0)になります。たとえば0.5でスケーリングすると、平均位置は(100,0,0)*。5 =(50,0,0)になり、メッシュの位置が明らかに変化します。何をすべきか

は次のとおりです。

  • すべての頂点から中心の座標を減算します。頂点はジオメトリの内側にあるので、実行するとgeometry.verticesNeedUpdate = trueを設定する必要があります。

  • メッシュにセンターの座標を加えて補正します。

したがって、結果メッシュは移動せずに中央に配置されます。

センターを定義するには、3つの異なる可能性があります。

  • Three.jsはgeometry.center()THREE.GeometryUtils.center(geometry)とバウンディングボックスの中央に基づいて自動的にメッシュを中央にすることができますが。
  • 重心を計算するには、最初に頂点をループして平均座標を取得します。
  • ブーディングボックスの中心もセントロイドでも構いませんが、カスタムセンターです。たとえば、人のメッシュをスケーリングしていて、足がどのようなスケールでも地面に接触したい場合は、水平面で最初に2つのうちの1つを選択できますが、その垂直座標は、足のまさに底)。

もちろん、3Dエディタソフトウェアからメッシュをインポートした場合は、その中で行うこともできます。

+0

私は無知を言い訳しますが、わかりません。ローカル座標0,0,0のすべてのメッシュポイントを移動する必要があることを理解しました。 http://i.imgur.com/jXM7t63.png。私はこれをした: – velez11

+0

municipios [i] .position.x = offsetArray [i] .x;municipios [i] .position.y = offsetArray [i] .y municipios [i] .position.z = offsetArray [i] .z; // offsetArray [i] 0,0,0は各メッシュに対してローカルです。 – velez11

+0

私は各メッシュのスケールを適用した後、0,0,0に入れてしまいました。そして最後に私はしました:municipios [i] .translate.x = 0; municipios [i] .translate.y = 0; municipios [i] .translate.z = 0; – velez11

関連する問題