2013-02-26 12 views
38

Object3Dのグローバルな位置を別のObject3Dの内部で取得するにはどうすればよいですか?子オブジェクトのグローバル/ワールド位置を取得する方法は?

セットアップ:

var parent = new THREE.Object3D(); 
parent.position.set(100, 100, 100); 

var child = new THREE.Object3D(); 
child.position.set(100, 100, 100); 
parent.add(child); 

scene.add(parent); 

ノート:

console.log(child.localToWorld(parent.position)); 

...それは私を与える

私は、これはそれを行うための方法だろうと思いました(100,100,100)(200,200,200)

答えて

50

最初の呼び出し

scene.updateMatrixWorld(); 

またはあなたの例では、その後、しかし、世界の位置にレンダラコールを実際に

var vector = new THREE.Vector3(); 
vector.setFromMatrixPosition(child.matrixWorld); 

を抽出

parent.updateMatrixWorld(); 

を呼び出すのに十分ですupdateMatrixWorld()あなたのために各レンダリングループでは、そうする必要はありません。

EDIT:あなただけObject3D.getWorldPositionによって世界の位置を取得することができますthreejs R89でr.65

+0

はこれをしなかった私あなたのアドバイスに従って、あなたにWestLangleyありがとう: **はconsole.log(parent.position.getPositionFromMatrix(child.matrixWorld))** しかし、ライブコードは周りのものを移動ループ内actrulyであるため、これは親オブジェクトの速度が劇的に増加するいくつかの奇妙な成果物をもたらしました(この唯一のコンソール。子どもの位置を記録する) ! ** console.log(parent.position.clone()。getPositionFromMatrix(child.matrixWorld))** *私は、何が起こっているのかわからないので、もう一度ありがとうございます。* – TunnelVision

+1

いいえ、いいえ!レンダリングループの外側に別のベクトルを作成し、レンダーループ内の位置の値を割り当てます。 – WestLangley

+0

ああ、今私はそれを得る:) – TunnelVision

0

をthree.jsするように更新。それがいつ追加されたのか分かりません。

関連する問題