Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новинки компьютерных книг ->> Интерактивная компьютерная графика.


Служба Рассылок Subscribe.Ru

Visit out site Visit out site

Интерактивная компьютерная графика.
Вводный курс на базе OpenGL

2-е издание

Эдвард Энджел

 
Библиография

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

Предисловие

Книга, которую вы держите в руках, представляет собой вводный курс компьютерной графики, в котором основной акцент сделан на вопросах прикладного программирования. В первом издании, которое вышло в свет в 1997 году, я отмечал, что за семь лет, прошедших после публикации моей предыдущей книги по компьютерной графике, в этой области произошли разительные изменения - она развивалась со скоростью, превзошедшей самые смелые ожидания специалистов, в том числе и мои собственные. За последние три года эти темпы не только не уменьшились, а даже возросли. Полнометражные кинофильмы, в производстве которых использована компьютерная анимация, имеют не только громадный зрительский, но и коммерческий успех. Включение в кинофильмы эффектных сцен, сделанных с помощью компьютера, стало в последние годы не исключением, а нормой, и подчас такие сцены неотличимы от снятых на "натуре". Особый интерес к графическим приложениям вызывает их применение в среде Internet.

За последние годы не только возросли функциональные возможности средств компьютерной графики, но и значительно снизилась стоимость графических рабочих станций, причем это характерно для установок всех классов, как простейших, так и профессиональных. В течение нескольких лет стоимость графической станции, способной формировать около одного миллиона трехмерных многоугольников в секунду с учетом эффектов освещения и наложения текстуры, понизилась со $100 000 до нескольких тысяч. Значительно более дос тупными по цене стали и специализированные графические платы для персональных компьютеров. При цене в несколько сотен долларов эти платы обеспечивают почти такие же возможности, как и графические рабочие станции. В области программного обеспечения также произошли серьезные изменения. OpenGL стала своего рода стандартным интерфейсом для программистов как при написании прикладных программ, так и при разработке программных продуктов высокого класса - от интерактивных игр до систем визуализации результатов на учных исследований.

Нисходящий подход

Отмеченные достижения еще более упрочили мою веру в преимущество нисходящего (сверху вниз) подхода при изложении вводного курса компьютерной графики. Хотя на факультетах информатики и вычислительной техники многих вузов читают несколько курсов лекций, имеющих отношение к этой дисциплине, большинство студентов предпочитают прослушать только какой-либо один из них. Обычно такой курс включается в учебную программу после прослушивания курсов по основам программирования, структурам данных, теории алгоритмов , технологии программирования и базовых математических курсов.

Сам предмет компьютерной графики позволяет преподавателю так организовать этот курс, что он будет не только познавательным, но и увлекательным для слушателей. При планировании занятий я стараюсь предоставить студентам возможность как можно раньше приступить к программированию задач трехмерной графики, а анализ алгоритмов нижнего уровня, таких как вычерчивание линий и заливка многоугольников, откладываю на более позднее время. Я возвращаюсь к ним тогда, когда студенты уже могут самостоятельно программир овать построение графических изображений.

Джон Кемени (John Kemeny), один из пионеров преподавания этой дисциплины в США, использовал для обоснования такой концепции преподавания понятную многим аналогию с вождением автомобиля. Для того чтобы сесть за руль и стронуться с места, совсем не обязательно знать, что происходит под капотом, но тот, кто не знаком с правилами движения и основными приемами управления автомобилем, обречен сидеть на заднем сиденье, а не на месте водителя. Кемени различает три подхода к обучению. Первый - алгоритмический - обучать сначала тому, как функционирует автомобиль в целом и отдельные его агрегаты: двигатель, трансмиссия, топливная система и т.д. Второй подход - потребительский - нанять шофера, устроиться на заднем сиденье и созерцательно глядеть на мир за окном. Третий подход - это подход программиста, который я и отстаиваю в этой книге, - научиться водить автомобиль и ориентироваться в обстановке на дороге, пренебрегая детальным знанием о том, что происходит под капотом. Овладевший этими знаниями, всегда сможет д обраться до места назначения (если, конечно, автомобиль будет исправен - но это уже другая песня). Те, кто давно делает бизнес на прокате автомобилей, выразили эту мысль простой формулой: "Предоставьте нам усадить вас на место водителя".

