Преобразование представления (Direct3D 9)
В этом разделе приведены основные понятия преобразования представления и подробные сведения о настройке матрицы преобразования представления в приложении Direct3D.
Преобразование представления находит средство просмотра в пространстве мира, преобразуя вершины в пространство камеры. В пространстве камеры, камера или зритель, находится в источнике, глядя в положительном z-направлении. Напомним, что Direct3D использует левую систему координат, поэтому z положительно в сцене. Матрица представления перемещает объекты в мире вокруг позиции камеры - источник пространства камеры - и ориентация.
Существует множество способов создания матрицы представления. Во всех случаях камера имеет некоторую логическую позицию и ориентацию в пространстве мира, которая используется в качестве отправной точки для создания матрицы представления, которая будет применяться к моделям в сцене. Матрица представления преобразует и поворачивает объекты, чтобы поместить их в пространство камеры, где камера находится в источнике. Одним из способов создания матрицы представления является объединение матрицы перевода с матрицами поворота для каждой оси. В этом подходе применяется следующее общее уравнение матрицы.
В этой формуле V — это созданная матрица представления, T — это матрица перевода, которая перемещает объекты в мире и Rₓ через Rz являются матрицами поворота, которые поворачивают объекты вдоль оси X, Y и Z. Матрицы перевода и поворота основаны на логическом положении и ориентации камеры в мировом пространстве. Таким образом, если логическая позиция камеры в мире <10 20 1000>, цель матрицы перевода — переместить объекты -10 единиц вдоль оси x, -20 единиц вдоль оси y и -100 единиц вдоль оси z. Матрицы поворота в формуле основаны на ориентации камеры с точки зрения того, сколько осей камеры поворачиваются вне выравнивания с мировым пространством. Например, если камера, упомянутая ранее, указывает прямо вниз, ее ось z составляет 90 градусов (pi/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 использует матрицы мира и представления для настройки нескольких внутренних структур данных. Каждый раз, когда вы устанавливаете новую матрицу мира или представления, система пересчитывает связанные внутренние структуры. Настройка этих матриц часто занимает много времени. Можно свести к минимуму количество необходимых вычислений, объединив мир и матрицы представления в матрицу мирового представления, которую вы задали в качестве матрицы мира, а затем установив матрицу представления для удостоверения. Сохраняйте кэшированные копии отдельных миров и матрицы представления, которые можно изменять, объединять и сбрасывать матрицу мира по мере необходимости. Для ясности примеры редко используют эту оптимизацию.
Связанные разделы