昨天加載模型的時候發現模型的位置雖然都設置為了(0,0,0),但是通過對比一個位置在(0,0,0)位置的正方體,模型的位置並沒有在場景的中心點,以至於軌道相機旋轉的時候並不是圍繞着物體的中心旋轉,所以效果不好,如何解決這個問題呢,我先是用局部坐標轉換為世界坐標,但搞了很久還是沒弄好,最后發覺一個新方法就是通過包圍盒,算出來模型的中心點,然后將這個中心點各個取負,然后將模型偏移這么多距離就來到了場景的中心位置。具體代碼如下:
var bbox = new THREE.Box3().setFromObject(group)
var mdlen=bbox.max.x-bbox.min.x;
var mdwid=bbox.max.z-bbox.min.z;
var mdhei=bbox.max.y-bbox.min.y;
var centerpoint=new THREE.Vector3();
var x1=bbox.min.x+mdlen/2;
var y1=bbox.min.y+mdhei/2;
var z1=bbox.min.z+mdwid/2;
group.position.set(-x1,-y1,-z1);
其實還有兩種方式,一種是通過var BaxH = new THREE.BoundingBoxHelper(Load_Model,hex);還有Geometry的方式computeboundingBox(),然后取Geometry.center()此時,幾何體就會來到場景的中心位置,但是,這樣做對於組是不行的,哪怕對組里面每個幾何體都取center,那么模型也亂了,也沒達到效果。以上參考了網上的帖子,忘記了作者,所以就。。。