THREE.js PerspectiveCamera focusLength 关闭两倍,与 FOV 不一致

Car*_*izz 5 javascript perspectivecamera three.js

在 THREE.js 中,我们使用以下函数构建了一个相机

const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
Run Code Online (Sandbox Code Playgroud)

我们从光学中知道,相机的视野与焦距通过以下等式有关

FOV = arctan(d/2f)
Run Code Online (Sandbox Code Playgroud)

其中FOV是以度为单位的垂直 FOV,d以毫米为单位的图像平面高度,以及以毫米f为单位的相机焦距。

阅读有关此事的文档后,似乎d默认设置为35mm / aspectRatio.

我们可以表达FOV这样的

FOV = arctan((35/(width/height))/2f) = arctan(filmHeight / 2f)
Run Code Online (Sandbox Code Playgroud)

作为健全性检查,我打印了以下值,以查看是否能取回75.

Math.atan(camera.getFilmHeight()/(2 * camera.getFocalLength())) * 180 / Math.PI;
Run Code Online (Sandbox Code Playgroud)

但是..这个值是 37.50000000000001

这恰好是 的预期焦距的一半75

所以,我想知道我是否在某个地方做错了数学,或者我是否误解了 THREE.js 报告的值。

Rab*_*d76 6

.fov角是

相机视锥垂直视野,从底部到顶部,以度为单位。

但是你计算的是,视图中心到顶部的角度:

Math.atan( (camera.getFilmHeight()/2) / camera.getFocalLength())) * 180 / Math.PI;
Run Code Online (Sandbox Code Playgroud)

这确实是以下的一半.fov

fov = 2 * Math.atan( (camera.getFilmHeight()/2) / camera.getFocalLength())) * 180 / Math.PI;
Run Code Online (Sandbox Code Playgroud)