GameDev :: Статья 4

Используются технологии uCoz
Статья 4. Direct3D vs OpenGL: Что Выбрать. Часть 2.

Автор: Промит Рои (Promit Roy), Перевод: Алексей Сало (Alex Salo)
Это вторая часть статьи. Здесь мы детально рассмотрим АПИ OpenGL, после чего, у вас будет достаточно полная картина для правильного выбора. Первым делом посмотрим на: Факты: OpenGL 1.3
OpenGL популярен среди разработчиков в разных индустриях. Он обеспечивает довольно большую функциональность, и является стабильным АПИ уже на протяжении 10+ лет своего существования. Он был написан 10 лет тому назад, чтобы обеспечить хорошую функциональность на будущее. К несчастью, это будущее пришло и ушло.

История
Первоначально OpenGL был разработан в 1992 г. компанией Silicon Graphics, как потомок АПИ, известного под названием Iris GL для Unix. Он был создан как открытый стандарт (не с открытым исходным кодом, как некоторые полагают) и сейчас доступен на различных платформах. (Теперь вы уже знаете, причем тут слово Open в названии АПИ, а вот GL обозначает: Graphic Library (Графическая Библиотека)). OpenGL сейчас находится под контролем комитета, называемого ARB. ARB состоит из представителей самых основных/влиятельных компаний, вовлеченных в графическую индустрию, включая 3D Labs, SGI, Apple, nVidia, ATI, Intel, id Software, и да-да, даже Microsoft.

Существуют две основные реализации OpenGL для Windows: одна от SGI, другая- Microsoft. Версия от Microsoft основывается на реализации от SGI. Так как последняя реализация уже больше не поддерживается, то рекомендуется использовать реализацию от Microsoft. Это относится к OpenGL 1.1, но и более новых заголовочных файлов и библиотек не существует (однако, вы можете пользоваться новыми возможностями OpenGL с помощью механизма расширений, который мы рассматривать не будем).

Есть еще одна, неофициальная реализация OpenGL известная под названием Messa3D. Я ее не пробовал, но знаю, что она является довольно стабильной, с открытым кодом, и доступна на многих платформах. Создатели Messa3D не обладают лицензией на OpenGL, поэтому они не могут назвать свою разработку официальной реализацией OpenGL, но синтаксис АПИ точно такой же.

OpenGL использовался на протяжении многих лет, в разных секторах tech-индустрии. С самого начала он разрабатывался с взглядом на будущее, и по этой причине он сегодня является таким же стабильным и совместимым. С другой стороны, метод обслуживания ARB послужил причиной сравнительно медленного развития OpenGL. На протяжении многих лет все было нормально, до тех пор, пока OpenGL не стал использоваться на профессиональных графических станциях. Так как уровень потребительских видеокарт давно превзошел уровень оных 10-ти летней давности, то разработчикам пришлось положиться на механизм расширений, чтобы использовать новые аппаратные возможности. Расширения- довольно мощная вещь, но они могут сделать код очень беспорядочным. ARB, кажется, поняла проблему, и сейчас пытается обновлять ядро OpenGL чаще.

Структура
OpenGL является конечным автоматом, который управляет обработкой и прорисовкой примитивов. Он использует процедурную модель (т.е. функции) для модифицирования конечного автомата, и передачи данных ему. Благодаря эффективности данного механизма, код обычно получается коротким и понятным. Это делает его проще в отладке. Хотя OpenGL является процедурным, он может быть использован в линейном, модульном, или объектно-ориентированном виде с такой же легкостью, все зависит от выбора программиста. OpenGL также скрывает много деталей относительно определенного аппаратного обеспечения. Большинство основных операций можно сделать очень легко. Прорисовка сцены происходит между вызовами функций: glBegin и glEnd.

