Преобразуйте модель Matrix
Установить ViewMatrix с помощью glm легко:
glm::lookAt(Position, Direction, UpVector);
но если я попытаюсь использовать функцию с modelMatrix, я получу смешанные значения (модель не в правильном положении, а вращение выглядит неправильно). Я просто хочу установить объект таким же образом, как настройка камеры. Могу ли я использовать функцию lookAt и внести в нее некоторые изменения? Или я должен запрограммировать собственную функцию для этого? И если да, то как?
Я зафиксировал положение с этим:
m_Orientation = glm::lookAtLH(Position, Direction, UpVector);
m_Orientation[3][0] = -m_Orientation[3][0];
m_Orientation[3][1] = -m_Orientation[3][1];
m_Orientation[3][2] = -m_Orientation[3][2];
также внутри вершинного шейдера я использую это:
gl_Position = CameraMatrix * ModelMatrix * Pos;
где CameraMatrix - это viewProjectionMatrix, ModelMatrix (моя проблема), а Pos - положение моей вершины в пространстве модели
1 ответ
При рендеринге каждая сетка сцены обычно преобразуется матрицей модели, матрицей вида и матрицей проекции. Наконец, проецируемая сцена отображается в окне просмотра.
Координаты модели (координаты объекта)
Пространство модели - это локальное пространство, в котором определяется сетка. Координаты вершины определены в модельном пространстве.
например:
Мировые координаты
Мир - это система координат сцены. Различные модели (объекты) могут быть размещены несколько раз в мировом пространстве, чтобы сформировать сцену, вместе.
Модельная матрица
Матрица модели определяет местоположение, ориентацию и относительный размер модели (объекта, сетки) в сцене. Матрица модели преобразует позиции вершин одной сетки в мировое пространство для единого конкретного позиционирования. Существуют различные матрицы моделей, по одной для каждой комбинации модели (объекта) и местоположения объекта в пространстве мира.
Модель матрицы выглядит следующим образом:
( X-axis.x, X-axis.y, X-axis.z, 0 )
( Y-axis.x, Y-axis.y, Y-axis.z, 0 )
( Z-axis.x, Z-axis.y, Z-axis.z, 0 )
( trans.x, trans.y, trans.z, 1 )
например:
( 0.0, -0.5, 0.0, 0.0 )
( 2.0, 0.0, 0.0, 0.0 )
( 0.0, 0.0, 1.0, 0.0 )
( 0.4, 0.0, 0.0, 1.0 )
Просмотр изображения (Координаты глаза)
Пространство обзора - это локальная система, которая определяется точкой зрения на сцену. Положение вида, линия взгляда и направление взгляда вверх определяют систему координат относительно мировой системы координат. Объекты сцены должны быть нарисованы относительно системы координат вида, чтобы быть "видимыми" с позиции просмотра. Обратная матрица системы координат вида называется матрицей вида.
В общем, мировые координаты и координаты вида являются декартовыми.
Посмотреть матрицу
Система координат вида описывает направление и позицию, с которой просматривается сцена. Матрица вида трансформируется из пространства Вольда в пространство вида (глаза).
Если система координат пространства обзора является правосторонней, то ось X указывает влево, ось Y вверх и ось Z вне вида (обратите внимание, что в правой системе ось Z является перекрестным произведением осей X и Y).
Координаты клипа
Координаты пространства клипа являются однородными координатами. В пространстве клипа выполняется отсечение сцены.
Точка находится в пространстве клипа, если x
, y
а также z
компоненты находятся в диапазоне, определяемом инвертированным w
компонент и w
составляющая однородных координат точки:
-w <= x, y, z <= w.
Матрица проекции
Матрица проекции описывает отображение от трехмерных точек сцены к двухмерным точкам области просмотра. Матрица проекции преобразуется из пространства просмотра в пространство клипа. Координаты в пространстве клипа преобразуются в нормализованные координаты устройства (NDC) в диапазоне (-1, -1, -1) в (1, 1, 1) путем деления на w
компонент координат клипа.
например:
смотреть на: положение глаза (2,5, -1,5, 3,5), центр (2, 0, 0), вектор вверх (0, 1, 0)
перспективная проекция: поле зрения (у) 100 °, ближняя плоскость в 0,1, дальняя плоскость в 20,0
Нормалированные координаты устройства
Нормализованные координаты устройства - это координаты пространства клипа, деленные на w
компонент координат клипа. Это называется перспективным делением
Координаты окна (Экранные координаты)
Координаты окна - это координаты прямоугольника области просмотра. Окончательно координаты окна передаются в процесс ратификации.
Область просмотра и глубина
Нормализованные координаты устройства линейно отображаются в координаты окна (экранные координаты) и в глубину буфера глубины. Окно просмотра определяется glViewport
, Диапазон глубины устанавливается glDepthRange
и по умолчанию [0, 1].