В OpenGL, как я могу определить границы вида на заданной глубине - PullRequest
3 голосов
/ 11 июля 2011

Я играю с OpenGL, и у меня есть вопрос, на который я не смог найти ответ или, по крайней мере, не нашел правильный способ задать вопрос поисковым системам. У меня довольно простая настройка. Окно просмотра 800x600 и матрица проекции с полем зрения 45 градусов и ближней и дальней плоскостями 1,0 и 200,0. Для обсуждения, матрица вида модели - это единичная матрица.

Я пытаюсь определить границы вида на заданной глубине. Например, (0,0,0) является центром экрана. И я смотрю в направлении -Z.

Я хочу знать, если я рисую геометрию на плоскости 100 единиц на экране (0,0, -100), каковы границы вида? Как далеко я могу нарисовать в этой плоскости, и геометрия все еще будет видна.

В более общем смысле, учитывая плоскость, параллельную ближней и дальней плоскостям (и между ними), каковы видимые границы этой плоскости?

Кроме того, если то, что я пытаюсь определить, имеет общее имя или является обычной операцией, как оно называется? Таким образом я могу отследить больше материалов для чтения

1 Ответ

10 голосов
/ 12 июля 2011

Ваш угол обзора составляет 45 градусов, у вас есть самолет на некотором расстоянии от камеры, с неизвестной высотой h. Все выглядит так: Diagram Обратите внимание, что угол здесь равен половине вашего поля зрения.

Отряхивая учебники по математике в старшей школе, мы получаем:

tan(angle) = h/a

Переставить на h и заменить половину поля зрения:

h = tan(FieldOfView / 2) * a;

Это то, насколько ваша плоскость простирается вверх вдоль оси Y.

Поскольку экраны не квадратные, ширина вашей плоскости отличается от высоты. Точнее, ширина - это соотношение сторон, умноженное на высоту. То есть w = h * aspectRatio

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...