БАЗОВЫЕ ГЕОМЕТРИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ OpenGL

Матрица преобразования 4 на 4 строится с помощью следующей процедуры:

glTranslate* (tx, ty, tz); Параметры трансляции tx, ty и tz могут принимать любое действительное значение, и к этой функции может присоединяться единственный код-суффикс: f (float) или d (double). В двухмерных приложениях полагается tz = 0.0. Кроме того, двухмерная точка представляется четырехэлементным вектором-столбцом, компонент 2 которого равен 0.0. Матрица трансляции, генерируемая этой функцией, используется для преобразования положений объектов, определенных после вызова этой функции. Например, с помощью приведенной ниже команды определяемая далее точка транслируется на 25 единиц в направлении оси х и на -10 единиц в направлении оси у:

glTranslatef (25.0, -10.0, 0.0); Аналогично матрица поворота 4 на 4 генерируется командой

glRotate* (thêta, vx, vy, vz); Здесь компоненты вектора v = (vx, vy, vz) могут иметь любые значения с плавающей запятой. Данный вектор определяет ориентацию оси вращения, проходящей через начало координат. Если v не задан как единичный, тогда он автоматически нормируется перед вычислением элементов матрицы поворота. Код-суффикс может иметь значение f или d, а параметру thêta присваивается значение угла поворота в градусах, которое процедура переводит в радианы для тригонометрических расчетов. Данная функция генерирует матрицу поворота, которая используется в кватернион-ных расчетах (к точкам, определенным после вызова этой функции, применяется уравнение (5.108)). Например, команда

glRotatef (90.0, 0.0, 0.0, 1.0); задает матрицу поворота на 90° вокруг оси 2.

Матрица масштабирования 4 на 4 относительно начала координат задается следующей процедурой:

glScale* (sx, sy, sz); Код-суффикс снова может иметь значение f или d, а в качестве параметров масштабирования используются любые действительные значения. Таким образом, данная функция также подходит для генерации отражений, для этого коэффициентам масштабирования присваиваются отрицательные значения. Например, приведенная ниже команда дает матрицу, которая масштабирует объект с коэффициентом 2 в направлении оси х, масштабирует с коэффициентом 3 в направлении у и отражает объект относительно оси х.

glScalef(2.0, -3.0, 1.0); Нулевое значение любого масштабного коэффициента может вызывать ошибку обработки, поскольку в этом случае нельзя вычислить обратную матрицу. Также отметим, что матрица масштабирования-отражения действует на впоследствии определенные объекты.

ОПЕРАЦИИ С МАТРИЦАМИ В OpenGL

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


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