包围盒的计算以及物体移动到世界坐标中心

昨天加载模型的时候发现模型的位置虽然都设置为了(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,那么模型也乱了,也没达到效果。以上参考了网上的帖子,忘记了作者,所以就。。。

原文地址:https://www.cnblogs.com/feixiangsnail15-12-28/p/6603405.html