Системы координат (Direct3D 9)

Обычно трехмерные графические приложения используют два типа декартовых систем координат: левша и правша. В обеих системах координат положительная ось x указывает вправо, а положительная ось y — вверх. Можно запомнить, в каком направлении указывает положительная ось z, указав пальцами левой или правой руки в направлении положительной оси x и скруглив их в направлении положительной оси y. Направление, в котором указывают ваши пальцы (к вам или от вас), — это направление, в котором указывает положительная ось z в этой системе координат. На следующем рисунке показаны эти две системы координат.

изображение левосторонней и правосторонней Декартовых систем координат

В Direct3D используется левосторонняя система координат. При переносе приложения, основанного на правой системе координат, необходимо внести два изменения в данные, передаваемые в Direct3D.

  • Измените порядок вершин треугольников так, чтобы система обходила их по часовой стрелке от передней. Другими словами, если имеются вершины v0, v1, v2, передайте их в Direct3D как v0, v2, v1.
  • Используйте матрицу представления для масштабирования пространства на -1 по оси z. Для этого переверните знак _31, _32, _33 и _34 структуры D3DMATRIX , используемой для матрицы представления.

Чтобы получить значение, равное правшам, используйте функции D3DXMatrixPerspectiveRH и D3DXMatrixOrthoRH для определения преобразования проекции. Тем не менее, будьте осторожны, чтобы использовать соответствующую функцию D3DXMatrixLookAtRH , обратить вспять порядок отбраковки задней части и соответствующим образом разместить карты куба.

Несмотря на то что левосторонние и правосторонние системы координат относятся к наиболее распространенным, в программном обеспечении для работы с трехмерными объектами существует множество других систем координат. Например, приложения для трехмерного моделирования часто используют систему координат, в которой ось y указывает в направлении смотрящего или от него, а ось z — вверх.

Формально ориентацию набора базисных векторов (т. е. системы координат) можно найти путем вычисления детерминанта матрицы, определенной определенным набором базисных векторов. Если детерминант положительный, основа считается "положительной" ориентированной (или правой рукой). Если детерминант отрицательный, основа считается "отрицательной" ориентированной (или левой). Объяснение того, что такое детерминант, см. в любом ресурсе линейной алгебры.

В неофициальном порядке можно использовать "правило правой и левой руки", чтобы определить, образует ли данный набор базовых векторов либо правую, либо левшнюю систему координат.

Основными операциями, выполняемыми с объектами, определенными в трехмерной системе координат, являются преобразование, поворот и масштабирование. Можно комбинировать эти базовые трансформации и создавать матрицу трансформаций. Дополнительные сведения см. в разделе Преобразования (Direct3D 9).

При объединении этих операций результаты не будут коммутативными; важен порядок умножения матриц.

Системы координат и геометрия