Обзор преобразования
Преобразования матрицы обрабатывают много низкоуровневой математики трехмерной графики.
Конвейер геометрии принимает вершины в качестве входных данных. Модуль преобразования применяет мир, представление и проекцию преобразования к вершинам, клипирует результат и передает все в растризатор.
Преобразование и пространство | Description |
---|---|
Координаты модели в пространстве модели | В начале конвейера вершины модели объявляются относительно локальной системы координат. Это локальный источник и ориентация. Эта ориентация координат часто называется пространством модели. Отдельные координаты называются координатами модели. |
Мир преобразуется в пространство мира | Первый этап конвейера геометрии преобразует вершины модели из локальной системы координат в систему координат, которая используется всеми объектами в сцене. Процесс переориентации вершин называется преобразованием Мира, которое преобразуется из пространства модели в новую ориентацию, называемую мировым пространством. Каждая вершина в мировом пространстве объявлена с помощью координат мира. |
Преобразование представления в пространство просмотра (пространство камеры) | На следующем этапе вершины, описывающие трехмерный мир, ориентированы на камеру. То есть приложение выбирает точку зрения для сцены, а координаты мирового пространства перемещаются и поворачиваются вокруг представления камеры, превращая пространство мира в пространство просмотра (также известное как пространство камеры). Это преобразование представления, которое преобразуется из мирового пространства для просмотра пространства. |
Преобразование проекции в пространство проекции | Следующий этап — преобразование проекции, которое преобразуется из пространства представления в пространство проекции. В этой части конвейера объекты обычно масштабируются по отношению к их расстоянию от средства просмотра, чтобы дать иллюзию глубины сцене; Закрываемые объекты создаются для отображения большего размера, чем удаленные объекты. Для простоты эта документация ссылается на пространство, в котором вершины существуют после преобразования проекции в качестве пространства проекции. Некоторые графические книги могут ссылаться на пространство проекции как однородное пространство после перспективы. Не все преобразования проекции масштабирует размер объектов в сцене. Такая проекция иногда называется аффинной или ортогональной проекцией. |
Вырезка в пространстве экрана | В последней части конвейера все вершины, которые не будут видимы на экране, удаляются, чтобы растризатор не занимает время, чтобы вычислить цвета и затенение для чего-то, что никогда не будет видно. Этот процесс называется вырезки. После вырезки остальные вершины масштабируются в соответствии с параметрами окна просмотра и преобразуются в координаты экрана. Полученные вершины, видимые на экране, когда сцена растеризована, существуют в пространстве экрана. |
Преобразования используются для преобразования геометрии объектов из одного пространства координат в другое. Direct3D использует матрицы для выполнения трехмерных преобразований. Матрицы создают трехмерные преобразования. Матрицы можно объединить для создания одной матрицы, которая охватывает несколько преобразований.
Можно преобразовать координаты между пространством модели, пространством мира и пространством просмотра.
- Преобразование мира — преобразуется из пространства модели в мир.
- Преобразование представления — преобразуется из мирового пространства для просмотра пространства.
- Преобразование проекции — преобразуется из пространства представления в пространство проекции.
Преобразования матрицы
В приложениях, работающих с трехмерной графикой, можно использовать геометрические преобразования для выполнения следующих действий:
- Выражение расположения объекта относительно другого объекта.
- Поворот и размер объектов.
- Изменение позиций, направлений и перспектив.
Вы можете преобразовать любую точку (x,y,z) в другую точку (x', y', z') с помощью матрицы 4x4, как показано в следующем уравнении.
Выполните следующие уравнения (x, y, z) и матрицу, чтобы создать точку (x', y', z).
Наиболее распространенными преобразованиями являются преобразование, поворот и масштабирование. Матрицы, которые создают эти эффекты, можно объединить в одну матрицу, чтобы вычислить несколько преобразований одновременно. Например, можно создать одну матрицу для преобразования и поворота ряда точек.
Матрицы записываются в порядке столбцов строк. Матрица, которая равномерно масштабирует вершины вдоль каждой оси, известной как равномерное масштабирование, представлена в следующей матрице с помощью математической нотации.
В C++Direct3D объявляет матрицы в виде двухмерного массива с помощью структуры матрицы. В следующем примере показано, как инициализировать структуру D3DMATRIX для работы в качестве единой матрицы масштабирования (коэффициент масштабирования "s").
D3DMATRIX scale = {
5.0f, 0.0f, 0.0f, 0.0f,
0.0f, 5.0f, 0.0f, 0.0f,
0.0f, 0.0f, 5.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
Перевести
Следующее уравнение преобразует точку (x, y, z) в новую точку (x', y', z').
Матрицу перевода можно создать вручную в C++. В следующем примере показан исходный код функции, создающей матрицу для преобразования вершин.
D3DXMATRIX Translate(const float dx, const float dy, const float dz) {
D3DXMATRIX ret;
D3DXMatrixIdentity(&ret);
ret(3, 0) = dx;
ret(3, 1) = dy;
ret(3, 2) = dz;
return ret;
} // End of Translate
Шкала
Следующее уравнение масштабирует точку (x, y, z) произвольными значениями в направлениях x, y и z до новой точки (x', y', z').
Вращать
Описанные здесь преобразования предназначены для систем координат левой руки и поэтому могут отличаться от матриц преобразования, которые вы видели в другом месте.
Следующее уравнение поворачивает точку (x, y, z) вокруг оси x, создавая новую точку (x', y', z').
Следующее уравнение поворачивает точку вокруг оси Y.
Следующее уравнение поворачивает точку вокруг оси Z.
В этих примерах матрицы греческие буквы тета обозначает угол поворота в радианах. Угловы измеряются по часовой стрелке при просмотре по оси поворота по отношению к источнику.
В следующем коде показана функция для обработки поворота по оси X.
// Inputs are a pointer to a matrix (pOut) and an angle in radians.
float sin, cos;
sincosf(angle, &sin, &cos); // Determine sin and cos of angle
pOut->_11 = 1.0f; pOut->_12 = 0.0f; pOut->_13 = 0.0f; pOut->_14 = 0.0f;
pOut->_21 = 0.0f; pOut->_22 = cos; pOut->_23 = sin; pOut->_24 = 0.0f;
pOut->_31 = 0.0f; pOut->_32 = -sin; pOut->_33 = cos; pOut->_34 = 0.0f;
pOut->_41 = 0.0f; pOut->_42 = 0.0f; pOut->_43 = 0.0f; pOut->_44 = 1.0f;
return pOut;
}
Сцепляющие матрицы
Одним из преимуществ использования матриц является объединение эффектов двух или нескольких матриц путем умножения их. Это означает, что для поворота модели и перевода ее в некоторое расположение не требуется применять две матрицы. Вместо этого вы умножаете матрицы поворота и перевода, чтобы создать составную матрицу, содержащую все их эффекты. Этот процесс, называемый объединением матриц, можно записать с помощью следующего уравнения.
В этом уравнении C — это составная матрица, созданная, и M₁ через Mn являются отдельными матрицами. В большинстве случаев сцепляются только две или три матрицы, но нет предела.
Порядок, в котором выполняется умножение матрицы, имеет решающее значение. Предыдущая формула отражает правило объединения матрицы слева направо. То есть видимые эффекты матриц, которые используются для создания составной матрицы, происходят в левом порядке вправо. Типичная матрица мира показана в следующем примере. Представьте, что вы создаете мировую матрицу для стереотипного летающего соуса. Вы, вероятно, хотите спина летающего соуса вокруг своего центра - ось Y пространства модели - и перевести его в другое место в вашей сцене. Для этого сначала создайте матрицу поворота, а затем умножьте ее на матрицу перевода, как показано в следующем уравнении.
В этой формуле Ry представляет собой матрицу для поворота вокруг оси y , а Tw — преобразование в некоторое положение в координатах мира.
Порядок умножения матриц важен, так как, в отличие от умножения двух скалярных значений, умножение матрицы не является коммутативным. Умножение матриц в противоположном порядке имеет визуальный эффект перевода летающего соуса в его положение мирового пространства, а затем поворот его по всему миру происхождения.
Независимо от типа создаваемой матрицы помните правило слева направо, чтобы обеспечить достижение ожидаемых эффектов.
Связанные темы