Программирование на языке C с применением OpenGL

В прежние времена наиболее серьезные сложности при чтении курса компьютерной графики и подготовке учебников по этой дисциплине были связаны с отсутствием общепринятой графической библиотеки или интерфейса прикладного программирования (API - Application Programming Interface). Из-за этого приходилось приобретать специализированные средства по довольно высокой цене, которые были недоступны большинству студентов вне пределов вуза, страдали отсутствием общности и были довольно сложны в освоении. Появление OpenGL в значительной мере сняло эти вопросы, в чем на собственном опыте убедились те, кто ранее использовал в практике преподавания как другие пакеты API (такие как GKS и PUIGS), так и "доморощенное" программное обеспечение. На сегодняшний день графическая система OpenGL поддерживается большинством производителей рабочих графических станций, а независимые разработчики создали средства ее поддержки для большинства существующих аппаратных и программных платформ. Эта система доступна тем, кто работает в опе рационной среде Microsoft Windows (как 98, так и NT), а пользователей компьютеров Apple фирма-изготовитель известила о том, что OpenGL будет включена в качестве базового компонента в будущие версии операционной системы. Свободно распространяются исходные программные коды системы Mesa - пакета API на базе OpenGL, - которые можно компилировать в большинстве операционных систем, в том числе и Linux.

Конечно, содержание курса компьютерной графики выходит далеко за пределы простого руководства по применению конкретного пакета API, но наличие хорошего базового пакета значительно упрощает как преподавание, так и усвоение студентами ключевых тем этой дисциплины - создание изображений трехмерных объектов, закрашивание, графические системы с архитектурой "клиент/сервер", моделирование и создание прикладных графических систем. Я полагаю, что широкие функциональные возможности OpenGL и тщательно продуманна я структура этой системы послужат хорошим фундаментом для изложения как теоретических, так и практических аспектов этого предмета, в том числе и новейших идей, таких как наложение текстур и их комбинирование (эти функции не поддерживались прежними пакетами API).

Я перешел на использование OpenGL в своей преподавательской практике примерно 5 лет назад, и уже первые результаты меня изумили - в середине первого семестра каждый студент мог написать довольно сложную программу построения изображения трехмерных объектов, в которой требуется знание не только математики трехмерного моделирования, но и умение работать с событиями. За предыдущие 15 лет преподавания я и близко никогда не подходил к подобным результатам. Опыт преподавания курса на новой ба зе подвел меня к мысли полностью переделать написанный ранее учебник.

Настоящая книга представляет собой учебник по компьютерной графике, а не руководство пользователя по работе с OpenGL. Поэтому я не считал необходимым освещать в ней все тонкости использования этого языка, а описывал только то, что имеет непосредственное отношение к теоретическим и практическим задачам, рассматриваемым в книге. Я старался таким образом использовать OpenGL для иллюстрации тех или иных идей, чтобы те читатели, которые пользуются другим пакетом API, могли без особого труда воспринимать изл агаемый материал.

Помимо этого я использую в книге язык C. У читателей может возникнуть вполне резонный вопрос: "Почему C, а не C++, Java или любой другой объектно-ориентированный язык программирования?" Мой выбор обоснован двумя соображениями. Во-первых, система OpenGL не относится к объектно-ориентированным системам программирования, а потому использование C++ или Java не внесет ничего особенного в большинство излагаемых тем. Исключение составляет тема структуры библиотеки промежуточных программ между OpenGL и пользов ателем, но я решил вообще не касаться ее, поскольку это сделает книгу менее доступной для студентов, владеющих навыками программирования, но незнакомых с методикой объектно-ориентированного программирования.

На кого рассчитана эта книга

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

Необходимым условием для успешного усвоения материала книги является достаточно глубокие знания языка программирования C, знакомство с основными идеями объектно-ориентированного программирования и хотя бы начальные познания в области линейной алгебры и тригонометрии. Я полагаю, что математическая подготовка студентов и аспирантов, специализирующихся в области информатики и вычислительной техники, играет очень важную роль в изучении большинства дисциплин. Поэтому я постарался включить в материал книги т е разделы линейной алгебры и геометрии, которые необходимы для понимания основ компьютерной графики. Этот материал я выделил в два отдельных приложения.

