В THREE.js мы строим камеру, используя следующую функцию
const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
Мы знаем из оптики, что поле зрения камеры связано с фокусным расстоянием следующим уравнением
FOV = arctan(d/2f)
, где FOV
- вертикальное поле обзора в градусах, d
- высота плоскости изображения в мм, а f
- фокусное расстояние камеры в мм.
Послечитая документацию по данному вопросу, кажется, что d
по умолчанию установлено в 35mm / aspectRatio
.
Мы можем выразить FOV
следующим образом
FOV = arctan((35/(width/height))/2f) = arctan(filmHeight / 2f)
В качестве проверки работоспособности я напечатал следующее значение, чтобы посмотреть, получу ли я возвращенное значение FOV 75
.
Math.atan(camera.getFilmHeight()/(2 * camera.getFocalLength())) * 180 / Math.PI;
Но ... это значение получается 37.50000000000001
, что составляет ровно половину ожидаемого фокусного расстояния 75
.
Итак, мне было интересно, если я где-то ошибся в математике, или я неверно интерпретирую сообщенные значения THREE.js.