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 报告的值。
该.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)