В библиотеке OpenGL геометрические преобразования выполняются как умножение матрицы на столбец. Можно проверить самостоятельно, что при этом в уравнении (24.3) необходимо использовать транспонированную матрицу С, а объединение последовательности геометрических преобразований получается произведением матриц с записью сомножителей справа налево.

К сказанному следует добавить, что матрицы, объявляемые в языках программирования С++ и Паскаль, хранятся в оперативной памяти по строкам, а функции работы с матрицами, реализованные внутри OpenGL, предполагают, что матрица хранится по столбцам. Поэтому матрицы преобразований для OpenGL необходимо объявлять транспонированными по отношению к их виду в аналитических выкладках.

Ознакомившись с этими рассуждениями, можно сказать, что для библиотеки OpenGL матрицы геометрических преобразований задаются в том же виде, что и для DirectX. Но порядок следования сомножителей при выполнении одинаковых последовательностей действий в этих библиотеках будет противоположным. Кроме того, необходимо учитывать, что по умолчанию после инициализации библиотеки в OpenGL ось Z мировой системы координат направлена противоположно взгляду наблюдателя, а в DirectX направление линии визирования совпадает с направлением оси Z.

Рассмотренные примеры кажутся очевидными, но их нужно хорошо понимать, чтобы графическая система работала именно так, как ожидает разработчик приложения.

Вращение объектов вокруг координатных осей Вращение точки в трехмерном пространстве обычно сводится к последовательности плоских поворотов в координатных плоскостях. Так, матрицу поворота точки вокруг оси / можно записать, учитывая, что координата 2 не изменяется, а новые значения X1, У1 получаются по уже известным формулам поворота в плоскости ХУ: При перечислении систем координат, используемых графической системой, указывалось, что алгебраические выражения, описывающие перемещения и повороты, надо правильно соотносить с направлением вращения в пространстве. Так, в двумерном случае считается, что при увеличении угла а единичный вектор (cos (а), sin (а)) вращается против часовой стрелки. Это означает, что поворот вектора, направленного вдоль оси X, на 90° в положительном направлении совмещает его с направлением оси У. В пространстве эти два утверждения не обязательно выполняются одновременно. Обычно производится вращение в одной из


⇐ Предыдущая| |Следующая ⇒