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

4. Сводка результатов

Для создания плавной анимации применяется метод "двойная буферизация". При этом используются два буфера кадра: один показывается на экране, а в другом, невидимом, выполняется рисование следующего кадра.

В макете консольной программы, написанной с помощью библиотеки GLAUX, используются функции обратной связи. Чаще всего это функция отображения сцены, фоновая функция и функция реакции на изменение размеров окна. Кроме того, можно определить функции-обработчики событий от клавиатуры и мыши.

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

5. Упражнения Упражнение 1

Внесите в программу 2.1 изменения, описанные в п.2.1, чтобы по нажатию левой кнопки мыши менялся цвет вращающегося чайника.

Упражнение 2

В программу из упр.1 добавьте обработчик нажатия правой кнопки мыши для включения/выключения вращения. Сделайте обработчики для клавиш курсора "стрелка вверх" и "стрелка вниз" (коды клавиш AUX_LEFT и AUX_UP), чтобы увеличивать и уменьшать скорость вращения. С помощью обработчика клавиши "пробел" (код AUX_SPACE) обеспечьте циклическое переключение осей вращения между тремя координатными осями.

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

Упражнение 3

В программу 2.2 добавьте отображение спутника планеты и наклоните ось вращения планеты под углом 45 градусов к плоскости ее орбиты.

Упражнение 4

Сделайте вариант программы 2.2 с 4-мя планетами и 3-мя спутниками. Для сохранения/восстановления позиции и ориентации координатных систем пользуйтесь функциями glPushMatrix() и glPopMatrix(). Чтобы нарисовать несколько спутников у одной планеты, сохраняйте параметры координатной системы перед рисованием каждого спутника и восстанавливайте их после рисования спутника. Чтобы разобраться с положением координатных осей, можете применить функцию рисования осей из 4-го упражнения к 1-й лекции.

Упражнение 5

Измените программу 2.3 так, чтобы она рисовала манипулятор из 10-ти сегментами (рис. 2.3). Для поворота всех сегментов применяйте две клавиши курсора "стрелка вверх/вниз". Текущий сегмент (который будет поворачиваться этими клавишами) должен быть выделен цветом. Переключение текущего сегмента должно производиться циклически по нажатию пробела.

Подсказка: для сохранения и восстановления позиции и ориентации координатной системы, связанной с кистью манипулятора, применяйте функции glPushMatrix() и glPopMatrix(). При рисовании пальцев перед позиционированием каждого пальца сохраняйте текущую видовую матрицу, а после рисования – восстанавливайте ее.

Лекция 3. Геометрические примитивы

С помощью OpenGL можно рисовать очень сложные сцены, но все они в конечном счете состоят из геометрических примитивов нескольких типов – точек, отрезков и многоугольников. Стандартные тела библиотеки GLAUX (например, сферы, конусы и параллелепипеды) тоже состоят из геометрических примитивов OpenGL.

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

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

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