计算球体的相机视距
calculate camera fov distance for sphere
我试图计算相机可以在屏幕上显示所有球体的同时放大球体的最大距离。
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,所以这是垂直方向的结果。如果窗口窄过宽,那么你就必须处理这个问题。
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- threejs - 仅使用 THREE 即可动态计算相机位置.点
- 正确的方法是什么,使用THREE.js方法来计算相机的偏航
- 将本地计算机上的相机捕获的图像保存在文件夹中
- 如何计算透视相机从一个位置到另一个位置所花费的时间
- 计算球体的相机视距