web-dev-qa-db-ja.com

子オブジェクトのグローバル/ワールド位置を取得する方法は?

別の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)ではない

41
TunnelVision

最初の電話

_scene.updateMatrixWorld();
_

またはあなたの例では、呼び出すだけで十分です

_parent.updateMatrixWorld();
_

次に、世界の位置を抽出します

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

ただし、実際には、レンダラーは各レンダーループでupdateMatrixWorld()を呼び出すため、ユーザーが行う必要はありません。

編集:three.js r.65に更新

55
WestLangley

Threejsr89では、 Object3D.getWorldPosition 。いつ追加されたのかわかりません。

8
zwcloud