Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
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 служат хорошим фундаментом для изложения теоретических и практических аспектов предмета. Книга состоит из трех частей и двух приложений. Первая часть посвящена непосредственно описанию работы с библиотекой, основным командам и переменным. Во второй части рассматриваются принципы реализации более сложных алгоритмов компьютерной графики с помощью средств OpenGL. В третьей части приводится описание настройки работы с OpenGL в различных интегрированных средах программирования и создание приложений, применяющих OpenGL для синтеза изображений. В приложениях можно найти демонстрационные программы на OpenGL и примеры практических заданий для самоконтроля. В пособии рассматривается стандарт OpenGL 1.2. Часть I Основы OpenGL Глава 1. Графический процесс и OpenGL Прежде чем перейти к описанию функций OpenGL, необходимо понять ее место в процессе формирования изображения на экране, определить область, задачи которой можно решать с помощью библиотеки. 1.1. Графический процесс Традиционной задачей компьютерной графики является синтез изображений объектов реального мира (как существующих, так и воображаемых). Для того, чтобы сделать такой синтез возможным, на входе алгоритма необходимы следующие данные: Геометрические модели задают форму и внутреннюю структуру объекта, обычно в трехмерном евклидовом пространстве. Примеры простых моделей: • сфера, заданная с помощью положения центра и радиуса; 17 18 Глава 1. Графический процесс и OPENGL • куб, заданный через положение центра и длины ребра. Анимация служит для задания модели движения, изменения формы или материала объекта с течением времени. Например, продольное перемещение объекта вдоль оси х со скоростью s м/с может быть задано с помощью формулы: x(t) = st. Материалы и текстуры определяют, как поверхность объекта взаимодействует со светом. Материалы необходимы для получения изображения объекта, с их помощью вычисляется количество отраженного света, попадающего в «глаз» виртуального наблюдателя. Простейшая модель материала— цвет объекта. Освещение задает расположение и характеристики источников света, что в совокупности с материалом позволяет высчитать цвет каждой точки объекта, изображение которого требуется построить. Пример модели освещения: солнце, задаваемое направлением и мощностью излучения. Виртуальная камера определяет, как трехмерные данные будут отображаться (проецироваться) на двухмерное изображение. Заметим, что для задач, не требующих реалистичности получаемого изображения (например, научная визуализация), материалы могут сводиться к простейшим формам, например, к разным цветам объектов, а освещение — отсутствовать. Далее в дело вступает алгоритм синтеза изображений, в описываемом частном случае называемый процессом экранизации (rendering). Имея на входе набор моделей, алгоритм должен построить соответствующее изображение на экране монитора. Описанная схема графической обработки от получения геометрической модели объекта до синтеза изображения на экране называется графическим процессом. 1.2. Геометрические модели 19 Остановимся более подробно на том, какую помощь OpenGL оказывает в реализации графического процесса. Вэа и модействие чт- Получение/—' N. . эа-рузка ^ Редактирование и обработка данных П/' Экранизация Выводе буфер кадраг Вывод на Прикладная программа OpenGL Оконная подсистема Рис. 1.1. Графический процесс и место OpenGL в нем. 1.2. Геометрические модели В компьютерной графике используется большое количество разнообразных моделей для описания формы. Причиной этого является очевидная невозможность полностью оцифровать реальный объект. Следовательно, необходимо выбирать те особенности объекта, которые важны для конкретной задачи и заданного класса объектов. В частности, модели можно поделить на объемные и граничные. Объемные модели позволяют описать внутренность объекта, а граничные — геометрические свойства поверхности. Пример объемной модели показан на рисунке 1.2. В настоящее время наибольшую популярность завоевали граничные модели, получаемые с помощью локальной кусочно-линейной аппроксимации поверхности. Такая модель представляет собой набор связанных через общие вершины многоугольников (полигонов), поэтому эти модели еще называет полигональ- |