我正在开发一个显示一些 3D 模型的应用程序。我们加载模型,创建网格,将它们添加到场景中……标准程序。添加最后一个网格后,我们计算边界框以移动相机并覆盖所有场景,使用总几何体的大小和视口的大小进行数学运算。
if (bounds.bx / bounds.by < camera.aspect) {
/* Vertical max */
r = bounds.by / (2 * Math.tan(Math.PI / 8));
} else {
/* Horizontal max */
hFOV = 2 * Math.atan(Math.tan(Math.PI / 8) * camera.aspect);
r = bounds.bx / (2 * Math.tan((hFOV / 2)));
}
bounds
是一个包含边界框宽度和高度的对象。在这个计算之后,我们移动相机(加上一点比例,只是美学,我们希望几何体和屏幕边框之间有一点空间:))并渲染
camera.position.z = r * 1.05;
到目前为止,这已实现并且运行正常。这是使用 PerspectiveCamera 完成的。现在我们想改变它并使用 OrthographicCamera……结果是一团糟。模型太小,我们失去了轨迹球控件的鼠标滚轮缩放,移动相机的算法不再起作用。另外我不明白相机构造函数的参数......这些宽度和高度是用于几何图形还是视口?