OpenGL в Delphi

Эта книга посвящена компьютерной графике,


Эта книга посвящена компьютерной графике, а именно тому, как использовать OpenGL в Delphi.
OpenGL - это стандартная библиотека для всех 32-разрядных операционных систем, в том числе и для операционной системы Windows.
OpenGL - не отдельная программа, а часть операционной системы. Это означает, что откомпилированное приложение, использующее OpenGL, не нуждается ни в каких дополнительных программах и модулях, кроме стандартных, содержащихся на любом компьютере с установленной операционной системой Windows 95 версии OSR2 и выше.
Вообще говоря, в этой книге идет речь о программировании приложений, использующих графический акселератор, однако все приводимые программы будут работать и на компьютере, не оснащенном ускорителем.
Для программистов, использующих язык С, существует множество источников, из которых можно почерпнуть сведения о том, как использовать библиотеку 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. такие как вывод текста и выбор Здесь же содержится еще один пример сравнительно большой программы - модельера, позволяющего из набора базовых объектов создавать сложные системы и автоматизировать подготовку кода для таких систем.

Содержание раздела