包圍盒的計算以及物體移動到世界坐標中心


 

昨天加載模型的時候發現模型的位置雖然都設置為了(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,那么模型也亂了,也沒達到效果。以上參考了網上的帖子,忘記了作者,所以就。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM