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

Posted

tags:

篇首语:本文由小常识网(cha138.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)。

答案

第一次打电话

scene.updateMatrixWorld();

或者在你的例子中,打电话就足够了

parent.updateMatrixWorld();

然后提取世界位置

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

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

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

另一答案

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

以上是关于如何获得子对象的全局/世界位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过鼠标点击获得鼠标点的三维世界坐标呢?OPENGL

C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程