«длина объектива» не имеет смысла.«Объектив» в OpenGL и DirectX представляет собой камеру с точечным отверстием и, следовательно, не имеет размера (т.е. он бесконечно мал).
Если вы говорите о фокусном расстоянии, то опять же это не имеет отношения, поскольку фокусное расстояние подразумеваетобъектив, а также глубина резкости.
Однако вы можете рассчитать положение камеры относительно экрана в любых единицах измерения, которые вам нравятся (это преподавалось мне как «Перспективная контрольная точка»).
Допустим, ширина экрана составляет 1 метр, а угол обзора - 90 градусов (PI / 2 радиана).Используя базовую тригонометрию, вы знаете, что
tan( fov / 2 ) = opposite/adjacent.
Вы знаете обратное (как половина метра, то есть половина экрана)
Таким образом, чтобы вычислить смежные (то есть расстояние от экрана доположение камеры) вы просто делаете:
adjacent = opposite / tan( fov / 2 )
С простыми числами, приведенными выше, получается:
adjacent = 0.5 / tan( PI / 4 )
=> 0.5 / 1.0
=> 0.5
, т. е. в этом случае камера будет на расстоянии полуметра от экрана (Совершенно логично, когда вы думаете о поле зрения в 90 градусов.)
Модули, конечно, несколько произвольны ...
Если вы посмотрите на это.Чем ближе положение камеры к экрану, тем шире поле зрения и, в равной степени, чем дальше положение камеры, тем уже поле зрения.Если вы вытянете их, вы поймете, почему.
Исходя из этого, вы можете рассчитать идеальный угол обзора для человека, сидящего на расстоянии "n" метров от экрана ...