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) .
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
Dans threejs r89 vous pouvez simplement obtenir la position mondiale par Object3D.getWorldPosition
. Je ne sais pas quand il a été ajouté.