我有Vector3
位置。
我有scene
个孩子:
planet = new THREE.Object3D();
city= new THREE.Object3D();
street= new THREE.Object3D();
scene.add(planet);
planet.add(city);
city.add(street);
关于位置,如何在每个对象(planet
,city
和street
单独)中获取向量的正确世界位置每个对象的,缩放和旋转 ..
我尝试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)
如何通过三个函数获取它?
答案 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.add
与getWorldPosition()
结合使用:
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