Преобразование представления (Direct3D 9)
В этом разделе представлены основные понятия преобразования представления и приведены сведения о настройке матрицы преобразования представления в приложении Direct3D.
Видовое преобразование определяет положение наблюдателя в мировом пространстве и обеспечивает преобразование вершин в пространство камеры. В пространстве камеры камера, или наблюдатель, находится в начале координат и смотрит в направлении положительной полуоси Z. Помните, что Direct3D использует левую систему координат, поэтому z положительно передается в сцену. Видовая матрица переносит объекты в мировом пространстве относительно положения камеры — начала координат пространства камеры — и ориентации камеры.
Существует множество способов создания видовой матрицы. Во всех случаях камера имеет некоторые логическое положение и ориентацию в мировом пространстве, которые используются в качестве начальной точки для создания видовой матрицы, которая будет применяться к моделям в сцене. Видовая матрица параллельно переносит и поворачивает объекты, чтобы поместить их в пространство камеры, где камера находится в начале координат. Один из способов создания видовой матрицы — это сочетание матрицы параллельного переноса с матрицами поворота для каждой оси. При таком подходе применяется следующее общее матричное уравнение.
В этой формуле V — это создаваемая видовая матрица, T — матрица параллельного переноса, которая перемещает объекты в мире, а Rₓ – Rz — матрицы поворота, которые поворачивают объекты вокруг осей X, Y и Z. Матрицы параллельного переноса и поворота основываются на логическом положении и ориентации камеры в мировом пространстве. Таким образом, если логическое положение камеры в мире — <10,20,100>, задача матрицы параллельного переноса — переместить объекты на -10 единиц по оси X, на -20 единиц вдоль по Y и на -100 единиц по оси Z. Матрицы поворота в формуле основываются на ориентации камеры — на том, насколько оси пространства камеры повернуты по отношению к мировому пространству. Например, если упомянутая выше камера направлена прямо вниз, ее ось Z на 90 градусов (пи/2 радиана) повернута относительно оси Z мирового пространства, как показано на следующем рисунке.
Матрицы поворота применяют повороты равной — но противоположной — величины к моделям в сцене. Видовая матрица для этой камеры предполагает поворот на –90 градусов вокруг оси X. Матрица поворота объединяется с параллельного переноса для создания видовой матрицы, которая корректирует положение и ориентацию объектов в сцене так, что их верх обращен к камере, создавая впечатление, что камера находится над моделью.
Установка видовой матрицы
Вспомогательные функции D3DXMatrixLookAtLH и D3DXMatrixLookAtRH создают матрицу представления на основе расположения камеры и точки просмотра.
В следующем примере создается матрица представления для левосторонней координаты.
D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);
Direct3D использует мировую матрицу и видовую матрицу для конфигурирования нескольких внутренних структур данных. Каждый раз, когда вы устанавливаете новую мировую или видовую матрицу, система пересчитывает соответствующие внутренние структуры. Частая установка этих матриц занимает много вычислительного времени. Свести к минимуму количество необходимых вычислений можно путем конкатенации мировой и видовой матриц в мировую-видовую матрицу, задать ее в качестве мировой матрицы, а затем установить видовую матрицу в единичную. Сохраняйте кэшированные копии отдельных мировых и видовых матриц, чтобы вы могли изменять, объединять и сбрасывать мировую матрицу по необходимости. Для ясности примеры редко используют эту оптимизацию.
Связанные темы