Имена всех функций OpenGL имеют определенное соглашение, то есть, каждая функция выглядит в общем виде так: glИмяФункции[аргументы]. Пример такой функции является ф-ция glVertex3f. gl говорит о том, что это вызов OpenGL функции. Vertex говорит о том, что вы определяете вершину. 3 в названии означает то, что для определения вершины нам понадобятся 3 точки, и буква f обозначает тип параметра (float). (кстати, количество параметров присутствует в названиях далеко не всех OpenGL функций). Для обеспечения лучшей переносимости, в OpenGL определены собственные типы. Все эти типы образуются от названий типов в языке Си++, только перед именем типа ставятся две дбуквы GL. Например, типы int, или float в OpenGL переопределены под названием GLint, и GLfloat соответственно.

И последнее, синтаксис OpenGL более понятный по отношению к Си (не путать с Си++), чем синтаксис Direct3D.

Достоинства
OpenGL имеет достаточно много достоинств. OpenGL очень хорошо переносим. Он будет работать почти на всех существующих платформах, и работать достаточно хорошо. Он даже работает под Windows NT 4.0, чего не скажешь о Direct3D (хотя, DirectX 3.0 работает на этой платформе, но кому захочется его использовать? Так же, имейте в виду, что Windows 2000 и Windows XP, которые используют ядро NT, с легкостью поддерживают последние версии Direct3D). Причина, по которой OpenGL работает на многих платформах- это открытый стандарт. Это значит то, что любая компания, которая хочет иметь поддержку OpenGL на своей платформе, просто покупает лицензию у SGI, а затем делает его реализацию на своей платформе.

OpenGL имеет широкий спектр возможностей, как сам по себе, так и с помощью расширений. Его расширения помогают использовать все самые современные технологии, не смотря на путаницу.

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

Слабые стороны
Хочу еще раз упомянуть, что как раз расширения и являются недостатком. Хотя это и мощное оружие, все же они делают код довольно беспорядочным. Также они «сбивают с толку» любой компилятор, не поддерживающий синхродорожки (просмотр файлов). Самое хуже то, что много новых расширений имеют особенности (специфику) определенной карты, или определенного поставщика.

Также есть еще одно неудобство в названиях функций. Многие современные среды разработки могут показывать контекстные подсказки (какие параметры использует данная функция), но они не показывают, какие параметры используются в OpenGL функциях, ведь если вы знаете, как пользоваться функцией, то должны знать параметры, которые она принимает. И еще, наличие 12 разных имен для одной и той же функции может показаться очень странным, и непривычным для программиста Си++, ведь Си++ поддерживает перегрузку функций.

Языковая поддержка
Под Win32 платформой, по крайней мере, OpenGL использует стандартные DLL с экспортируемыми функциями. Их использование напоминает обычное использование WinAPI функций. Это означает то, что вы можете использовать OpenGL функции в любом языке, в любом месте (к сожалению, я не знаю как дела обстоят с языком Java. Лучше это выяснить на официальном сайте Sun Microsystems).

Будущее
Велись довольно интересные и полезные разговоры по поводу будущего OpenGL. Фирма 3D Labs предлагает выпустить OpenGL 2.0, что сейчас обсуждается в ARB. 3D Labs хочет разработать опять стандарт для будущего- OpenGL 2.0.

Комментарии/Мой совет
Если вы планируете заняться только игровой индустрией, то было бы довольно умно выучить как D3D, так и OpenGL. Для любой другой 3Д индустрии вам лучше иметь дело с OpenGL. В конце концов, это дело собственного вкуса. И независимо от того, что вы выучите первым- OpenGL или Direct3D, вы всегда сможете выучить и второе (и сделать это будет не сложно. Зная что-то одно, будет намного проще выучить и другое).

От переводчика
В следующей, заключительной части, мы все-таки сравним два этих АПИ с различных сторон (таких как, например: производительность, реалистичность, программный рендер, мнение разработчиков, общее будущее, и т.д.). Думаю, будет очень интересно дочитать до конца, и навсегда определиться с выбором АПИ.
Alex Salo.

Навигация
Назад | Список статей