javascript - THREE.js PerspectiveCamera focusLength 相差两倍,与 FOV 不一致
问题描述
在 THREE.js 中,我们使用以下函数构造一个摄像头
const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
我们从光学中知道,相机的视场与焦距有关,公式如下:
FOV = arctan(d/2f)
其中FOV
是垂直 FOV,以度为单位,d
是图像平面的高度,以 mm 为单位,f
是相机的焦距,以 mm 为单位。
阅读有关此事的文档后,似乎d
默认设置为35mm / aspectRatio
.
我们可以FOV
这样表达
FOV = arctan((35/(width/height))/2f) = arctan(filmHeight / 2f)
作为健全性检查,我打印了以下值,以查看是否可以取回75
.
Math.atan(camera.getFilmHeight()/(2 * camera.getFocalLength())) * 180 / Math.PI;
但是..这个值是37.50000000000001
这恰好是预期焦距的一半75
。
所以,我想知道我是否在某个地方做错了数学,或者我是否误解了 THREE.js 的报告值。
解决方案
推荐阅读
- android - 找不到 `fun Cursor.getString(columnName: String): String` 实现
- android - Recycler View 中的约束设置动画未正确设置动画
- python - 使用 np.where 基于另一个维度设置一个 numpy 切片
- powershell - PowerShell没有从HTML解析方括号内的数据
- .net - .NET 有内置的多元化机制吗?
- regex - 使用 PRXNEXT 捕获关键字的所有实例
- mysql - MySQL 查询缓存或其他错误 (Codeigniter + MySQL)
- google-analytics - Google Tag Manger - 数据层变量 - 重复值集的解释
- c++ - Qt QGeoCoordinate 适应为 boost::geometry 点
- javascript - 数字输入字段 JavaScript 自定义验证