Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Область рисования

Функция glViewPort задает область вывода, например на всю клиентскую область окна. Но можно в окне приложения определить область вырезки и в нее выводить картинку. Если ее размеры совпадают с областью вывода, то картинка выводится полностью, если область вывода больше, то в области вырезки выведется только поместившаяся часть картинки.

glViewPort (0, 0, ClientWidth, ClientHeight);

glEnable(GL_SCISSOR_TEST);

glScissor(0, 0, round(ClientWidth/2), ClientHeight); // операции вывода картинки

glDisable(GL_SCISSOR_TEST); //Здесь нарисуется только часть картинки.

Преобразование координат. Матрицы

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

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

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

glMatrixMode(mode);

mode = GL_MODELVIEW - последовательность операций над объектами применяется в видовой матрице.

mode = GL –PROJECTION- последовательность операций над объектами применяется к матрице проекций.

mode = GL_TEXTURE- последовательность операций над объектами применяется к матрице текстуры.

После того как установлена текущая матрица, необходимо определить ее элементы командами:

glLoadMatrix(m); где m – определяет матрицу 4х4

или glLoadIdentity, которая заменяет текущую матрицу на единичную.

Для трехмерных построение лучше использовать следующий фрагмент:

glViewport(0, 0, ClientWidth, ClientHeight);

glMatrixMode (GL_PROJECTION); установка матрицы проекций

glLoadIdentity;

glFrustum (-1, 1, -1, 1, 2, 9); создание перспективы

glMatrixMode (GL_MODELVIEW); установка матрицы модели, которая связана с координатами объектов

glLoadIdentity;

Видовое преобразование. Масштабирование, поворот и перенос

Для выполнения видовых преобразований должны быть заданы (в мировых координатах) точка наблюдения и объект. Видовое преобразование может быть записано в матричной форме:

, где М – матрица 4х4 видового преобразования, (хе,..) – вектор для точки наблюдения.

Следующие команды рассчитывают матрицы:

  1. для выполнения вращения вектора против часовой стрелки на угол , относительно точки (x, y, z) glRotatef (, x, y, z).

  2. для выполнения переноса объекта на расстояние по соответствующей оси glTranslatef (x, y, z).

  3. для выполнения частичного масштабирования вдоль каждой из координатных осей glScalef (x, y, z).

Например.

Для поворота вставить перед командными скобками

glRotatef (5, 0.0, 0.0, 1.0); и создать обработчик события KeyPress с единственной командой Refresh. Теперь при нажатии любой клавиши окно перерисовывается с поворотом фигуры на 5 градусов по оси Z.

После изменения текущей системы координат ее необходимо восстанавливать. Команды glPushMatrix; и glPopMatrix; позволяют запомнить и восстановить так называемую текущую матрицу. Они записываются вне командных скобок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]