THREE.js PerspectiveCamera focusLength缩小了两倍,与FOV不一致

时间:2018-12-21 08:50:25

标签: three.js perspectivecamera

在THREE.js中,我们使用以下功能构建摄像头

const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);

从光学器件中我们知道,摄像机的视野与焦距之间的关系如下:

FOV = arctan(d/2f)

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

在读完the documentation后,似乎d默认设置为35mm / aspectRatio

我们可以这样表达FOV

FOV = arctan((35/(width/height))/2f) = arctan(filmHeight / 2f)

作为健全性检查,我打印了以下值,以查看是否可以取回75的输入FOV。

Math.atan(camera.getFilmHeight()/(2 * camera.getFocalLength())) * 180 / Math.PI;

但是..这个值是37.50000000000001

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

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

1 个答案:

答案 0 :(得分:2)

.fov角是

  

摄像机视锥台垂直视场,从底部到顶部,以度为单位。

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

Math.atan( (camera.getFilmHeight()/2) / camera.getFocalLength())) * 180 / Math.PI;

这确实是.fov的一半:

fov = 2 * Math.atan( (camera.getFilmHeight()/2) / camera.getFocalLength())) * 180 / Math.PI;