我是Three.js的新手,我想为自己的场景创建一个可旋转的相机。
我已经看到THREE.Geometry具有.computeBoundingSphere()
方法和.boundingSphere
属性,这些方法和属性为我提供了该对象边界球的中心和半径。假设我的场景中只有一个网格,我可以用scene.children[0].computeBoundingSphere
这个想法是用来.boundingSphere.center
设置myCamera.lookAt
和使用我的视角.boundingSphere.center
并.boundingSphere.radius
与Math.sin / cos一起设置myCamera位置。
问题1:这是最好的方法吗,或者Three.js是否为此范围提供了任何特殊的类或帮助器?
问题2:如果我的场景包含多个网格并且我想要一个全局场景boundingSphere,该怎么办?我是否手动遍历了所有对象scene.children
(跳过摄像机,灯光等)并以数学方式创建了单个网格物体的boundingSphere的“ boundingSphere”,还是有一种更聪明的方法来做到这一点?是否可以添加一个“根”虚拟对象,该对象包含我所有的场景网格并由于其所有子元素boundingSpheres而获得其boundingSphere?
three.js提供了几个相机控件示例。OrbitControls
或TrackballControls
可能是您要找的东西。
Box3.setFromObject( object )
将计算一个对象(包括其子对象)的与世界轴对齐的边界框,同时考虑到该对象和子对象的世界变换。
在边界框中,您可以确定相机的放置位置。有关该主题的更多信息,请参见如何使相机适合对象。
编辑-在您的情况下,object
将是您的“根”父母Object3D
。如果您想要一个边界球,则可以使用以下模式:
var sphere = new THREE.Box3().setFromObject( object ).getBoundingSphere();
three.js r.64
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句