2015-07-12 52 views
0

我有Vector3的位置。三個js重新計算矢量3到子對象

我有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)如何通過三個功能得到它?

回答

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(),那麼您將不得不通過調用scene.updateMatrixWorld()強制更新世界矩陣。渲染器會爲您調用,否則。

three.js所r.71

+0

但我的Vector3有,我需要在街上對象這一載體的局部位置。這是相對於城市而言相對於地球,相對於世界。 這意味着我有世界矢量值和需要相對於孩子的孩子的孩子。 – Martin

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 
+1

只有當對象有旋轉0,0,0和固定比例時纔有效 – Martin

+0

還有'''getWorldDirection()'''。但也許你想考慮這些矩陣,請參閱http://stackoverflow.com/a/15098870/4977165 –