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