2017-06-29 19 views
0

ピボットグループを使用して、プレーンメトリをそれぞれ個別に回転するのではなく回転させます。ピボットグループオブジェクトを回転させた後、実際の世界の位置に相対的な位置に対応するように、各子/プレーンメトリメッシュの新しい位置を見つけたいと思います。THREE.Group()の回転後のメッシュの位置の更新

これを行うにはどうすればよいですか?

答えて

0

クレイグが述べたように、getWorldPositionは、オブジェクトの新しいVector3を返すObject3D上の機能(シーンにおけるほとんどすべての基底クラス)を、ある簡単な方法世界の地位。

var childPlaneWorldPosition = childPlane.getWorldPosition(); 

難しい方法:地元と世界の位置の間で変換するための2つの方法があり

localToWorldworldToLocal

これらはまた、Object3Dの機能であり、Vector3となります。次に、ベクトルは、(破壊的に)所望の座標系に変換される。あなたが与えているベクトルがすでに正しい座標系に入っているかどうかを知るには十分にスマートではないことを知っています - それを把握する必要があります。 localToWorldchildPlaneの親に呼び出されたことを

// clone because localToWorld changes the vector passed to it 
var childPlanePosition = childPlane.position.clone(); 
childPlane.parent.localToWorld(childPlanePosition); 

は予告:世界にローカルから子面の位置を変換するので、

は、座標、あなたはこれを行うだろう。これは、childPlaneがその親に対してローカルであるため、その位置がその親の座標系に対してローカルであるためです。

ハード(ERは理解する)方法:

childPlane店だけでなく、そのローカル変換マトリックス(childPlane.matrix)だけでなく、そのワールド変換行列(childPlane.matrixWorld)。もちろん、matrixWorldプロパティから直接ワールドポジションを取得することもできます。いくつかの質問に答えるために

var childWorldPosition = new THREE.Vector3(
    childPlane.matrixWorld.elements[12], 
    childPlane.matrixWorld.elements[13], 
    childPlane.matrixWorld.elements[14] 
); 

編集

私が正しく理解していれば、私は見つけることができる 『本物』ピボット・グループの子どもたちアレイ内のメッシュの位置?

はい。あなたが呼ばれた場合:

pivotGroup.add(childPlane); 

は、その後、そのchildPlaneはあなたがchildPlaneオブジェクト

のすべてを反復処理するために使用し、各メッシュのための位置オブジェクトにこれらのクローンを作成することができpivotGroup.children配列、に表示されます? "

プレーンをワールド座標(シーン内)にしたいが、上記のコードを使用してグループに追加すると、シーンの直接の子ではなくなります。シーンにそれらを再追加します。その後、

scene.add(childPlane); 

そして、その算出された世界の位置を適用する理由は、単にグループでそれらを残していない

(あなたはこれを聞いていなかった)」、言いました。?あなたはどのようにして飛行機を場面の直接の子供として残しますか?しかしそれらをグループとして回転させますか? "

しかし、three.jsは行列を掛け合わせることで、各平面の最終的な世界行列を作り出していますので、回転行列を作成することで同じことを手動で行うことができます。

var rotMat = new THREE.Matrix4().makeRotationMatrix(x, y, z); 
for(var i = 0; i < planesArray.length; ++i){ // I guess this would loop over your 3D array 
    planesArray.applyMatrix(rotMat); 
} 
+0

私の場合、私はすべてのメッシュを3D配列にしていますが、これを使ってプレーヤと各メッシュの衝突をチェックします。私が正しく理解していれば、ピボットグループの子配列のメッシュの「本当の」位置を見つけることができますか?そしてそれらを各メッシュの位置オブジェクトにクローンしますか? – Bjartfjord

+0

私はいくつかのOに答えるために私のポストを編集あなたの質問。 – TheJim01

+0

ありがとう!私は週末後に家に帰るとこれを試してみます。 – Bjartfjord

-1

使用plane_mesh.getWorldPosition()