Javascript Three.js获得场景中心

Javascript Three.js获得场景中心,javascript,three.js,Javascript,Three.js,我想做的是在Three.js中获取从ColladLoader获得的场景中心(因为加载的模型就是场景),然后将其设置为摄影机的目标。您可以使用Camera.lookAt(Scene.position)@gaitat的解决方案将起作用,只要模型的原点恰好也是它的中心,但我认为情况不太可能如此。模型的原点可以是左下角、顶平面的中间或与模型“中心”无关的任何其他点 要获得模型的“中心”,需要从其几何图形计算它。幸运的是,第三,几何学有一些方便的方法来帮助解决这个问题。可以计算几何体的“边界球体”,即适合

我想做的是在Three.js中获取从ColladLoader获得的场景中心(因为加载的模型就是场景),然后将其设置为摄影机的目标。

您可以使用
Camera.lookAt(Scene.position)

@gaitat的解决方案将起作用,只要模型的原点恰好也是它的中心,但我认为情况不太可能如此。模型的原点可以是左下角、顶平面的中间或与模型“中心”无关的任何其他点

要获得模型的“中心”,需要从其几何图形计算它。幸运的是,第三,几何学有一些方便的方法来帮助解决这个问题。可以计算几何体的“边界球体”,即适合所有几何体点的最小球体。该边界球体的中心将是整个几何体的“中心”

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计算世界矩阵变换,但这只是一个开始


请记住,几何体的边界球体不考虑点的分布。几何体中距离其他点非常远的单个孤立点将偏离边界球体的中心,因为它需要移动以包含该点。不过,边界球方法是最快、最简单的方法,在大多数情况下都应该有效。

谢谢,但我知道这一点。关键是Dae场景包含多个网格。那么如何计算中心呢?@Artus90那么为什么不找到所有相关网格的边界球体,然后将它们平均起来呢?如果这不是您想要的,那么您需要更具体地说明场景的“中心”是什么意思。在场景中,大约有1000个网格,它们共同构成一个建筑。我在论坛上读到ColladaLoader将整个3.Scene加载到返回的对象中。我希望将摄影机居中于返回场景中包含的所有网格的中心。