Романтика GameDev'а

(Начало в №17)

OpenGL и его свита

Поговорив о DirectX, стоит упомянуть и другие библиотеки, которые пригодятся при разработке игр. Дело тут даже не в том, что DirectX в чём-то плох или недостаточно универсален - нет, как раз в этом плане корпорация Microsoft постаралась очень даже неплохо. Но всегда приятно знать, что есть возможность выбора.

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


Его Величество OpenGL

Первая библиотека, которая действительно заслуживает первого места в списке, - это Open Graphics Library, открытая графическая библиотека. Называлась эта библиотека своим полным именем тогда, когда компьютеры были большими и медленными и для прорисовки трёхмерной графики нужны были невообразимые технические мощности. Инженеры из компании Silicon Graphics Incorporated, лидера на рынке графических решений, пришли к выводу, что рынок этот развивается недостаточно быстро из-за разнообразия API графических устройств. Так появилась идея сделать библиотеку, которая давала бы разработчикам прикладных программ независимость от оборудования, на котором их запускает пользователь. Идея эта зародилась у SGI намного раньше, чем у Microsoft, и уже в 1992 году была выпущена первая версия открытой графической библиотеки. Позднее, когда Microsoft уже выпустила DirectX, были грандиозные планы создать API, которое объединяло бы в себе обе библиотеки, но из-за финансовых затруднений эта интересная и перспективная идея, к сожалению, накрылась медным тазом.

Ещё одно отличие от DirectX заключается в том, что существуют различные реализации библиотеки OpenGL. Некоторые из них могут использоваться на компьютерах, не имеющих аппаратного ускорения графики, так как реализуют все необходимые для работы приложений функции чисто программно. Примером такой реализации может служить библиотека Mesa (mesa3d.sourceforge.net).

API OpenGL, конечно, отличается от DirectX'овского, хотя бы даже тем, что нет необходимости использовать технологию COM. Это также влияет на скорость работы приложения, но, к сожалению, несколько отрицательно сказывается на скорости разработки. Впрочем, существует множество библиотек-надстроек над OpenGL, реализующих удобное объектно-ориентированное API. Для Delphi, который любят начинающие game developer'ы и который настоятельно не рекомендуют использовать профессионалы, например, есть удобная библиотека GLScene, также свободная. Однако за счёт того, что API OpenGL построено таким образом, что требует полного указания алгоритма построения геометрической фигуры, можно проводить различные эксперименты и внедрять интересные инновации. Правда, для этого нужно очень хорошо понимать, как именно библиотека работает.

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

И напоследок ещё немного о языках программирования. OpenGL есть даже для Java, Python и Visual Basic, не говоря уже о C++, C#, Ada и уже упоминавшемся Delphi. Так что свобода выбора у того, кто предпочтёт OpenGL в плане выбора языка, вообще говоря, больше, чем у того, кто остановится на DirectX. Но, конечно, написать достаточно быструю игру на интерпретируемых Perl'е и Java будет... ну, скажем так, довольно затруднительно.

Официальный сайт OpenGL - www.opengl.org, есть и хороший русскоязычный сайт, посвящённый этой библиотеке: www.o-gl.ru.


SDL, герцог Линуксовый

SDL - это Simple Directmedia Layer, кроссплатформенная библиотека для работы с мультимедиа. Если искать аналог DirectX в мире кросс-платформенного программного обеспечения, то на его роль претендует, скорее, именно SDL, обеспечивающая интерфейс для работы с графикой, звуком, устройствами ввода. OpenGL входит в SDL как стандартное API для программирования быстрой графики. Правда, SDL, написанная изначально на C, менее удобна в использовании, чем объектно-ориентированный DirectX.

Хотя официально SDL поддерживает великое множество всяких операционных систем, но по-настоящему широко библиотека используется, пожалуй, только в Linux, где и играет роль аналога DirectX из Windows. Работать можно, используя различные языки программирования, например, C#, Ada, Java, PHP, Ruby.

