计算球体的相机视距

calculate camera fov distance for sphere

本文关键字:相机 计算      更新时间:2023-09-26

我试图计算相机可以在屏幕上显示所有球体的同时放大球体的最大距离。

var dist =  diameter / (2 * Math.tan( camera.fov * (Math.PI/180) / 2 ));

这个放大得太多了。球体的顶部和底部被剪裁。我做错了什么?

小提琴

这个球体被夹住的原因和如果你站在一个大球体附近你看不到它的"北极"是一样的。

你需要对穿过球体正面而不是球体中心的平面进行计算。

因此,您计算的数量是到球体的最小距离。到球体中心的最小距离是你计算的量加上球体的半径。

(注意:这将产生一个保守的近似,由于球面的曲率。)

编辑:好的,这是确切的答案。
var dist =  radius / ( Math.sin( camera.fov * ( Math.PI / 180 ) / 2 ) );

小提琴:http://jsfiddle.net/x98Fk/3/

three.js相机的视场是垂直的FOV,所以这是垂直方向的结果。如果窗口窄过宽,那么你就必须处理这个问题。