计算球体的相机fov距离

时间:2014-03-19 08:35:13

标签: javascript three.js

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

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

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

fiddle

1 个答案:

答案 0 :(得分:2)

球体被剪裁是出于同样的原因,如果你站在一个大球体附近,你就看不到它的北极"。

您需要对通过球体的前面而不是其中心的平面进行计算。

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

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

编辑:好的,这是确切的答案。

var dist =  radius / ( Math.sin( camera.fov * ( Math.PI / 180 ) / 2 ) );

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

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