我想將已放置的對象放置在新的位置,但它從本地位置移動而不是全局位置。如何獲取對象的世界位置(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);
我想將已放置的對象放置在新的位置,但它從本地位置移動而不是全局位置。如何獲取對象的世界位置(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);
我做了什麼來解決我的問題:
每個網格都有一個幾何屬性。這就是爲什麼你可以調用mesh.geometry。 從這一點我圍繞我的網格創建了一個BoundingSphere。
mesh.geometry.computeBoundingSphere();
現在有可能獲得我的boundingSphere的世界位置,它同時也是我的網格的世界位置。
var vector = mesh.geometry.boundingSphere.center;
恭喜! 'vector'在網格的(x,y,z)中獲得了中心的世界位置。
爲了澄清,'mesh'是一個THREE.Mesh對象。
難道你只是通過增量移動對象本身嗎?我不確定爲什麼你需要矩陣參與?
mesh.position.set(mesh.position.x +2, mesh.position.y + 2, mesh.position.z + 2);
編輯...如果您需要使用矩陣,您需要設置matrixWorld。看看http://threejs.org/docs/#Reference/Core/Object3D.matrixWorld,但使用位置設定器會爲你做重擔。
不,這是錯誤的,因爲THREE.js將從本地座標計算 – user2982195
我想我現在明白了。您在與父級相關的位置有一個子網。你把它或者一個克隆直接放到了場景中,但是現在這個位置不再是正確的,因爲它的位置是在引用一個不同的父節點?也許你需要的是在原始對象上調用.localToWorld(vector)。 localToWorld是object3d的一個屬性。這將是您的新開始位置。 – Radio
父母是現場。網格必須替換爲新的座標,但是當我這樣做時,網格僅從其位置移動到本地座標。 – user2982195
你很漂亮!你懂的? 哈哈感謝這有助於很多:) –