我试图计算相机在球体上放大的最大距离,同时仍然在屏幕上显示所有球体。
var dist = diameter / (2 * Math.tan( camera.fov * (Math.PI/180) / 2 ));
这放大了很多。球体的顶部和底部被剪裁。 我做错了什么?
答案 0 :(得分:2)
球体被剪裁是出于同样的原因,如果你站在一个大球体附近,你就看不到它的北极"。
您需要对通过球体的前面而不是其中心的平面进行计算。
因此,您计算的数量是到球体前面的最小距离。到中心的最小距离是您计算的数量加上球体的半径。
(注意:由于球体的曲率,这将产生保守的近似。)
编辑:好的,这是确切的答案。
var dist = radius / ( Math.sin( camera.fov * ( Math.PI / 180 ) / 2 ) );
小提琴:http://jsfiddle.net/x98Fk/3/
three.js相机视野是垂直FOV,所以这是垂直方向的结果。如果窗口比它宽,那么你必须处理这个问题。