Структура книги

Предлагаемая вашему вниманию книга состоит из 12 глав. В главе 1 представлен обзор методов формирования изображений оптическими приборами, где читатель сразу же познакомится с основными концепциями создания изображений трехмерных объектов. В главе 2 читатель знакомится с методикой программирования с использованием OpenGL. Хотя первая программа, рассматриваемая в этой главе (а в каждой главе рассматривается одна или несколько законченных программ), имеет дело с двухмерными объектами, они "встраиваются" в трехмерную среду. В главе 3 обсуждаются современные тенденции создания интерактивных графических систем типа "клиент/сервер" и методика разработки графических программ, управляемых событиями. В главах 4 и 5 основное внимание уделено концепциям формирования изображений трехмерных объектов и сцен; в главе 4 речь идет о математическом аппарате описания трехмерных объектов, а в главе 5 рассматриваются методы их отображения. В главе 6 представлен вводный материал о взаимодействии освещения и материалов и о методах закрашивания освещенных поверхностей. Материал первых шести глав следует изучать в той последовательности, в которой он изложен в данной книге. Это должно занять примерно 10 недель при 15-недельном семестре.

Материал следующих пяти глав можно изучать в произвольном порядке. Эти главы не имеют столь жесткой структуры изложения, как предыдущие, и читатель может просмотреть их и получить общее представление или выбрать отдельные темы и изучить их более детально, чем остальные. В главе 7 представлен обзор методов закрашивания поверхностей, используемых в компьютерной графике. Читатель имеет возможность подробно познакомиться с одним-двумя алгоритмами выполнения каждого из основных этапов процесса построен ия изображения. Глава 8 включает несколько тем, касающихся иерархической организации графических моделей и использования объектно-ориентированного подхода. Рассмотренные в ней темы охватывают обширный материал от создания моделей, инкапсулирующих отношения между компонентами, до использования графики в Internet. В главе 9 рассматриваются новые возможности современных аппаратных графических средств и методы поддержки этих средств, реализованные в OpenGL. Эти методы предполагают интенсивное исполь зование разнообразных буферов. Заключительные разделы этой главы посвящены обсуждению вопросов квантования графического изображения и минимизации возникающих при этом искажений.

В главе 10 рассматриваются кривые и поверхности. Процедурные методы построения геометрических моделей на базе многоугольников описаны в главе 11. В этой же главе читатель познакомится с языковыми моделями, фракталами и системами частиц. В главе 12 речь идет о применении графических средств при визуализации результатов научных расчетов. Эта область применения машинной графики позволяет продемонстрировать весь рассмотренный в предшествующих главах арсенал методов и средств.

Программы, приведенные в основном тексте книги, собраны отдельно в приложении А. Тексты программ доступны и в электронном виде.

Изменения, внесенные во второе издание

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

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

Я добавил в главу 2 два новых примера. Первый относится к использованию рекурсии при построении узора Серпинского и не только демонстрирует, как организуется рекурсия в OpenGL, но и показывает, какие интересные программы могут создавать студенты, даже не изучив досконально все возможности OpenGL. Второй пример демонстрирует нюансы построения трехмерного узора Серпинского, и при создании этой программы студенты знакомятся с элементарными приемами создания изображений трехмерных объектов, не требующ ими использования сложных преобразований координат. Большая часть материала, относящегося к свойствам многоугольников, была перенесена в главу 7.

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

В главе 4 более детально описаны абстрактные геометрические объекты и дополнены примерами, в которых показано, как выполняется изменение координат и фреймов. Показано также, как использовать при формировании геометрических моделей массивы вершин - новинку версии OpenGL 1.1. Еще один новый пример демонстрирует использование виртуального трекбола для интерактивной реализации преобразований координат в трехмерном пространстве.

Я надеюсь, что изложение математических основ в главе 5 стало более доступным для студентов по сравнению с первым изданием. Я включил в эту главу также и пример формирования теней, в котором использованы матрицы проецирования. Глава 6 осталась практически в том же виде, что и в первом издании. Глава 7 также подверглась очень незначительным изменениям - я отредактировал ее название, которое теперь, на мой взгляд, точнее передает смысл представленного материала, и перенес в нее из других г лав детальное описание методов манипуляции с многоугольниками.

