THREE.JS: вычисление FOV камеры от ее положения и наоборот - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть самолет прямоугольной формы и камера, установленная перпендикулярно ему.

scene

Вид рендерера также в квадрате.

Камера могла перемещаться только вдоль оси Z от плоскости (0 ... бесконечность). Я ищу формулу для вычисления FOV по обновленному Z, поэтому плоскость будет того же размера, что и вид рендерера.

И наоборот, чтобы пересчитать положение камеры Z для заданного поля зрения, чтобы плоскость квадрата соответствовала квадрату вида рендерера.

Попробовал поиграть с формулой

var FOV = 2 * Math.atan( planeWidth / ( 2 * camera.position.z ) );

и

var FOV = 2 * Math.atan((aspect) / (2 * camera.position.z)) * (180 / Math.PI); //aspect is 1.0

Безуспешно. Есть идеи?

1 Ответ

0 голосов
/ 07 сентября 2018

В случае, если представление визуализатора возведено в квадрат, поэтому ширина равна высоте, а соотношение сторон равно 1,0, вы можете использовать следующие формулы:

//FOV from distance
FOV = THREE.Math.radToDeg(Math.atan(renderWidth / Math.abs(distance * 2))) * 2;

//distance from FOV
distance = renderWidth / (2 * Math.tan(THREE.Math.degToRad(FOV / 2)))

Просто так.

...