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

Трехмерное положение, выраженное в однородных координатах, представляется четырехэлементным вектором-столбцом. Следовательно, каждый оператор геометрического преобразования - это матрица 4 на 4, которая множится слева на вектор-столбец. Кроме того (как и в двух измерениях), любая последовательность преобразований представляется одной матрицей, сформированной последовательной сверткой матриц отдельных преобразований. Каждая следующая матрица последовательности преобразований действует слева на предыдущую матрицу преобразования.

ТРЕХМЕРНАЯ ТРАНСЛЯЦИЯ

Приведенный ниже фрагмент программы иллюстрирует построение матрицы трансляции для данного входного набора параметров трансляции. Чтобы построить матрицы, в этих процедурах используются методы, подобные примененным в программе из раздела 5.4.

typedef GLfloat Matrix4x4 [4][4];

/* Построение единичной матрицы 4 на 4. */ void matrix4x4SetIdentity (Matrix4x4 matldent4x4)

i

GLint row, col;

for (row = 0; row <4; row++)

for (col = 0; col < 4 ; col++)

matldent4x4 [row][col] = (row == col);

}

void translate3D (GLfloat tx, GLfloat ty, GLfloat tz)

{

Matrix4x4 matTransl3D;

/* Матрица трансляции инициализируется как единичная. */

matrix4x4SetIdentity (matTransl3D);

matTransl3D [0][3] - tx;

matTransl3D [1][3] = ty;

matTransl3D [2][3] = tz;

}

ТРЕХМЕРНЫЙ ПОВОРОТ

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

По договоренности положительные углы поворота дают повороты против часовой стрелки вокруг координатной оси при условии, что мы смотрим в отрицательном направлении координатной оси (рис. 5.36). Это согласуется с предыдущим обсуждением поворотов в двух измерениях на плоскости ху, которые выполняют против часовой стрелки вокруг оси вращения (линия, параллельная оси г).

СЛОЖНЫЕ ТРЕХМЕРНЫЕ ПРЕОБРАЗОВАНИЯ

Как и при двухмерных преобразованиях, матрица сложного трехмерного преобразования формируется умножением матричных представлений отдельных операций последовательности преобразований. Любую последовательность двухмерных преобразований, рассмотренных в разделе 5.4 (например, масштабирование в направлении, не совпадающем с координатной осью), можно выполнить в трехмерном пространстве.


⇐ вернуться назад | | далее ⇒