Что касается работы SDL под Windows (хотя, конечно, вряд ли имеет смысл использовать эту библиотеку, если игра разрабатывается только под эту операционную систему), то тут всё достаточно своеобразно. Для Windows имеются две версии SDL, которые сами разработчики называют "надёжная" и "высокопроизводительная". Надёжная использует старые API, т.е. для графики - GDI, для звука - waveout, а высокопроизводительная основывается на DirectX. Так что, сами видите, SDL для Windows - совсем не оптимальное решение, так как GDI не приспособлена для быстрой графики (хотя 3D-графика всё равно будет рисоваться через OpenGL), а звук через waveout будет звучать хуже, чем он же, но через DirectSound. Наличие ещё одного слоя между программой и DirectX уменьшит скорость её работы, и, кроме того, использовать API DirectX напрямую гораздо удобнее, так как оно, как я уже говорил пару статей тому назад, объектно-ориентировано.

Найти SDL в Интернете несложно, так как библиотека имеет официальный сайт www.libsdl.org. На нём, кроме, собственно, библиотеки, много разнообразной документации, есть и на русском языке.

Конечно, об SDL можно было бы говорить долго, но не думаю, что многие будут разрабатывать игры под Linux, так что перейдём к следующей полезной библиотеке.


Его Высочество OpenAL

Думаю, провести параллель между названиями OpenAL и OpenGL совсем не сложно. Остаётся только выяснить, что же означает буква "А". Здесь тоже всё просто: A - это Audio. То есть, OpenAL - открытая библиотека для работы со звуком.

Хотя эта библиотека и не очень известна среди отечественных разработчиков и, тем более, пользователей, однако возможности у неё отнюдь не маленькие. Поддерживается работа с трёхмерным и одномерным звуком, при этом у OpenGL и OpenAL созвучны не только названия. Принципы и идеология работы, как и структура API библиотек, также сходны. Для работы с аудиоданными в OpenAL предусмотрено три типа объектов: слушатель, буфера с несжатой звуковой информацией и источники звука в трёхмерном пространстве. Слушатель у нас, понятное дело, один, а вот буферов и источников звука может быть сколько душе угодно. Как и OpenGL, OpenAL поддерживает расширения.

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

Для сжатия аудиоданных в OpenAL используется свободный кодек Ogg Vorbis, который в последнее время набирает не меньшую популярность, чем MP3 или WMA. Но для взаимодействия с Ogg Vorbis нужно отдельно скачать соответствующий SDK.

На официальном сайте аудиобиблиотеки (openal.org) можно найти OpenAL SDK, необходимый для работы с библиотекой, её исходные коды, скомпилированные версии OpenAL для различных платформ (Windows, Linux, MacOS X), и, конечно же, много документации. Документацию и SDK можно также найти на сайте компании Creative, которая активно участвует в разработке этой библиотеки. SDK для Ogg Vorbis можно найти на сайте www.vorbis.com.


Граф ClanLib

Эта библиотека будет в обзоре последней, хотя, конечно, этими четырьмя библиотеками GameDev кроссплатформенный совсем не ограничивается.

В отличие от всех предыдущих библиотек, которые изначально создавались как библиотеки общего назначения, ClanLib уже при своём, так сказать, зачатии задумывался как библиотека для разработки игр. И, в отличие от SDL, эта библиотека имеет объектно-ориентированный API, так как написана на C++.

Для работы с быстрой графикой используется OpenGL, для проигрывания звука всё тот же Ogg Vorbis. Однако, помимо мультимедийных, в библиотеке реализованы другие полезные для разработки игр вещи: работа с XML, с сетью, с элементами пользовательского интерфейса, используемыми в играх. Имеют отдельные функции для объединения всех используемых программой ресурсов в один большой файл-архив для того, чтобы ими не воспользовались злые люди, да и игру было распространять проще. Кроме того, для этих же целей ClanLib можно скомпоновать с исполняемым файлом игры статически.

Что ж, вот они какие, свободные кросс-платформенные библиотеки. Знать о них полезно, но реально для GameDev'а под Windows обычно используются только OpenGL и OpenAL как самые качественные и самые мощные. Тем не менее, если игра задумывается как кроссплатформенная (хотя, спрашивается, зачем вам это?), здесь уже без них однозначно не обойтись.

(Продолжение следует)

Вадим СТАНКЕВИЧ

Версия для печатиВерсия для печати

Номер: 

22 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!