Эта книга посвящается
памяти певца, поэта и
композитора, гражданина
России
Игоря Талькова
Предисловие
Эта книга является самоучителем по популярной библиотеке OpenGL. OpenGL - Open Graphics Library, открытая графическая библиотека. Термин "открытый" - означает независимый от производителей. Имеется спецификация (стандарт) на OpenGL, где все четко задокументировано и описано. Библиотеку OpenGL может производить кто угодно. Главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Как следствие, в библиотеке нет никаких темных мест, секретов, недокументированных возможностей и т.п, те кто программировал под MSWindows или MSDOS понимают о чем я говорю. Библиотеку выпускают такие корпорации, как Microsoft, Silicon Graphics, а также просто группы программистов. Одним из таких примеров служит реализация Mesa. Эту библиотеку написали целый ряд программистов, главным автором является Brian Paul. Библиотека Mesa распространяется в исходных текстах на языке Си и собирается почти для любой операционной системы. Стандарт OpenGL развивается с 1992 года. Он разрабатывается фирмой Silicon Graphics. С тех пор библиотека завоевала огромную популярность и была интегрирована со множеством языков и систем разработки приложений. Вы можете писать программу с использованием OpenGL на Си, С++, Pascal, Java и многих других языках. Основное предназначение OpenGL - программирование трехмерной графики.
Библиотека OpenGL представляет из себя интерфейс программирования трехмерной графики. Единицей информации является вершина, из них состоят более сложные объекты. Программист создает вершины, указывает, как их соединять (линиями или многоугольниками), устанавливает координаты и параметры камеры и ламп, а библиотека OpenGL берет на себя работу создания изображения на экране. OpenGL идеально подходит для программистов, которым необходимо создать небольшую трехмерную сцену и не задумываться о деталях реализации алгоритмов трехмерной графики. Для профессионалов, занимающихся программированием трехмерной графики, библиотека тоже будет полезной, т.к. она представляет основные механизмы и выполняет определенную автоматизацию. Используя OpenGL вы с легкостью создадите трехмерные поверхности, наложите на них текстуры, осветите источниками света, сможете сделать эффект тумана, прозрачности, смешивания цветов, а также сможете наложить трафарет, передвигать объекты сцены, лампы и камеры по заданным траекториям, сделав тем самым анимацию. OpenGL непосредственно не поддерживает работу с устройствами ввода, такими как мышь или клавиатура, т.к. эта библиотека является платформенно-независимой. Но вы можете задействовать функции конкретной операционной системы, под которую вы пишите свою программу или воспользуйтесь надстройками над OpenGL, такими как библиотеки GLUT или GLAUX. Тем самым ваша программа заживет новой жизнью. Возможности просто безграничны!
Изначально задумывалась некая брошюра, что-то типа небольшого самоучителя. Потом проект сильно разросся, и я подумал: "А почему бы не написать книгу?". Программированием я занимаюсь на протяжении последних пяти лет. За это время я прочел огромное количество книг по данной тематике. Оглядывая свои полки, я с сожалением отмечаю, что на них практически отсутствую российские авторы. Многие российские авторы страдают тем, что зачастую просто не вдумываясь передирают хелп. В результате получается не учебное пособие, а справка по-русски. Кому такое творение нужно? Все программисты владеют техническим английским и в состоянии сами прочесть справку. Основное место на моей полке занимают такие, ставшие классикой книги, как: "Язык программирования Си" Б.Керниган и Д.Ритчи, "Основы Visual C++" Д. Круглински, "Введение в системы баз данных" К. Дейт, "Программирование в Windows для профессионалов" Рихтер, "Руководство системного администратора" Эви Немет, "Объектно-ориентированный анализ и проектирование" Гради Буч, Бъерн Страуструп - "Язык программирования С++", Герберт Шилдт - "Программирование на Си и С++ в Windows 95", Герберт Шилдт "Программирование для профессионалов в MSDOS", Герберт Шилдт "Справочник по Java", Том Сван "OWL & BC4" и много других не менее известных авторов. Герберт Шилдт и Тома Сван пишут очень много и далеко не все их труды хорошо сделаны. У Шилдта была книга по алгоритмам, у Тома Свана что-то по Java, которые, как мне показалось стали явной неудачей. Но эти авторы пишут для начинающих и определенный уровень все-таки держат. Я вижу главной причиной отсутствия наших авторов в том, что профессионалы писать не хотят. В следствие чего на этот рынок вышли халтурщики, которые просто занимаются надувательством, ибо их книги можно применять, только по одному назначению, они собственно говоря столько и стоят. Вы обратите внимание на такую важную деталь, почти во всех зарубежных книгах указывается, как можно связаться с автором. В наших я такого нигде не видел, в самом лучшем случае: "если вы хотите написать отзыв, пишите в редакцию". Я уже довольно много грязи вылил на наших авторов, возможно, мне просто не попадались хорошие книги. Моя книга задумывается как серьезный труд, как следствие она полностью открыта. Книга доступна в Интернет, все ваши замечания можете прислать мне по электронной почте, а также обсудить их между собой в форуме на нашем сайте. Ниже указаны мои адреса в Интернет и ФидоНет. Также имеется мой телефон, если у вас серьезное предложение. За полгода мне пришло несколько сот писем, два-три в день, я ответил на половину из них. Отвечал преимущественно на те, которые касались самой книги, иногда я не знал ответа, поэтому отвечать мне было нечего. Задавайте ваши вопросы у нас в форуме, может ответ напишет кто-нибудь другой. Подводя итог сказанному, я хочу сделать классную книжку, я приглашаю принять в этом участие и всех вас. Книга сделана в электронном виде, поэтому ее объем безграничен. Я хочу сделать хорошую книгу в России, мне хочется показать, что мы еще чего-то можем!
Я рассчитываю, что вы уже неплохо знакомы с программированием, в частности, с языком Си. Здесь, в основном, будет рассматриваться написание программ в среде Windows. Рассмотрю, конечно же, и особенности использования OpenGL в операционной системе Unix. Я опишу несколько различных типов приложений. Первый тип - это консольное приложение win32 с использованием библиотеки glaux.lib. Второе - обычное оконное приложение(Win32 Application). Третье - это приложение на базе MFC с архитектурой документ/вид. Четвертое - я покажу, как писать Java-апплеты с использованием библиотеки Magician. Magician - это библиотека java-классов с функциями, идентичными OpenGL. И пятое - Unix-приложение. Различия в написании этих приложений проявляются в начальной инициализации, префиксах и суффиксах названий функций. В остальном, на 90% все везде одинаково. Книга состоит из двух частей - "Основы OpenGL" и "OpenGL для профессионалов". Первая часть является скорее учебником, вторая - справочником по малоизвестным функциональным возможностям OpenGL, она будет содержать массу интересных программ, где наглядно будет продемонстрирована вся мощь OpenGL. Я хотел сделать каждую главу книги самодостаточной. Насколько мне это удалось, судить вам. Но я бы рекомендовал читать книгу последовательно. Главное, на что я делал упор, так это на простоту и понятность. Все примеры очень простые, и их размер не превышает нескольких килобайт. Все написано на чистом Си. В основу книги положен реальный опыт работы. И последнее, что надо сказать здесь, я не претендую на полноту и детальную теоретическую точность изложения материала. Книга ставит задачей научить читателя элементарным вещам, и поэтому здесь все объясняется простым и понятным языком на конкретных примерах с точки зрения практика, а не теоретика. Более точную информацию вы сможете найти в спецификации по OpenGL и на сайте Silicon Graphics http://www.sgi.com/software/opengl. Но заранее предупрежу вас, что чтение справочной информации или того же RedBook не доставит вам массу удовольствия, очень мудрено там все изложено. В отличии от аналогичных книг данной тематики вы не найдете здесь пустого переписывания и перевода справочной информации и не к месту приведенного кода. Все примеры и упражнения к книге были придуманы мной и сделаны мной. Книга написана при помощи пакета LATEX2e в ОС Linux.
Об авторе
С раннего детства увлекался всевозможными головоломками, искал пищу для мозгов. Уже в восемь лет в пионерском лагере занял второе место по шахматам, это было одно из первых достижений. С 13 лет активно увлекся математикой. Так я попал в вечернюю школу "Авангард" при МИФИ. Через два года поступил в спецшколу при МФТИ. Надо сказать, что отсюда началась моя дорога в жизнь. Здесь я познакомился с персональным компьютером, с программированием, с Интернет, а также неплохо развил свое серое вещество головного мозга в плане физики и математики. В этот же период я закончил ЗФТШ при МФТИ и очень горжусь свидетельством об окончании с пятеркой по физике и четверкой по математике. После окончания школы был год работы и учебы в Курчатовском институте, но интерес к физике у меня к тому времени окончательно пропал, за что меня и выгнали. Кстати, о чем я не жалею, и даже очень рад, потому что сейчас я занимаюсь делом, которое мне по душе, у меня гораздо больше свободы. В настоящее время я работаю в центре "Современных Информационных Технологий в Математическом Образовании"(СИТМО) в Московском Государственном Институте Электроники и Математики(МГИЭМ), а также учусь на втором курсе параллельно на двух факультетах: информатики и телекоммуникаций и прикладной математики. Я являюсь системным администратором UNIX & NT, программистом (C/C++/Java) и отчасти менеджером в одном лице, а с недавнего времени еще и книжки пишу;-) Имею сертификаты мастера C программирования, С++ программиста, Java программиста, Unix-администратора. Со мной можно связаться по электронной почте:
* FidoNet: 2:5020/370.2 620.20 1103.5
* www: itsoft.miem.edu.ru, opengl.miem.edu.ru
* Inet: itarasov@rtuis.miem.edu.ru
* Phone: 916-89-51, 916-89-63
Если у вас имеются дополнения или какие-то материалы, которые, по вашему мнению, желательно включить в книгу, то мы с удовольствием обсудим эту тему. Особенно я занят поиском материалов для второй части книги.
И еще, книга написана достаточно вольным стилем. Я пытаюсь не уйти в жаргон и в тоже время не писать заумным или официальным языком. Главное - это понятливость, я хочу, чтобы меня понимали, чтобы текст читался легко. Наверняка вы найдете ошибки в книге или вас удивит мой вольный стиль изложения, "ну и что?" - отвечу я - мне всего лишь 19 лет и я не волшебник, я только учусь.
Благодарности
Хочется поблагодарить огромную массу людей, без которых эта книга вряд ли бы состоялась. Прежде всего, хочу выразить благодарность непосредственному участнику Александру Терещенко за перевод книги из формата LATEX2e в html формат и последующую верстку книги. Отдельно хочется поблагодарить моих родителей за их ценные замечания и первую редакцию данного материала, а также за все остальное, что они для меня сделали.
Также я выражаю отдельное признание следующим людям без косвенного участия которых, я бы вряд ли что-либо написал. Это прежде всего мои учителя, которые дали мне путевку в жизнь: Сергей Васильевич Масалович, Сергей Ростиславович Тумковский, Георгий Петрович Путилов.
Это ребята, с которыми я вместе работаю в настоящее время: Александр Измайлов, Слава Сотников, Иван Жаднов, Кирилл Марченков, Андрей Плоскирев, Паша Воротилин.
Это друзья - фидошники: Олег Федоров, Эльвира Николаева, Игорь Щеколев, Паша Гродек, Олег Давыдов, Ринат Садретдинов, Сергей Зефиров и далее весь наш московский пойнтлист;-) Они столько раз говорили, что я не прав, я иду не той дорогой, что я теперь только и делаю, что иду, иду, делаю, делаю, только бы что-то им доказать, и может быть потом мы как-нибудь обсудим куда я все-таки пришел.;-)
Отдельный привет и спасибо моим друзьям по курчатнику: Тимур Тудоровский, Андрей Казанцев, Андрей Бажан и также все остальным.
Также не могу не вспомнить о своей деревне и своих самых старых друзьях: Виталька, Иван Иваныч и др. Деревня рулез-форева, если в России, еще и осталось, что-то от слова Родина, то это деревня, рыбалка, лес и грибной сезон, убежден ни в какой Америке нет такого чудного места, как наша русская деревня!
|