Предисловие
Автор: zombieЭта книга является самоучителем по популярной библиотеке 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.