Ортографическая проекция в современном OpenGL - PullRequest
2 голосов
/ 10 декабря 2011

Я бы хотел настроить ортографическую проекцию, используя только современные методы OpenGL (то есть, никаких вещей в непосредственном режиме). Я вижу противоречивую информацию в Интернете о том, как подойти к этому.

Некоторые люди говорят, что все еще нормально звонить glMatrixMode(GL_PROJECTION), а затем glOrtho. В прошлом это всегда работало для меня, но мне интересно, не было ли это устаревшим в современном OpenGL.

Если да, то являются ли вершинные шейдеры стандартным способом создания ортогональной проекции в наши дни? Предоставляет ли GLSL удобную встроенную функцию для настройки ортографической проекции, или мне нужно написать эту математику самостоятельно в вершинном шейдере?

Ответы [ 3 ]

4 голосов
/ 10 декабря 2011

Если да, то являются ли сегодня вершинные шейдеры стандартным способом создания ортографической проекции?

Не совсем. Вершинные шейдеры выполняют вычисления, но матрицы преобразования обычно передаются в шейдер через униформу. Шейдер должен оценивать только то, что зависит от каждой вершины. Реализация функции «орто» возвращает матрицу проекции в GLSL контрпродуктивно.

Я бы хотел настроить ортографическую проекцию, используя только современные методы OpenGL (то есть, никаких вещей в непосредственном режиме). Я вижу противоречивую информацию в Интернете о том, как подойти к этому.

Матричный стек OpenGL до версии 3 не имеет ничего общего с непосредственным режимом. Непосредственный режим был glBegin(…); for(…){ ...; glVertex(…);} glEnd(). И вплоть до версии 3 OpenGL довольно часто использовались матрицы, указанные через стек матриц в вершинном шейдере.

С OpenGL-3 он был нацелен на то, что изначально планировалось для OpenGL-2: унификация API и удаление старого хлама. Одной из тех вещей, которые были удалены, был стек матрицы. Во всяком случае, многие шейдеры уже использовали больше, чем стандартные матрицы (как, например, для скелетной анимации), поэтому матрицы уже были переданы как униформы, и программы уже содержали весь матричный математический код. Следующим логическим шагом было сделать шаг по отзыву математической математики из OpenGL-3.

2 голосов
/ 10 декабря 2011

Как правило, вы не вычисляете матрицы в шейдерах. Вы вычисляете их на ЦП и загружаете их как uniform s в шейдеры. Таким образом, ваш вершинный шейдер не будет ни знать, ни заботиться о том, предназначен ли он для орфографической или перспективной проекции. Он просто трансформируется в любую проекционную матрицу.

0 голосов
/ 10 декабря 2011

Когда вы нацеливаетесь на версию OpenGL> 3.0, glOrtho был удален из официальных спецификаций (но все еще присутствует в профиле совместимости), поэтому вы не должны больше его использовать.Поэтому вам нужно будет рассчитать проекцию, которую вы хотите использовать непосредственно внутри вершинного шейдера (для OpenGL до 3.0 glOrtho совершенно нормально;).

И нет никакой «удобной» функции для получения проекцииМатрица в GLSL, поэтому вы должны указать это самостоятельно.Это, однако, не проблема, так как есть а) множество примеров кода в сети и б) уравнения прямо в спецификации OpenGL, так что вы можете просто взять их оттуда, если хотите.

...