2016-03-03 1097 views
2

我想將已放置的對象放置在新的位置,但它從本地位置移動而不是全局位置。如何獲取對象的世界位置(Three.js)

this._scene.updateMatrixWorld(); 
this._scene.add(mesh); 
var v1 = new THREE.Vector3();  
v1.setFromMatrixPosition(mesh.matrixWorld); 
mesh.position.set(v1.x +2, v1.y + 2, v1.z + 2); 

回答

3

我做了什麼來解決我的問題:

每個網格都有一個幾何屬性。這就是爲什麼你可以調用mesh.geometry。 從這一點我圍繞我的網格創建了一個BoundingSphere。

mesh.geometry.computeBoundingSphere(); 

現在有可能獲得我的boundingSphere的世界位置,它同時也是我的網格的世界位置。

var vector = mesh.geometry.boundingSphere.center; 

恭喜! 'vector'在網格的(x,y,z)中獲得了中心的世界位置。

爲了澄清,'mesh'是一個THREE.Mesh對象。

+0

你很漂亮!你懂的? 哈哈感謝這有助於很多:) –

0

難道你只是通過增量移動對象本身嗎?我不確定爲什麼你需要矩陣參與?

mesh.position.set(mesh.position.x +2, mesh.position.y + 2, mesh.position.z + 2); 

編輯...如果您需要使用矩陣,您需要設置matrixWorld。看看http://threejs.org/docs/#Reference/Core/Object3D.matrixWorld,但使用位置設定器會爲你做重擔。

+0

不,這是錯誤的,因爲THREE.js將從本地座標計算 – user2982195

+1

我想我現在明白了。您在與父級相關的位置有一個子網。你把它或者一個克隆直接放到了場景中,但是現在這個位置不再是正確的,因爲它的位置是在引用一個不同的父節點?也許你需要的是在原始對象上調用.localToWorld(vector)。 localToWorld是object3d的一個屬性。這將是您的新開始位置。 – Radio

+0

父母是現場。網格必須替換爲新的座標,但是當我這樣做時,網格僅從其位置移動到本地座標。 – user2982195

相關問題