Преобразования координат и проекции. OpenGL

Автор: Пользователь скрыл имя, 24 Декабря 2012 в 08:18, реферат

Описание работы

В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – в глубь экрана. Расположение осей x и y аналогично описанному выше. Левосторонняя система используется для задания значений параметрам команды gluPerspective(), glOrtho(), которые будут рассмотрены ниже, а правосторонняя или мировая система координат во всех остальных случаях. Отображение трехмерной информации происходит в двумерную оконную систему координат.

Работа содержит 1 файл

Open GL.docx

— 17.21 Кб (Скачать)

Преобразования координат  и проекции

 

В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – в глубь экрана. Расположение осей x и y аналогично описанному выше. Левосторонняя система используется для задания значений параметрам команды gluPerspective(), glOrtho(), которые будут рассмотрены ниже, а правосторонняя или мировая система координат во всех остальных случаях. Отображение трехмерной информации происходит в двумерную оконную систему координат.

 

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

 

Для того, чтобы выбрать, какую матрицу надо изменить, используется команда

 

void glMatrixMode(GLenum mode)

Для определения элементов  матрицы текущего типа вызывается команда

 

void glLoadMatrix[f d](GLtype *m)

где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый.

 

Команда

 

void glLoadIdentity(void)

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

 

void glPushMatrix(void)

void glPopMatrix(void)

 

Они записывают и восстанавливают  текущую матрицу из стека, причем для каждого типа матриц стек свой. Для видовых матриц его глубина  равна как минимум 32, а для двух оставшихся типов как минимум 2.

 

Для умножения текущей  матрицы слева на другую матрицу  используется команда

 

void glMultMatrix[f d](GLtype *m)

где m должен задавать матрицу  размером 4x4 в виде массива с описанным  расположением данных. Однако обычно для изменения матрицы того или  иного типа удобно использовать специальные  команды, которые по значениям своих  параметров создают нужную матрицу  и перемножают ее с текущей. Чтобы сделать текущей созданную матрицу, надо перед вызовом этой команды вызвать glLoadIdentity().

 

В целом, для отображения  трехмерных объектов сцены в окно приложения используется следующая последовательность действий:

 

Координаты объекта => Видовые  координаты => Усеченные координаты => Нормализованные координаты => Оконные координаты

 

Рассмотрим каждое из этих преобразований отдельно. Видовое  преобразование

К видовым преобразованиям  будем относить перенос, поворот  и изменение масштаба вдоль координатных осей. Для проведения этих операций достаточно умножить на соответствующую  матрицу каждую вершину объекта  и получить измененные координаты этой вершины:

 

(x’, y’, z’, 1)T =M * (x, y, z, 1)T

 

где M матрица видового преобразования. Перспективное преобразование и  проектирование производится аналогично. Сама матрица может быть создана  с помощью следующих команд:

 

void glTranslate[f d](GLtype x, GLtype y, GLtype z)

void glRotate[f d](GLtype angle, GLtype x, GLtype y, GLtype z)

void glScale[f d](GLtype x, GLtype y, GLtype z)

glTranlsate..() производит перенос объекта, прибавляя к координатам его вершин значения своих параметров.

 

glRotate..() производит поворот объекта против часовой стрелки на угол angle (измеряется в градусах) вокруг вектора ( x,y,z ).

 

glScale..() производит масштабирование объекта (сжатие или растяжение), домножая соответствующие координаты его вершин на значения своих параметров.


Информация о работе Преобразования координат и проекции. OpenGL