Вычислительный FOVX (openGL) - PullRequest
3 голосов
/ 31 марта 2011

При работе с перспективами openGL я не совсем уверен, как вычислить fovx из fovy.Я читаю разные вещи в разных местах, и я не получаю правильное поведение, используя любой метод, который я нашел.Так может кто-нибудь сказать мне, учитывая fovy камеры и соотношение сторон, как я могу рассчитать fovx камеры?Если нужны какие-то другие данные, это нормально, просто дайте мне знать, что мне нужно.Огромное спасибо заранее!

Ответы [ 4 ]

7 голосов
/ 31 марта 2011

Правильно:

fieldOfViewX = 2 * atan(tan(fieldOfViewY * 0.5) * aspect)

Неправильно, особенно для крупных аспектов, см. Комментарии @ gman ниже:

Aspect ratio === width/height
fovy ~= "height" 
==> fovx = fovy * aspect

Тест:

Fovy = 60 degs
Aspect = 4:3 ~= 1.33
Fovx = 60*1.33 = 80
80/60 = 4:3 (fovs match, yay)

Для "разумных" областей / аспектов простой метод "разумно" близок к истине, но если у вас есть экстремальные аспекты, вы получите fovx> 180 градусов, что вам не нужно.

1 голос
/ 02 января 2013

Вот хорошая ссылка:

http://wiki.panotools.org/Field_of_View

Обратите внимание, что соотношение сторон - это не то же самое, что соотношение полей в поле зрения, и правильное соотношение, указанное на этой странице, должноиспользоваться для соотнесения углов поля зрения.

1 голос
/ 04 ноября 2011

Java:

double d = (viewportHeight * 0.5) / Math.tan(Math.toRadians(fovY * 0.5));

fovX = (float) (2 * Math.toDegrees(Math.atan((viewportWidth * 0.5) / d)));
0 голосов
/ 31 марта 2011

Вы смотрели здесь формулы?

1002 *http://en.wikipedia.org/wiki/Angle_of_view
...