web-dev-qa-db-fra.com

Comment obtenir la position globale / mondiale d'un objet enfant?

Comment obtenir la position globale d'un Object3D dans un autre Object3D?

configuration:

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);

notes:

Je pensais que ce serait la façon de le faire:

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

... mais ça me donne (100, 100, 100) , pas (200, 200, 200) .

41
TunnelVision

Premier appel

scene.updateMatrixWorld();

ou dans votre exemple, il suffit d'appeler

parent.updateMatrixWorld();

Extraire ensuite la position mondiale

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

En pratique, cependant, le moteur de rendu appelle updateMatrixWorld() pour vous dans chaque boucle de rendu, vous n'avez donc pas à le faire.

EDIT: mis à jour à three.js r.65

55
WestLangley

Dans threejs r89 vous pouvez simplement obtenir la position mondiale par Object3D.getWorldPosition . Je ne sais pas quand il a été ajouté.

8
zwcloud