к оглавлению

Введение в программирование OpenGL

Эти лекции посвящены компьютерной графике, а именно тому, как использовать OpenGL в Delphi.

OpenGL - это стандартная графическая библиотека для всех 32-разрядных операционных систем, в том числе и для операционной системы Windows.

OpenGL - не отдельная программа, а часть операционной системы. Это означает, что откомпилированное приложение, использующее OpenGL, не нуждается ни в каких дополнительных программах и модулях, кроме стандартных, содержащихся на любом компьютере с установленной операционной системой Windows.
Вообще говоря, в этих лекциях идет речь о программировании приложений, использующих графический акселератор, однако все приводимые программы будут работать и на компьютере, не оснащенном ускорителем.
Для программистов, использующих язык С, существует множество источников, из которых можно почерпнуть сведения о том, как использовать библиотеку OpenGL, для программистов же, работающих с Delphi, таких источников крайне мало. Данные лекции призваны восполнить этот недостаток информации.
В состав стандартной поставки Delphi (начиная с третьей версии) входит заголовочный файл, позволяющий строить приложения с использованием OpenGL, a также справочный файл по командам этой библиотеки. Однако инсталляция Delphi не снабжается ни одним примером по использованию OpenGL, a из файла справок новичку трудно понять, как это сделать. Поэтому основная цель лекций - помочь программистам, в том числе и опытным, разобраться в этой теме.
В свое время, когда я сам учился использовать OpenGL в проектах Delphi, никаких источников, кроме набора текстов программ на языке С из файла оперативной помощи, у меня не было, и начинал я с того, что просто переносил эти программы на Delphi. Такая практика оказалась весьма полезной. Поэтому многие примеры в лекциях представляют собой "перевод" свободно распространяемых программ, изначально написанных на С. В текстах модулей этих примеров я оставил указание на авторов исходных версий.

В лекциях вы также встретите множество оригинальных программ. Кроме того, я по мере возможностей старался приводить и рекомендации профессионалов, содержащиеся в учебных программах пакета OpenGL SDK (Software Design Kit) и других учебных курсов, поскольку многие читатели не имеют возможности самостоятельно перенести эти программы на Delphi и, думаю, нуждаются в некоторой помощи.

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

1. Отсутствует описание математического аппарата компьютерной графики.
Мне не стоило бы большого труда в очередной раз переписать главы учебника по линейной алгебре, как это делается многими авторами книг по компьютерной графике. Подозреваю, что многие читатели просто пролистывают страницы книг, испещренные формулами и схемами. По моему убеждению, OpenGL позволяет нарисовать все, что угодно даже тем программистам, которые не помнят наизусть формулу транспонирования матрицы. Я не умаляю значения этих знаний, рано или поздно они вам понадобятся, но литературы по этой теме уже имеется предостаточно.
2. Эти лекции не заменят документации по OpenGL или Delphi. Есть довольно много книг, представляющих собой просто перевод содержимого файлов оперативной помощи. Может быть, кому-то такие переводы и нужны, но только не программистам, для которых знание английского языка является необходимым условием профпригодности. Как правило, я ограничиваюсь краткими замечаниями, позволяющими понять суть излагаемой темы, а подробности всегда можно найти в справочных файлах.
3. Главный упор делается на практические примеры. Все проекты я предоставляю в виде исходных файлов. Примеров в лекциях более двухсот, и остановился я тогда, когда исчерпал объем дискеты. В среде программистов бытует мнение, что документацию следует читать только тогда, когда что-то не получается, и многие из них знакомство с новым средством разработки начинают сразу с попытки написания программы. Именно для таких специалистов лекции подойдут как нельзя кстати. (При таком обилии примеров читателю, наверное, будет непросто восстановить в памяти, в каком из них содержится необходимый кусок кода. Поэтому главное назначение иллюстраций в лекциях - помочь в навигации по примерам. )
4. Это учебник, а не справочник. Материал лекций построен в расчете на то, что читатель будет знакомиться с ним последовательно. Хотя материал и разбит на тематические разделы, ко многим темам мы обращаемся многократно. Если первоначальное знакомство с какой-либо темой оказалось трудным, у читателя будет возможность разобраться с ней позднее.
5. Лекции рассчитаны на новичка в области машинной графики, но не новичка в программировании на Delphi. При изложении материала подразумевается, что читатель имеет навыки работы в Delphi, и чем увереннее он чувствует себя здесь, тем больше пользы сможет извлечь из этих лекций. Heкоторые разделы, например функции API, могут показаться поначалу трудными. Однако в подавляющей части примеров особо сложные приемы программирования не используются, и они достаточно легко поддаются освоению.

В главе 1 описываются базовые механизмы операционной системы. Знание этих механизмов необходимо для понимания того, как построить
минимальное приложение, использующее OpenGL. Умудренные опытом программисты со стажем, пришедшие к Delphi после изрядной практики в Turbo Pascal, вряд ли найдут в этой главе что-то новое, за исключением разделов, непосредственно относяшихся к OpenGL. Поэтому эту главу я рекомендую внимательно прочитать тем, кто пока не имеет достаточного опыта.
Сегодня студенты в большинстве учебных заведений начинают знакомство с программированием непосредственно с изучения Delphi, не повторяя весь путь, пройденный предыдущим поколением программистов.
Можно сказать, что система программирования Delphi явилась подлинной революцией, полностью изменившей взгляд на программирование и, в частности, на программирование для Windows. 3a прошедшие годы ряды программистов пополнились армией людей, способных быстро, подчас виртуозно, создать масштабное приложение, не имея особого понятия ни об архитектуре Windows, ни об основополагающих принципах работы приложения и его взаимодействия с операционной системой. В принципе, этих знаний и не требуется, чтобы создать приложение типа калькулятора или программы расчета напряжения в трубе. Однако при использовании OpenGL даже для построения минимальной программы необходимо иметь представление о базовых понятиях операционной системы.
Глава 2 посвящена примитивам OpenGL - базовым фигурам, из которых строятся объекты сцены. Собственно с этой главы и начинается рисование. Все примеры в ней плоскостные, однако пропускать ее не стоит, поскольку весь остальной материал предполагает наличие знаний и навыков, полученных при ее изучении. Материала главы достаточно для того, чтобы читатель смог построить график функции или чертеж автомобиля.
Глава 3 продолжает вводный курс по построениям в OpenGL - здесь читатель получит навыки трехмерной графики. Заканчивается глава разбором методов создания анимации. После изучения этой главы читатель сможет создавать уже довольно сложные модели, например, нарисовать автомобиль или самолет.
Глава 4 знакомит с тем, как приблизить качество изображения к фотореалистическому и как использовать OpenGL для создания специальных эффектов. Это самая важная глава лекций. После усвоения ее материала читатель сможет нарисовать, например, модель Вселенной со всеми ее компонентами.
Глава 5 содержит пример построения сравнительно масштабного приложения, визуализирующего работу робототехнической установки Здесь читатель может получить представление о том, как создавать подобные приложения и как можно использовать OpenGL для "серьезных" целей Здесь же можно углубить знания по важнейшим понятиям операционной системы
Глава 6 освещает некоторые дополнительные темы использования OpenGL. такие как вывод текста и выбор Здесь же содержится еще один пример сравнительно большой программы - модельера, позволяющего из набора базовых объектов создавать сложные системы и автоматизировать подготовку кода для таких систем.

к оглавлению