В главе 8 значительно расширен материал, касающийся древовидных структур. В главу включен второй пример построения изображения робота, в котором использован обобщенный рекурсивный алгоритм обхода дерева. Переработан и материал, касающийся графов сцен. Я рассматриваю эту тему как фундаментальную, имеющую исключительно важное значение для понимания идей объектно-ориентированного подхода в компьютерной графике. В этой главе рассматриваются и побочные применения древовидных структур - бинарные деревья разделения пространства (BSP - binary spatial-partition tree), 4- и 8-арные деревья (quadtree и octree). В заключительную часть этой главы включен материал об использовании компьютерной графики в Internet, о языках VRML и Java (при этом от читателя не требуется знание каждого из этих языков).

Глава 9 включает материал о наложении текстур и использовании буферов, представленный в главе 10 первого издания. В данном издании я поменял местами материал глав 9 и 10, учитывая важность применения методов наложения в современных графических приложениях. В главе 9 читатель найдет и подробное описание средств OpenGL, применяемых для выполнения наложения. Глава 10 настоящего издания представляет собой переработанную главу 9 первого издания, причем в нее добавлены новы е примеры формирования кривых и поверхностей с помощью OpenGL.

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

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

Дополнительные источники

Текущую информацию о дополнениях к этой книге вы можете получить на Web-сервере издательства Addison-Wesley по адресу http://www.aw.com/cseng.

Материал, доступный в электронном виде, включает решение некоторых упражнений, связи с другими ресурсами и примеры текстов программ. Эту информацию, а также некоторую другую можно получить на моем Web-сервере по адресу http://www.cs.unm.edu/angel.

Тексты программ из этой книги и другие примеры можно получить по Internet на ftp-сервере по адресу ftp.cs.unm.edu в каталоге pub/angel/BOOK.

Буду рад получить от читателей предложения о любых других дополнительных материалах и замечания по материалу книги. Мой адрес angel@cs.unm.edu.

Благодарности

В течение нескольких последних лет я имел удовольствие работать с прекрасными студентами университета Нью-Мексико. Именно они пробудили во мне интерес к OpenGL, и я многому научился благодаря общению с ними. Это - Хью Бамгарнер-Керби (Hue Bumgarner-Kirby), Пат Кроссно (Pat Crossno), Томми Дэниэл (Tommie Daniel), Лиза Десджарле (Lisa Desjarlais), Ким Эдлунд (Kim Edlund), Ли Анн Фиск (Lee Ann Fisk), Мария Галлегос (Maria Gallegos), Брайан Джонс (Brian Jones), Кристофер Джордан (Christopher Jordan), Макс Хазелриг (Max Hazelrigg), Томас Келлер (Thomas Keller), Пат Мак-Кормик (Pat McCormick), Эл Мак-Ферсон (Al McPherson), Мартин Мюллер (Martin Muller), Джим Пинкертон (Jim Pinkerton), Джим Прейетт (Jim Prewett), Дейв Роджерс (Dave Rogers), Хэл Смайер (Hal Smyer), Дейв Вик (Dave Vick) и Брайан Уайли (Brian Wylie). Именно они разработали большинство примеров и подготовили цветные иллюстрации.

Первое издание этой книги я готовил в период годичного отпуска. Работая над ним, я успел побывать в пяти странах и приобрел громадный опыт работы на портативном компьютере и общения через Internet. Как бы там ни было, но к концу отпуска я справился с задачей, в чем немалую роль сыграла помощь множества людей и организаций. Я в неоплатном долгу перед Джонасом Монтилва (Jonas Montilva) и Крисом Биркбеком (Chris Birkbeck) из университета де Лос-Андес (Венесуэла), Родриго Галлегосом (Rodrigo Gallegos) и Ар истид Новоа (Aristides Novoa) из Технологического университета Экиночиал (Эквадор), Лонг Вен Ченем (Long Wen Chang) из Национального университета Цин Хуа (Тайвань), а также Кин Хонг Вонгом (Kin Hong Wong) и Пень Ан Хенгом (Pheng Ann Heng) из Китайского университета в Гонконге. Все эти визиты стали возможными благодаря Рамиро Джордану (Ramiro Jordan) из университета Нью-Мексико. Где бы я ни был, я всегда поддерживал связь с Джоном Брайером (John Brayer) и Джесоном Стюартом (Jason Stewart) из университета Н ью-Мексико и Хелен Гольдштейн (Helen Goldstein) из издательства Addison-Wesley, которые очень помогли мне в подготовке материала для этой книги.

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

