Модельно-видовые преобразования
К модельно-видовым преобразованиям будем относить перенос, поворот и изменение масштаба вдоль координатных осей. Для проведения этих операций достаточно умножить на соответствующую матрицу каждую вершину объекта и получить измененные координаты этой вершины: (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*() производит масштабирование объекта (сжатие или растяжение) вдоль вектора (x,y,z), умножая соответствующие координаты его вершин на значения своих параметров. Все эти преобразования изменяют текущуюматрицу, а поэтому применяются к примитивам, которые определяются позже. Если надо повернуть один объект сцены, а другой оставить неподвижным, удобно сначала сохранить текущую видовую матрицу в стеке командой glPushMatrix(), затем вызвать glRotate*() с нужными параметрами, описать примитивы, из которых состоит этот объект, а затем восстановить текущую матрицу командой glPopMatrix(). В общем случае матричные преобразования в OpenGL нужно записывать в обратном порядке. Например, если нужно сначала повернуть объект, а затем передвинуть его, сначала происходит вызов команды glTranslate(), а только потом – glRotate(). После этого необходимо определить сам объект. Задание к лабораторной работе Напишите программное приложение, реализующие следующие операции: - создание исходного изображения объекта согласно варианту задания; - вращение, перемещение и масштабирование объекта при помощи стандартных функций OpenGL. Таблица 12.4.1 Варианты заданий
Требования к отчету Отчет по лабораторной работе должен содержать: 1. Цель работы, вариант задания, краткое описание проделанной работы. 2. Ответы на контрольные вопросы. 3. Выводы по проделанной работе. Контрольные вопросы и задания 1. Кратко опишите библиотеки OpenGL и организацию конвейера. 2. Назовите категории команд (функций) библиотеки. 3. Какие основные примитивы используются в OpenGL? 4. Что такое дисплейные списки? 5. Поясните организацию работы с массивами вершин и их отличие от дисплейных списков. 6. Перечислите виды матричных преобразований в OpenGL. 7. Что такое матричный стек?
|