2016-03-02 92 views
-1

我想要做的是在Three.js中獲取從ColladaLoader獲得的場景的中心(因爲加載的模型是場景),然後將其設置爲Camera的目標。Three.js獲取場景的中心

回答

2

@ gaitat的解決方案將工作,只要模型的起源只是恰巧也是其中心,但我不認爲這很可能是這種情況。模型的原點可能是左下角,或頂層平面的中間,或與模型「中心」無關的任何其他點。

要獲得模型的「中心」,您需要從幾何中計算出它的中心。幸運的是,THREE.Geometry有一些方便的方法來幫助解決這個問題。您可以計算幾何圖形的「邊界球」,即適合所有幾何圖形點的最小可能球面。該邊界球體的中心將是整個幾何體的「中心」。

var mesh; // this should be your model's mesh 
      // it might be buried inside the DAE object somewhere 

mesh.geometry.computeBoundingSphere(); // this isn't calculated automatically 
             // you need to call it 

mesh.geometry.boundingSphere.center; // THREE.Vector3 which is the center of the sphere 

我不確定您是否需要計算所生成的boundingSphere.center的世界矩陣轉換,但這是一個開始。

請記住,幾何圖形的邊界球不考慮點的分佈。幾何體中距離其他幾何體非常遠的單個孤立點將拋出邊界球體的中心,因爲它需要移動以包含該點。儘管如此,邊界球方法是最快和最簡單的方法,並且應該在大多數情況下工作。

+0

謝謝,但我知道這一點。重點是Dae場景包含多個網格。那麼如何計算中心呢? –

+0

@ Artus90那麼爲什麼不找到所有相關網格的邊界球,然後將它們平均到一起?如果這不是你想要的,那麼你需要更具體地說明你的場景的「中心」是什麼意思。 – jered

+0

在現場,大約有1000個網格,它們一起構建一個建築物。我在論壇上看到ColladaLoader將整個Three.Scene加載到返回的對象中。我想將相機置於返回場景中所有網格的中心。 –

0

您可以使用camera.lookAt(scene.position);