Я не могу не поблагодарить руководство компаний Silicon Graphics и Apple Computer, которые предоставили в мое распоряжение необходимое оборудование. Я постоянно консультировался с Джоном Шимпфом (John Schimpf) из Silicon Graphics относительно OpenGL. Фирмы Conix Enterprises, Portable Graphics, Template Graphics and Metrowerks благосклонно предоставили мне необходимое программное обеспечение, и я смог протестировать все программы на разных платформах.

Множество других людей оказали мне очень существенную помощь в подготовке этой книги. Я благодарен Гонсало Картагенова (Gonzalo Cartagenova), Тому Коделу (Tom Caudell), Кетти Коллинз (Kathi Collins), Кетлин Дениэлсон (Kathleen Danielson), Роджеру Эриху (Roger Ehrich), Чаку Хансену (Chuck Hansen), Марку Хенне (Mark Henne), Бернарду Море (Bernard Moret), Дику Нордхаусу (Dick Nordhaus), Хелене Соана (Helena Saona), Гвин Силвэн (Gwen Sylvan) и Мэсону Во (Mason Woo). Сообщество пользователей OpenGL должно з нать имена Марка Килгарда (Mark Kilgard), Брайана Пола (Brian Paul) и Нейт Робинс (Nate Robins), которые подготовили программы, необходимые для проверки OpenGL-кода на разных платформах. Я особенно благодарен Бену Бедерсону (Ben Bederson) и его студентам, которые на себе "испытали" черновую рукопись этой книги. Цветные иллюстрации на вклейке - дело рук четырех студентов этого курса.

Перед тем как я отдал рукопись в издательство, ее тщательно просмотрели многие специалисты, чтобы оценить полноту и ясность изложения материала для разных категорий читателей. Я благодарен рецензентам, от которых получил множество ценных замечаний, - Хамиду Арабниа (Hamid Arabnia) из университета Джорджия, Уэйену Карлсону (Wayne Carlson) из университета штата Огайо, Норману Чину (Norman Chin) из Silicon Graphics, Скотту Гриссому (Scott Grissom) из университета штата Иллинойс (Спрингфилд), Дику Филлипсу (Dick Phillips), ранее работавшему в Национальной лаборатории в Лос-Аламосе, Тому Мак-Рейнолдсу (Tom McReynolds) из Silicon Graphics, Джейн Вильгельмс (Jane Wilhelms) из Калифорнийского университета (Санта-Круз) и Эдварду Вонгу (Edward Wong) из Бруклинского политехнического института. Хотя окончательный вариант может и не отображать всех высказанных точек зрения - которые у рецензентов значительно расходятся, - каждое из них так или иначе повлияло на содержание этой книги.

Я не могу не поблагодарить и всех тех сотрудников издательства Addison-Wesley, благодаря которым эта книга появилась на полках магазинов и библиотек. Мой редактор, Питер Гордон (Peter Gordon), - это человек, работать с которым одно удовольствие, и я, признаюсь, иногда сожалею, что книга уже закончена. Особо благодарен я Лин Дюпре (Lyn Dupre). Я ведь не "литератор от Бога". Если бы читатели имели возможность взглянуть на первый вариант рукописи, они смогли бы оценить тот вклад, который внесла Лин в эту книгу.

Моя жена, Роз-Мари Мольнар (Rose Mary Molnar), подготовила рисунки к предыдущему изданию, многие из которых остались и в этом издании. Со свойственной ей рассудительностью она не стала возражать против использования для этой работы нашего единственного ноутбука и тем самым сохранила мир и сердечность наших отношений, за что, среди прочего, заслуживает дополнительных тысяч слов благодарности.

Вернуться к начальной странице



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное