三个js重新计算矢量3到子对象

时间:2015-07-12 09:33:18

标签: three.js

我有Vector3位置。

我有scene个孩子:

planet = new THREE.Object3D();
city= new THREE.Object3D();
street= new THREE.Object3D();

scene.add(planet);
planet.add(city);
city.add(street);

关于位置,如何在每个对象(planetcitystreet 单独)中获取向量的正确世界位置每个对象的,缩放和旋转 ..

我尝试planet.worldToLocal(new THREE.Vector3( vector.x,vector.y,vector.z ),但它似乎只适用于从全局到子对象,而不是从planet重新计算到city

示例:

planet.position.set(10,0,0);
city.position.set(10,0,0);
street.position.set(10,0,0);

如果myVector是新THREE.Vector3(0,10,0),我需要在街道对象中获得相同的位置,应该(30,10,0)如何通过三个函数获取它?

2 个答案:

答案 0 :(得分:1)

你可以像这样得到一个物体的世界位置:

var position = object.getWorldPosition(); // creates a new THREE.Vector3()

var position = new THREE.Vector3();
object.getWorldPosition( position ); // reuses your existing THREE.Vector3()

注意:如果您自上次调用position/rotation/scale以来修改了层次结构中任何对象的render(),则必须通过调用{{{{}}来强制更新世界矩阵。 1}}。渲染器会为您调用此方法,否则。

three.js r.71

答案 1 :(得分:0)

我想您希望将Vector3.addgetWorldPosition()结合使用:

planet.position.set(10,0,0);
city.position.set(10,0,0);
street.position.set(10,0,0);

myVector = new THREE.Vector3( 0, 10, 0 ); 
myVector.add( street.getWorldPosition() ); 
console.log( myVector ); // 30, 10, 0