Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)
Описание файла
Документ из архива "Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)", который расположен в категории "". Всё это находится в предмете "инженерная графика" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)"
Текст из документа "Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)"
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ М.В. ЛОМОНОСОВА
ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ
ЛАБОРАТОРИЯ КОМПЬЮТЕРНОЙ ГРАФИКИ И МУЛЬТИМЕДИА
ш
Ю.М. Баяковский, А.В. Игнатенко
НАЧАЛЬНЫЙ КУРС OPENGL
планета знаний
i
ПЛАНЕТА ЗНАНИИ
Москва 2007
УДК 681.3.07
ББК 32.973.26-018.2 Б34
Банковский Ю.М., Игнатенко А.В. Начальный курс OpenGL. М.: „Планета Знаний", 2007.— 221с.
ISBN 978-5-903242-02-3
Настоящая книга представляет собой практическое руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса «Компьютерная графика» на факультете ВМиК МГУ им. М.В. Ломоносова. Книга включает в себя описание базовых возможностей OpenGL и приемы работы с библиотекой, вопросы оптимизации приложений и использования OpenGL в различных средах программирования. Книга снабжена вопросами и практическими заданиями.
Руководство рассчитано на читателей, знакомых с языками программирования С/СН—Ь и имеющих представление о базовых алгоритмах компьютерной графики. Рекомендуется студентам математических и прикладных специальностей, аспирантам, научным сотрудникам и всем желающим изучить OpenGL в сжатые сроки.
Издание подготовлено в рамках образовательной программы «Формирование системы инновационного образования в МГУ».
Рецензенты:
Шикин Е.В., профессор, доктор физ.-мат. наук, ф-т ВМиК МГУ Крылов А.С., кандидат физ.-мат. наук, ф-т ВМиК МГУ
ISBN 978-5-903242-02-3
© Банковский Ю.М., Игнатенко А.В. © ООО „Планета Знаний", 2007
Оглавление
Предисловие 7
Введение 11
I Основы OpenGL 15
1. Графический процесс и OpenGL 17
-
Графический процесс 17
-
Геометрические модели 19
-
Анимация 20
-
Материалы 21
-
Освещение 22
-
Виртуальная камера 22
-
Алгоритм экранизации 23
2. Введение в OpenGL 25
-
Основные возможности 25
-
Интерфейс OpenGL 26
-
Архитектура OpenGL 28
-
Синтаксис команд 30
-
Пример приложения 31
-
Контрольные вопросы 36
3
4 Оглавление
3. Рисование геометрических объектов 39
-
Процесс обновления изображения 39
-
Вершины и примитивы 41
-
Операторные скобки glBegin / glEnd 43
-
Дисплейные списки 47
-
Массивы вершин 49
-
Контрольные вопросы 51
4. Преобразования объектов 55
-
Работа с матрицами 56
-
Модельно-видовые преобразования 58
-
Проекции 60
-
Область вывода 63
-
Контрольные вопросы 64
5. Материалы и освещение 65
-
Модель освещения 65
-
Спецификация материалов 67
-
Описание источников света 69
-
Создание эффекта тумана 73
-
Контрольные вопросы 74
6. Текстурирование 77
-
Подготовка текстуры 77
-
Наложение текстуры на объекты 81
-
Текстурные координаты 84
-
Контрольные вопросы 87
7. Операции с пикселями 89
-
Смешивание изображений и прозрачность 90
-
Буфер-накопитель 93
-
Буфер маски 94
-
Управление растеризацией 96
-
Контрольные вопросы 98
Оглавление 5
II Приемы работы с OpenGL 99
8. Графические алгоритмы на основе OpenGL 101
-
Устранение ступенчатости 101
-
Построение теней 103
-
Зеркальные отражения 109
-
Контрольные вопросы 113
9. Оптимизация программ 115
-
Организация приложения 115
-
Оптимизация вызовов OpenGL 120
-
Контрольные вопросы 128
III Создание приложений с OpenGL 131
lO.OpenGL-приложения с помощью GLUT 133
-
Структура GLUT-приложения 133
-
GLUT в среде Microsoft Visual C++ 6.0 137
-
GLUT в среде Microsoft Visual C++ 2005 139
-
GLUT в среде Borland C++ Builder 6 140
-
GLUT в среде Borland C++ Builder 2006 141
11.Использование OpenGL в MFC и VCL 145
-
Контекст устройства 146
-
Установка формата пикселей 147
-
Контекст рисования (render context) 148
-
Класс GLRC 149
-
Использование OpenGL с MFC 150
-
Использование OpenGL с VCL 153
12.OpenGL в .NET 157
-
GLUT в среде Microsoft Visual C# 2005 157
-
Использование OpenGL в WindowsForms 160
6 Оглавление
IV Приложения 163
A. Примитивы библиотек GLU и GLUT 165
Б. Демонстрационные программы 169
Б.1. Пример 1: Простое GLUT-приложение 169
Б.2. Пример 2: Модель освещения OpenGL 173
Б.З. Загрузка BMP файла 178
Б.4. Пример 3: Текстурирование и анимация 186
Б.5. Класс для работы с OpenGL в Win32 195
B. Примеры практических заданий 201
B.l. Cornell Box 201
-
Виртуальные часы 204
-
Интерактивный ландшафт 206
Литература 215
Предметный указатель 217
Предисловие
Компьютерная (машинная) графика очень молодая дисциплина. Появление машинной графики как научно-исследовательского направления обычно связывают с именем Айвена Сазер-ленда (Ivan Sutherland), который в 1963 г. опубликовал статью с результатами своей диссертационной работы. В 1967 г. была образована профессиональная группа АСМ SIGGRAPH. В ранний период развития машинной графики ассоциация SIGGRAPH развивалась как научно-техническая организация. В 1983 г. был сформирован Комитет SIGGRAPH по образованию для совершенствования обучения машинной графике и использования ее в учебном процессе.
Мы стали свидетелями драматических изменений, которые произошли в компьютерной графике в 1990-е годы. Если в конце 80-х графические рабочие станции стоили безумно дорого и работать с ними могли только в очень богатых организациях (как правило из ВПК), то в конце 1990-х графические станции с вполне удовлетворительными возможностями за 1000 USD стали доступны университетам и даже отдельным студентам. Если в 1980-е использовалась преимущественно векторная графика, то в конце 1990-х растровая полноцветная графика почти полностью вытеснила векторную. Трехмерная графика стала столь же распространенной, как двухмерная, поскольку появились и быстро совершенствуются видеоплаты с графическими ускори-
7
8
Оглавление
телями и z-буфером.
Параллельно с изменениями графической аппаратуры происходили глубокие метаморфозы в программном обеспечении. Вслед за широким распространением в 1970-е годы графических библиотек (в основном векторных, в большинстве своем фор-транных) в 1980-е годы потребовалось несколько этапов стандартизации графического обеспечения (Core System, PHIGS, GKS), чтобы к середине 1990-х прийти к Открытой Графической Библиотеке (OpenGL). В настоящее время многие функции этой библиотеки реализованы аппаратно.
Все эти процессы не могли не сказаться на преподавании компьютерной графики в университетах. Однако, даже в США до конца 1970-х годов машинная графика оставалась необычным предметом среди университетских курсов. В учебных планах АСМ 1978 г. машинная графика отсутствовала. В 1980-е годы и в первой половине 1990-х целью курса было изучение и программирование базовых алгоритмов графики (рисование прямой и кривой, клиппирование, штриховка или растеризация многоугольника, однородные координаты и аффинные преобразования, видовые преобразования) [1, 2]. Теперь, при наличии интерфейса прикладного программирования (API) высокого уровня, когда элементарные функции имеются в библиотеке OpenGL и зачастую реализуются аппаратно, пришлось пересмотреть концепцию курса. В самом деле, зачем учиться умножать столбиком, если у каждого в руках калькулятор. Появилась возможность включить в курс более сложные и более современные разделы компьютерной графики, такие как текстурирование, анимация. Именно в соответствии с этой общемировой тенденцией эволюционировал курс компьютерной графики на факультете ВМиК МГУ (с 1999 г. интернет-версию курса можно найти на сайте http://courses.graphicon.ru).
Следуя принципу "учись, делая"(learning-by-doing), мы, кроме традиционных лекций, включаем в курс выполнение 5-6 неболь-
Оглавление
9
ших проектов, каждый продолжительностью две недели. (Примеры таких заданий вы найдете в этой книге.) Настоящая книга призвана помочь студентам в выполнении этих проектов. В отличие от других справочных публикаций по OpenGL, в книге говориться не только о том, что имеется в библиотеке, но и о том, как этими средствами эффективно пользоваться. Например, как визуализировать зеркальные объекты, как построить тени.
Моделируя реальную рабочую среду, мы учим студентов самостоятельной работе. В этих условиях пособие по использованию открытой графической библиотеки играет важную роль.
Авторы благодарны Е. Костиковой и К. Каштановой за помощь в подготовке текста и иллюстраций.
Ю.М. Банковский Апрель 2007 года
Введение
Все, что мы видим на экране компьютерного монитора, является результатом работы алгоритмов синтеза изображений. Эти алгоритмы решают такие задачи, как визуализация текста с использованием заданного набор шрифтов, отображение указателя курсора, рисование вспомогательных элементов графического интерфейса, визуализацию изображений. Кроме этого, алгоритмы синтеза решают задачи визуализации трехмерных данных, например, с целью создания интерактивной фотореалистичной анимации, либо для наглядного представления результатов каких-либо вычислений.
Для облегчения выполнения программистами таких задач еще в 80-х годах 20-го века стали появляться программные инструментарии (библиотеки), содержащие в себе наборы базовых алгоритмов (таких, как визуализация простых геометрических объектов), что позволило перейти на более высокий уровень абстракции при решении прикладных задач. В настоящее время программирование графических алгоритмов немыслимо без использования специальных программных инструментариев, также называемых прикладными программными интерфейсами (API — Application Programming Interface).
OpenGL является одним из самых популярных прикладных программных интерфейсов для разработки приложений в области двухмерной и трехмерной графики.
11
12
Оглавление
Стандарт OpenGL (Open Graphics Library — открытая графическая библиотека) был разработан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc.
Библиотека насчитывает около 120 различных команд, которые программист использует для задания объектов и операций, необходимых для написания интерактивных графических приложений.
На сегодняшний день графическая система OpenGL поддерживается большинством производителей аппаратных и программных платформ. Эта система доступна тем, кто работает в среде Windows, пользователям компьютеров Apple. Свободно распространяемые коды системы Mesa (пакет API на базе OpenGL) можно компилировать в большинстве операционных систем, в том числе в Linux.
Характерными особенностями OpenGL, которые обеспечили распространение и развитие этого графического стандарта, являются:
-
Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением.
-
Надежность и переносимость. Приложения, использующие OpenGL, гарантируют одинаковый визуальный результат вне зависимости от типа используемой операционной системы и организации отображения информации. Кроме того, эти приложения могут выполняться как на персональных компьютерах, так и на рабочих станциях и суперкомпьютерах.
Оглавление
13
• Легкость применения. Стандарт OpenGL имеет продуманную структуру и интуитивно понятный интерфейс, что позволяет с меньшими затратами создавать эффективные приложения, содержащие меньше строк кода, чем с использованием других графических библиотек. Необходимые функции для обеспечения совместимости с различным оборудованием реализованы на уровне библиотеки и значительно упрощают разработку приложений.
Наличие хорошего базового пакета для работы с трехмерными приложениями упрощает понимание студентами ключевых тем курса компьютерной графики — моделирование трехмерных объектов, закрашивание, текстурирование, анимацию и т.д. Широкие функциональные возможности OpenGL служат хорошим фундаментом для изложения теоретических и практических аспектов предмета.