Javascript 使用three.js实现绕飞摄影机

Javascript 使用three.js实现绕飞摄影机,javascript,three.js,Javascript,Three.js,我是Three.js的新手,我想创建一个环绕场景的摄影机 我已经看到了三个。几何体有.computeBoundingSphere()方法和.boundingSphere属性,它们为我提供了对象边界球体的中心和半径。 假设我的场景中只有一个网格,我可以使用scene.children[0].computeBoundingSphere 想法是使用.boundingSphere.center设置myCamera.lookAt并使用.boundingSphere.center和.boundingSphe

我是Three.js的新手,我想创建一个环绕场景的摄影机

我已经看到了三个。几何体有
.computeBoundingSphere()
方法和
.boundingSphere
属性,它们为我提供了对象边界球体的中心和半径。 假设我的场景中只有一个网格,我可以使用
scene.children[0].computeBoundingSphere

想法是使用
.boundingSphere.center
设置
myCamera.lookAt
并使用
.boundingSphere.center
.boundingSphere.radius
以及我视角的Math.sin/cos设置myCamera位置

问题1:这是继续进行的最佳方式还是Three.js为该范围提供了任何特殊类或帮助程序


问题2:如果我的场景包含多个网格,并且我想要一个全局场景边界球体,该怎么办?我是否手动迭代了所有的
场景。孩子们(跳过摄影机、灯光等)并在数学上创建了单个网格的边界球的“边界球”,或者有更聪明的方法来做到这一点?是否可以添加一个包含所有“我的场景”网格的“根”虚拟对象,并作为其所有子对象边界球体的结果获取其边界球体?

是否查看位于的示例控件?使用/破解其中一个示例可能比从头开始创建自己的示例更容易。

您是否查看了位于的示例控件?使用/破解其中一个示例可能比从头开始创建自己的示例更容易。

three.js提供了几个摄像头控件示例<代码>轨道控制
轨迹球控制
很可能就是您要寻找的

Box3.setFromObject(object)
将计算对象(包括其子对象)的世界轴对齐边界框,同时考虑对象和子对象的世界变换

从边界框中,可以确定相机的设置位置。有关该主题的更多信息,请参阅

编辑-在您的情况下,
object
将是您的“根”父对象
Object3D
。如果需要边界球体,则应使用以下图案:

var sphere = new THREE.Box3().setFromObject( object ).getBoundingSphere();

three.js r.64

three.js提供了几个摄像头控件示例<代码>轨道控制或
轨迹球控制
很可能就是您要寻找的

Box3.setFromObject(object)
将计算对象(包括其子对象)的世界轴对齐边界框,同时考虑对象和子对象的世界变换

从边界框中,可以确定相机的设置位置。有关该主题的更多信息,请参阅

编辑-在您的情况下,
object
将是您的“根”父对象
Object3D
。如果需要边界球体,则应使用以下图案:

var sphere = new THREE.Box3().setFromObject( object ).getBoundingSphere();

three.js r.64

我看了一下:这似乎最符合我的需要。但是,它将相机放置在一个固定的距离(第63行),该距离不是根据场景边界球体计算的……我看了一下:这似乎最接近我的需要。但是,它会将相机放置在一个固定的距离(第63行),该距离不是基于场景边界球体计算的……您好,谢谢!有一个疑问:documentation()没有列出您提到的方法,但是查看source()时发现了该方法。那么文档的更新程度如何?我还发现了Box3中的getBoundingSphere方法,该方法与setFromObject结合使用可能会达到这个目的。我会试试看,然后回来。谢谢文件正在慢慢编写中。我强烈建议您始终阅读source.new THREE.Box3().setFromObject(objects.getBoundingSphere();假设“对象”是我所有场景网格的一个3.Object3D容器,谢谢!有一个疑问:documentation()没有列出您提到的方法,但是查看source()时发现了该方法。那么文档的更新程度如何?我还发现了Box3中的getBoundingSphere方法,该方法与setFromObject结合使用可能会达到这个目的。我会试试看,然后回来。谢谢文件正在慢慢编写中。我强烈建议您始终阅读source.new THREE.Box3().setFromObject(objects.getBoundingSphere();该技巧是否假设“对象”是所有场景网格的3.Object3D容器