如何获得子对象的全局/世界位置?

时间:2013-02-26 20:19:21

标签: javascript three.js

如何在另一个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)

2 个答案:

答案 0 :(得分:55)

先致电

scene.updateMatrixWorld();

或在您的示例中,调用

就足够了
parent.updateMatrixWorld();

然后提取世界位置

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

但实际上,渲染器会在每个渲染循环中为您调用updateMatrixWorld(),因此您不必这样做。

编辑:更新为three.js r.65

答案 1 :(得分:6)

在threejs r89 中,您可以通过Object3D.getWorldPosition获得世界排名。我不知道它什么时候被添加。