Преобразуйте модель 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].

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