Как перейти от модельного пространства к орфографическому виду в OpenGL 3.0+?

Я недавно закончил несколько примеров в OpenGL, в результате чего я нарисовал несколько треугольников в пространстве -1 >= x <= 1, -1 >= y <= 1, Что мне нужно сделать, чтобы перейти в ортографический вид? Какие преобразования мне нужно выполнить? Я предполагаю, что результирующее преобразование будет установлено в вершинный шейдер как единая переменная, а затем применено к любым входящим вершинам.

Целесообразно ли использовать пиксели в качестве масштаба представления (например, 1024x768) или использовать логические единицы (например, пиксели x1000)?

1 ответ

Что мне нужно сделать, чтобы перейти в ортографический вид? Какие преобразования мне нужно выполнить?

Вы должны применить ортографическую проекцию. Обратите внимание, что преобразование идентичности, которое вы использовали до сих пор, уже является орфографическим.

Хорошей идеей будет разложить процесс преобразования на преобразования проекции и представления модели. Каждый из них описывается матрицей 4×4, которую вы, как право, передаете в виде вершин в вершинный шейдер.

Типичный макет вершинного шейдера выглядит

#version 120 /* or something later */

attribute vec4 position;

uniform mat4 proj;
uniform mat4 mv;

varying vec4 vert_pos; // for later versions of GLSL replace 'varying' with 'out'

void main()
{
    // order matters, matrix multiplication is not 
    vert_pos = proj * mv * position; commutative */
}

Сама матрица проекции должна быть предоставлена ​​вами. Вы можете посмотреть на старые спецификации OpenGL с фиксированными функциями, чтобы увидеть, как они реализованы. Или вы используете готовую графическую математическую библиотеку, например →GLM или (самореклама) → linmath.h

Обновление из-за комментария

Преобразование вида модели используется для установки точки обзора и размещения геометрии, нарисованной на сцене. В общем, вид модели обычно отличается для каждой нарисованной модели. Само представление модели может быть разложено на модель и представление. Представление - это то, что некоторые люди устанавливают, используя какую-то функцию "lookAt". И модель является частью размещения геометрии.

Проекция - это своего рода "линза" OpenGL и то, что отвечает за "орто" или "перспективу" или любой другой вид.

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

Другие вопросы по тегам