0

Библиотеки opengl и directx история и перспективы

Авторы: А. Игнатенко
Источник: Алексей Игнатенко. OpenGL и DirectX: взгляд изнутри. Компьютерная графика и мультимедиа. Выпуск №2(1)/2004. http://cgm.computergraphics.ru/content/view/55

Аннотация

Статья посвящена обзору двух графических библиотек.

Как это было

OpenGL

Стандарт OpenGL (Open Graphics Library – открытая графическая библиотека) был создан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, изначально разработанная фирмой Silicon Graphics Inc (SGI).

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

Развитие стандарта OpenGL осуществляется специальной бюрократической структурой, известной как Architectural Review Board (ARB) – Комитет по пересмотру архитектуры. Комитет состоит из представителей основных компаний, заинтересованных в развитии и использовании библиотеки. В их числе 3D Labs, SGI, Apple, NVIDIA, ATI, Intel, id Software и, конечно, Microsoft. Кстати, Microsoft поставляет реализацию OpenGL вместе со своими операционными системами. Она соответствует одной из ранних версий OpenGL и не использует возможности аппаратного ускорения. Этот недостаток восполняют драйверы видеокарт, которые предоставляют быстрые реализации OpenGL.

C начала 90-х годов прошлого века OpenGL используется в различных областях индустрии и науки. Архитектура библиотеки получилась настолько удачной, что уже на протяжении более десяти лет она остается стабильной и предсказуемой. OpenGL де-факто является стандартом в области программирования графики. Но в этом скрыт и ее недостаток. ARB работает довольно медленно – любое изменение стандарта требует множества согласований, документов и так далее. В силу этого OpenGL развивается очень вяло. Правда, до последнего времени с этим не было проблем, поскольку изначально библиотека предназначалась для быстрых рабочих станций профессионального уровня, которые обновляют не так уж часто. Однако сейчас даже дешевые видеокарты за $100 превзошли уровень профессиональных монстров пятилетней давности стоимостью в тысячи долларов. И при этом обновление их возможностей происходит в среднем раз в год. Фактически OpenGL не поспевает за индустрией, поэтому игровые разработчики вынуждены использовать так называемый механизм расширений (extensions), чтобы получить доступ к новейшим функциям видеокарт.

На данный момент OpenGL прошла путь от версии 1.0 до версии 1.4 (и это за десять лет!). Версия 2.0, обещающая революционные изменения, находится в процессе стандартизации.

DirectX

К моменту выхода Windows 95 большинство игр по-прежнему делалось под MS-DOS. Windows в те времена не предоставляла возможностей для программирования игр. Многочисленные уровни абстракции (введенные в целях совместимости и универсальности) делали доступ к звуковому и видеооборудованию весьма медленным и неприменимым для игровых приложений. Поэтому было решено разработать библиотеку, предоставляющую возможность прямого доступа к аппаратуре. Это позволило бы играм работать на приемлемой скорости (и увеличило бы продажи Windows 95).

Вместо создания собственного API Microsoft использовала разработку небольшой компании RenderMorphic. Говорят, что изначально API был выполнен авторами в рамках студенческого задания и в конечном итоге провалился на экзамене. Тем не менее Microsoft интегрировала эту библиотеку в свой Game SDK. Корпорация подавала это как идеальное решение для программирования игр.

Однако то, что позже стало называться DirectX 1.0., не приобрело широкой популярности. Библиотека оказалась медленной, с большим количеством ошибок, с неудобной архитектурой и, кроме того, чрезмерно сложной.

Разумеется, Microsoft не собиралась сдаваться и продолжила развитие библиотеки с учетом пожеланий разработчиков игр. Первой более или менее жизнеспособной версией была DirectX 3.0. Позже последовали версии 5, 6 и 7 (четвертой не было). Седьмая версия была воспринята разработчиками с интересом: она хорошо работала, ее интерфейсы были достаточно удобны в использовании. Восьмая версия не заставила себя ждать и принесла интересные нововведения – вершинные и пиксельные шейдеры (специальные, обычно короткие программы, предназначенные для выполнения на графическом процессоре; используются для расчета освещения, создания тех или иных спецэффектов и так далее). Недавно вышедший DirectX 9 также развивает эти перспективные направления.

Длительное время DirectX рассматривался как неудачная альтернатива OpenGL. Однако последние улучшения в API сделали эту библиотеку весьма мощной и стабильной. Поскольку она разрабатывается авторами ОС, можно быть уверенным, что скорость ее работы с графикой оптимальна. Многие считают, что именно DirectX, а не OpenGL, становится стандартом для программирования графики. Microsoft постоянно работает в тесном контакте с разработчиками "железа", обеспечивая поддержку новых возможностей аппаратуры. Более того, DirectX иногда предлагает различные возможности раньше, чем на рынке появляются видеокарты с их аппаратной реализацией.

Мы рассматриваем только графическую часть DirectX, но кроме графики DirectX также предлагает интерфейсы для работы со звуком, источникам ввода, мультимедиа и так далее. У OpenGL таких функций нет – это чисто графическая библиотека.

Архитектура

Ключевая особенность OpenGL – простота. Ядро OpenGL контролирует процесс обработки примитивов (то есть треугольников). Для передачи данных используется процедурная модель, фактически – вызовы функций. В каждый момент времени состояние OpenGL определяется через набор переменных, задающих параметры обработки (например, накладывать текстуру или не накладывать). Каждый новый переданный треугольник проходит обработку в соответствии с текущим состоянием. Такой механизм весьма эффективен, а код обычно короток и прост. Хотя ядро OpenGL процедурное, в использовании OpenGL совместно с объектно-ориентированными технологиями сложностей обычно не возникает: все зависит от выбора программиста.

Структура DirectX очень сильно отличается от OpenGL. DirectX основан на модели COM (Component Object Model). Тем, кто знает, что это такое, сама аббревиатура уже скажет многое. Для остальных заметим лишь, что в отличие от простого вызова функций эта модель предполагает выполнение некоторых дополнительных действий, связанных с компонентной архитектурой DirectX. Такая архитектура имеет как достоинства, так и недостатки. В частности, код, в котором используются вызовы DirectX, обычно не является идеалом легко читаемого и понимаемого. Поэтому даже рисование простого треугольника требует огромного объема кода. Разработчики Microsoft, конечно, понимают это, поэтому для упрощения программирования ими создана отдельная библиотека DirectX Common Files, которая скрывает часто используемый код.

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

Производительность

Вопрос производительности настолько же важен, насколько запутан и неясен. Дебаты на тему "Что быстрее – OpenGL или DirectX?" не утихают. При этом, как ни парадоксально, cкорость обоих библиотек одинакова.

Иначе и быть не может, потому что сейчас большинство функций реализованы напрямую через аппаратные ускорители. Естественно, производительность может различаться в зависимости от степени оптимизации программного кода и используемой для тестирования аппаратной платформы. Оптимизация аппаратных драйверов тоже может внести свой вклад в преимущество той или иной библиотеки. Такие вещи достаточно тяжело предвидеть, поэтому хорошие игровые "движки" часто имеют две версии: под OpenGL и под DirectX. Это не очень-то хорошо как для производителя, так и для пользователя (возрастает стоимость разработки игр, появляются ошибки и т.п.), но таковы реалии современного рынка видеоигр.

Пример: считается, что драйверы от фирмы ATI для серии видеокарт ATI Radeon хорошо оптимизированы под DirectX и значительно слабее поддерживают OpenGL. Однако специально написанные тесты не выявили значительной разницы в скорости работы программ. Кроме того, на недавней Конференции разработчиков игр (КРИ, www.kriconf.ru) автору довелось побеседовать на эту тему с представителем ATI. Точка зрения последнего такова: если драйверы OpenGL у ATI и хуже, чем у NVIDIA, то это лишь вопрос времени – ATI обязательно будет в поддерживать OpenGL в полном объеме.

Сравнение

В чем же, если не в производительности, различие между библиотеками? Прежде всего – в удобстве интерфейса, функциях, гибкости, перспективах развития и области применения.

Начнем с функций. Неоднократно приходилось слышать заявления типа: "DirectX 9 поддерживает пиксельные шейдеры, а OpenGL не поддерживает, поэтому все игры должны быть написаны под DirectX!" Такое мнение неверно только отчасти. Действительно, если посмотреть на стандарт OpenGL последней версии (1.4), в нем ни слова о шейдерах.

Изображение, получаемое в реальном времени на современном аппаратном ускорителе. Качество и скорость рисования не зависят от применяемой библиотеки: DirectX и OpenGL обладают схожими возможностями.

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

Читайте также:  Вай фай передатчик для телевизора

Этот процесс выглядит следующим образом: как только производитель выпускает видеокарту с поддержкой определенной полезной функции, он включает ее в свою реализацию OpenGL (которая обычно входит в поставку драйвера). Для программиста эта возможность становится доступной, если он специальным образом запросит данное расширение. Конечно, такой путь не универсален: на другой видеокарте сделать это не получится из-за различий в интерфейсе. Поэтому существуют расширения, одобренные ARB, – при их использовании можно надеяться, что они будут работать на видеокартах различных производителей. Такие расширения являются кандидатами на включение в последующие версии OpenGL.

Данный механизм выглядит (и на самом деле является) неудобным. В DirectX все проще: функциональность либо поддерживается данной версией библиотеки, либо не поддерживается. Если нет – придется надеяться и ждать следующей версии. Однако случаи, когда аппаратные функции не используются из-за того, что не были включены в версию DirectX, довольно редки – как уже говорилось, Microsoft тесно работает с производителями игрового (и не только) "железа". С другой стороны, ждать версий DirectX приходится около года, а в это время новые функции уже доступны через расширения OpenGL.

Таким образом, по поддержке аппаратных функций OpenGL и DirectX , в общем, эквиваленты. OpenGL новые функции доступны через механизм расширений, а в DirectX они появляются только в новых версиях.

DirectX очень удобен для любителей объектно-ориентированного программирования и COM в частности. COM в DirectX используется для внесения изменений в библиотеку (в новых версиях) без изменения существующего кода. В OpenGL такого нет, но это вряд ли можно назвать серьезным недостатком.

Объем кода, необходимого для написания простой программы на DirectX, весьма велик (варьируется от 200 до 800 строк). Microsoft активно пытается уменьшить этот показатель, но он, тем не менее, достаточно велик. В OpenGL все существенно проще – для решения такой же задачи необходимо менее 50 строк кода.

OpenGL идеален для визуализации результатов научных исследований.

Серьезным достоинством OpenGL является прежде всего то, что это "открытый стандарт". Любая компания, имеющая аппаратную платформу, может купить лицензию у SGI и затем сделать собственную реализацию OpenGL. Изменения в OpenGL предлагаются, обсуждаются и утверждаются представителями различных компаний. Что касается DirectX, то здесь ситуация прямо противоположная. Только Microsoft может вносить какие-либо изменения в библиотеку. Иначе говоря, именно Microsoft в конечном итоге определяет все пути развития библиотеки, и если путь был выбран неверно, это может быть исправлено только в новой версии.

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

Что дальше?

Появление графических процессоров (GPU – Graphics Processing Unit) нового поколения, позволяющих создавать доселе немыслимые спецэффекты в реальном времени, всколыхнуло индустрию, и вскоре стало ясно, что за ними будущее. Очевидно, что графические библиотеки должны соответствовать этой тенденции.

Начиная с восьмой версии, DirectX имеет встроенную поддержку программируемых шейдеров. В девятой версии эта поддержка была значительно улучшена и расширена. И в дальнейшем развитие DirectX наверняка будет связано с постепенным улучшением гибкости и удобства использования программируемого "железа". Каких-либо радикальных перемен пока не ожидается. Например, вряд ли стоит надеяться, что Microsoft сделает реализации DirectX на других платформах.

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

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

В то же время близится к завершению разработка нового стандарта библиотеки – OpenGL 2.0. Развитие графической аппаратуры вышло за пределы исходной спецификации. Вторая версия OpenGL призвана поднять планку и вновь создать стандарт для компьютерной графики на десятилетия. Помимо прочего OpenGL 2.0 включает в себя возможность программирования всего графического конвейера на языке высокого уровня (подобный язык уже появился в девятой версии DirectX и называется HLSL – High Level Shading Language)

Таким образом, в перспективе вновь ожидается конкуренция между последующими версиями графических библиотек, от которой программисты только выиграют: одни получат желаемую мощь и тонкие настройки "железа" DirectX, другие – простоту и не меньшие возможности OpenGL.

NVIDIA обещала уже в ближайшие несколько лет достичь кинематографического качества видеоигр, сделанных для нового поколения видеоускорителей. Трудно сказать, является ли данное заявление результатом реальной оценки ситуации или это не более чем рекламный трюк. На сегодня игры довольно далеки от своего "кинематографического" идеала. Прежде всего это касается интерактивности – не хватает мощностей как центрального, так и графического процессора. Но мощности растут, порой даже обгоняя закон Мура. А при условии достаточных мощностей на первый план выходят возможности программирования графического процессора для получения реалистичных спецэффектов. Уже сейчас при просмотре технических демо NVIDIA и ATI иногда дух захватывает от красоты картинки! Описанные нами графические библиотеки как раз и являются для программистов проводниками в мир возможностей графического "железа".

Чем все это грозит простому пользователю? В первую очередь, улучшением качества картинки в играх и других графических приложениях. Развитие программируемых графических процессоров стимулирует фантазию дизайнеров и разработчиков, что приведет к появлению различных оригинальных спецэффектов. Можно ожидать повсеместного распространения высококачественных теней, использования различных отражающих поверхностей, процедурных текстур, деформируемой геометрии и так далее. Представляете, точным выстрелом разбить стакан вина на столе, приблизиться и увидеть свое отражение в каждой капле? И игру света от осколков стекла? Все это будет, и довольно скоро. Не сомневайтесь.

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

Начнем с OpenGL.

Интерфейс OpenGL (Open Graphics Library) создан и запущен в 1992 году известными компаниями в сфере разработки программ. Он был представлен как кросс-платформенный интерфейс, не зависящий от аппаратного обеспечения. В базе лежала IRIS GL — библиотека, которую ранее разработали специалисты из Silicon Graphics Inc (SGI).

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

Развитие библиотеки OpenGL происходит за счет специализированной структуры — Architectural Review Board (ARB). Это «Комитет по пересмотру архитектуры». В него включены несколько компаний, которые имеют определенные интересы в процесс развития рассматриваемой библиотеки. Сюда входят такие гиганты как 3D Labs, NVIDIA, ATI, Intel, id Software, SGI, Apple, и Microsoft, который в своих реализациях Windows использует OpenGL. Версия же этого OpenGL сходна с более ранними разработками и не может работать с аппаратным ускорением, но эти возможности появляются благодаря драйверам используемых видеокарт.

OpenGL используется повсюду, начиная с 90-х голов 20 века. Это связано с тем, что данная библиотека была грамотно написана с удачной архитектурой. Эта библиотека ведет себя стабильно при использовании, а также поведение OpenGL легко предсказать. Одним из недостатков является медленное развитие. Это связано с медленной работой ARB, а именно в том, что при изменении определенных стандартов много времени уходит на согласование различных документов.

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

Пришло время вспомнить историю развития DirectX.

К выходу операционной системы Windows 95 все же большая часть видеоигр работала под MS-DOS. Ранние версии Windows не представляли возможностей для разработок игр.

Уровни абстрагирования, обуславливающие универсальность и совместимость, не позволяли быстрый доступ к видеокартам и такая модель не подходила для игр.
В связи с этим приняли решение о создании совершенно новой библиотеки, позволяющей напрямую работу с оборудованием. Это могло увеличить производительность игр, а также следовательно и продажи Windows 95.
Компания Microsoft решила не использовать разработки своего API и взяли за основу решения небольшой фирмы RenderMorphic. Известно, что первоначально данный API был студенческим заданием и не узнал успеха на экзамене. Но все же Microsoft встроили эту библиотеку в Game SDK, считая это отличной возможностью.
Позже эта разработка называлась DirectX 1.0. и не стала популярной. Из-за медленной работы, кучи ошибок и негибкой архитектуры, а также достаточно сложного кода.

Читайте также:  В какой папке хранится резервная копия iphone

Microsoft учитывали методы разработчиков игр и продолжали развивать DirectX. Версия 3.0 была более работоспособной. Потом были разработаны версии 5, 6 и 7. Седьмая версия тоже неплохо работала и ее использование было более удобным. Вскоре вышел DirectX 8, принеся с собой нововведения, а именно шейдеры — мини-программы, занимающиеся расчетом освещения и созданием специальных эффектов. Позже вышел 9-й DirectX со своими наработками. В данный момент существуют 10 и 11 версия. Хотя некоторые считают, что последние версии DirectX являются больше маркетинговым ходом, чем новыми разработками.

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

В будущем возможно усовершенствование существующих интерфейсов, а возможно и возникновение совершенно новых.

Open Graphics Library – это стандартное графическое приложением для 2D и 3D-визуализации, разработанного в 1992 году. Opengl поставляется в двух вариантах. Первый из них — «Микрософт OpenGL», который часто включается в «Виндовс» для установки графической карты. Второй — Cosmo OpenGL – предназначен для систем, у которых нет ускоренной видеокарты. Библиотека OpenGL – основное условие работы приложения.

Пользовательский обзор OpenGL

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

OpenGL не зависит от характеристик «Виндовс» каждой операционной системы, но предоставляет специальные подпрограммы для ОС. Она выпускается с огромным перечнем встроенных возможностей, запрашиваемых через API. К ним относятся:

  • скрытое удаление поверхности;
  • альфа-смешение (прозрачность);
  • сглаживание;
  • текстурное картирование;
  • операции с пикселями;
  • просмотр и моделирование трансформаций;
  • атмосферные эффекты (туман и дымка).

Silicon Graphics – разработчики передовых графических рабочих станций – инициировала разработку OpenGL. DEC, Intel, IBM, Microsoft и Sun Microsystems вошли в отраслевую комиссию по обзору архитектуры. Разработка приложений, использующих API OpenGL, не несет никаких затрат, кроме обучения. Microsoft предлагает бесплатную загрузку ее библиотек для своих систем.

Набор модулей для Windows

Приложение доступно на многих системах Win32 и Unix. А f90gl — это реализация публичного домена официальных связей Fortran 90 для OpenGL, оформленная в виде базы данных модулей и библиотек, определяющей необходимые интерфейсы для функциональности программы. Сам f90gl был разработан Уильямом Ф. Митчеллом технологического института Гейтерберга в США. До недавнего времени OpenGL LF9x можно было создавать только в виде статически связанных программ, ориентированных на Visual C.

В настоящее время доступен гораздо более дружелюбный метод благодаря усилиям по переносу, реализованным Lawson B. Wakefield из Великобритании. Эта реализация сделала интерфейс OpenGL доступным в рамках WiSK и Winteracter и была выполнена на добровольной, некоммерческой основе. Для подключения библиотеки OpenGL нужны определенные DLL OpenGL, установленные в каталоге Windows SYSTEM32. К ним относятся следующие:

Первые две из этих библиотек OpenGL (изучить их перед установкой необходимо), являются стандартной частью Windows разных модификаций и Me. Библиотеки и модули f90gl должны быть установлены в LIB-каталоге LF95:

  • F90GL.LIB;
  • F90GLU.LIB;
  • F90GLUT.LIB;
  • OPENGL32.LIB;
  • GLU32.LIB;
  • GLUT32.LIB;
  • OPENGL.MOD;
  • OPENGL2.MOD;
  • OPENGL_KINDS.MOD;
  • OPENGL_GLINTERFACES.MOD;
  • OPENGL_FWRAP.MOD;
  • OPENGL_GLUINTERFACES.MOD;
  • OPENGL_GLU.MOD;
  • OPENGL_GLUTINTERFACES.MOD;
  • OPENGL_GLUT.MOD;
  • OPENGL_GL.MODd.

Компиляция и связывание программ f90gl требует, чтобы каталог LF95 LIB указывался в пути модуля компилятора и имена библиотек f90gl для связывания.

Библиотеки изображений

DevIL используется для разработчиков. Он поддерживает множество форматов изображений для чтения и записи, несколько компиляторов и ОС («Виндовс», «Линукс», Мас). Библиотека имеет следующий синтаксис :

  1. FreeImage — это кросс-платформенная библиотека OpenGL загрузки изображений с очень широкой поддержкой форматов (включая некоторые HDR-форматы, такие как OpenEXR).
  2. OpenImageIO (OIIO) — это библиотека для чтения и записи изображений, а также множество связанных классов, утилит и приложений. Широко используется в анимационных и VFX-студиях по всему миру, а также встроена в несколько коммерческих продуктах.
  3. SOIL — это кросс-платформенный загрузчик изображений общего пользования, который чрезвычайно мал. C ++, способный загружать текстуры DDS (DDS9 и DDS10) по лицензии MIT.
  4. Glraw предоставляет инструмент командной строки, который преобразует файлы изображений в необработанные, непосредственно содержащие простые текстурные данные.

Импорт активов 3D-файлов

Графическая библиотека OpenGL для импорта активов (Assimp) представлена как библиотека с открытым исходным кодом для импорта разнообразных популярных трехмерных моделей. Самая последняя версия экспортирует 3d-файлы и подходит как конвертер общего назначения. Имеется несколько видов таких библиотек:

  1. Может считывать различные форматы 3D-файлов – COLLADA, собственные файлы Blender3D, Wavefront Obj (.obj) и многие другие. Библиотека lib3ds предназначена для чтения 3ds-файлов.
  2. Open3mod — это средство просмотра модели на базе Windows. Он загружает все форматы файлов, которые поддерживает Assimp, и идеально подходит для быстрой проверки 3D-активов.
  3. AssetKit (In Progress) — библиотека OpenGL импортер/экспортер 3D-ресурсов, утилита, основанная на спецификациях COLLADA/glTF. Главное внимание здесь уделено COLLADA и glTF. Она будет полностью поддерживать форматы 1.4, 1.4.1, 1.5+, а также некоторые другие в качестве библиотеки для загрузки моделей в OpenGL.

Высокопроизводительная 2D/3D-графика

Графическая библиотека OpenGL для Android включает поддержку высокопроизводительной 2D и 3D-графики с открытой библиотекой, в частности API OpenGL ES. Android поддерживает ее как через API-интерфейс инфраструктуры, так и Native Development Kit (NDK). В платформе названной операционной системы есть два фундаментальных класса, которые позволяют создавать и манипулировать графикой с помощью API: GLSurfaceView и GLSurfaceView.Renderer.

Если есть цель использовать OpenGL в приложении для Android, то нужно понимать, как реализовать эти классы в действии. Так, GLSurfaceView может рисовать и манипулировать объектами, используя вызовы API OpenGL аналогично функции SurfaceView. Этот интерфейс определяет методы, необходимые для рисования графики в a GLSurfaceView. И пользователь должен обеспечить реализацию этого интерфейса как отдельный класс и прикрепить к GLSurfaceView экземпляр GLSurfaceView.setRenderer. После того как создан контейнерный вид для OpenGL ES, GLSurfaceView и GLSurfaceView.Renderer, можно начать подключение библиотеки OpenGL и использовать API.

Набор мобильных графических устройств

Реализации приложения различаются для Android-устройств поддерживаемыми расширениями API и включают сжатие текстур и другой набор функций. Android Extension Pack (AEP) поддерживает стандартную базу расширений. Упаковка их вместе способствует последовательному набору функциональности на всех устройствах, позволяя разработчикам в полной мере использовать новейший пакет мобильных графических конструкций.

AEP также улучшает поддержку изображений, буферов хранения шейдеров и счетчиков. Чтобы приложение могло использовать AEP, версия платформы должна поддерживать ее. Нужно также обозначит требование AEP следующим образом:

Проверка и выбор версии OpenGL ES

На Android-устройствах доступно несколько версий приложения. Можно указать минимальную версию API, которая требуется приложению в телефоне. Версия API opengl ES 1.0, версия 2.0 и версия 3.0 обеспечивают высокопроизводительные графические интерфейсы для создания 3D-игр, визуализации и пользовательских интерфейсов. Программа для OpenGL ES 2.0 во многом похожа на версию 3.0, представляющую собой надмножество API 2.0 с дополнительными функциями.

Программирование для 1.0 / 1.1 API по сравнению с 2.0 и 3.0 значительно отличается, и поэтому разработчикам следует внимательно изучить некоторые факторы, прежде чем начинать разработку с помощью этих API. Так, в общем, 2 и 3 обеспечивают более быструю графическую производительность, чем API ES 1/1,1. Тем не менее разница в ней может варьироваться в зависимости от устройства Android, на котором работает приложение, из-за различий в реализации аппаратного обеспечения графического конвейера.

Сравнение с драйверами DirectX

В Windows графические драйверы DirectX поддерживаются качественнее, чем OpenGL, несмотря на то что разработчики управляют из более быстрых.

Библиотеки OpenGL и DirectX (история и перспективы их) связаны с «Микрософт», которая фактически выступила против OpenGL. В 2003 году Microsoft заявила, что ей больше не интересны планы OpenGL. Затем в 2005 году они на презентации в SIGGRAPH сделали заявление, что Windows Vista удалит ее поддержку.

Эта кампания вызвала хаос в сообществе OpenGL, после чего многие программисты в области профессиональной графики перешли на DirectX. После того как Vista все же была выпущена, громкие заявления выполнены не были – поставщики создали новые производительные драйверы (ICD), которые восстанавливают встроенную функцию. Open рассылала информационные бюллетени с информацией, что по-прежнему является лучшим приложением. Тем не менее ущерб уже был нанесен, а общественное доверие к OpenGL сильно пошатнулось.

Читайте также:  Как восстановить пароль без номера телефона вконтакте

На самом деле OpenGL более мощный, чем DirectX, поддерживает больше платформ и имеет преимущественное значение для будущего игр. История и перспективы библиотек OpenGL и DirectX говорят о том, что первая из них имеет все же больше позитива:

  1. Предоставляет возможность использовать функции графики для оперативных систем, в то время как DirectX предоставляет только моментальные элементы из них в новейших версиях «Виндовс». Технология тесселяции, которую Microsoft разработывал для DirectX 11, была расширением OpenGL в течение трех лет. Путем кропотливого труда удалось добиться того, что DirectX 10 и 11 теперь работают так же быстро, как и OpenGL, и поддерживают почти столько же функций. Однако есть одна большая проблема: они не работают в Windows XP, которой до сих пор пользуются много людей.
  2. Кросс-платформенный. Многие пользователи Lugaru работают на Mac, Linux и Windows XP и не могут играть через DirectX. Единственный способ доставить новейшую графику для геймеров Windows XP — через 32bits opengl библиотеки.
  3. Лучше для будущего игр. Это некоммерческий открытый стандарт, созданный для того, чтобы пользователи на любой платформе могли получать высококачественную графику, которую предоставиляет их оборудование. Его развитие разрушается сегодня монополистической атакой корпоративного гиганта, пытающегося доминировать в отрасли. Вот почему Direct3D становится единственным игровым графическим API, поддерживаемым в Windows.

C ++ и настройка Visual Studio

Библиотека OpenGL для c имеет бесплатную версию. Специалисты рекомендуют скомпилировать программы, написанные на ANSI C с OpenGL и GLUT, с помощью Dev-C ++.

Bloodshed Dev-C ++ – это бесплатный компилятор C ++ и среды разработки для операционных систем Windows. Как и большинство таких же технических средств, его можно использовать для компиляции ANSI C. Установив файлы заголовков GLUT и библиотеки, его применяют для написания программ. Для реализации этого проекта можно использовать 32-разрядную или 64-разрядную «Виндовс».

Перед тем как подключить к dev c библиотеку OpenGL, понадобятся заголовки glew, которые можно найти на вебсайте sourceforge Extension Wrangler, и версия freeglut для Visual Studio:

  1. Нажать ссылку внутри пакета freeglut 3.0.0 MSVC.
  2. Ввести имя файла, который нужно скачать.
  3. Загрузить его, в папке с freeglut.
  4. Извлечь и переименовать в freeglut.
  5. Общий каталог для установки: C: DEV.
  6. Каталог, в котором находятся проекты: C: DEV visual-studio-c ++.
  7. Каталог, в котором находятся библиотеки: C: DEV Lib Visual Studio.
  8. Открыть его и создать пустой проект > «Шаблоны»> Visual C ++> Пустой проект.
  9. Затем написать «Имя»: Shapes2D.
  10. Местоположение: C: dev visual-studio-c ++ .
  11. Создать новое решение в OpenGL-библиотеке для Visual Studio. Название решения: BadprogTutorial OK.
  12. Проект Shapes2D создан в решении BadprogTutorial.
  13. Добавить main.cpp> Кликнуть правой кнопкой мыши «Проект»> «Добавить»> «Новый элемент»> Visual C ++> Файл C ++. Написать имя: main.cpp и добавить.
  14. Настроить конфигурации библиотеки GL и OpenGL glut.
  15. Кликнуть мышью проект Shapes2D> «Свойства». В левом верхнем углу раскрывающегося меню найти «Конфигурация» и выбрать все конфигурации (вместо Debug).
  16. Кликнуть мышью на «Свойства конфигурации»> C / C ++> «Общие»> «Дополнительные каталоги вложений». Справа находится раскрывающееся меню, нажать «Изменить . ».
  17. Появилось новое окно: «Дополнительные каталоги».
  18. Нажать значок «Новая линия»> кнопку обзора и выбрать две следующие папки: C: DEV Lib Glew-1.12.0 . C: DEV Lib freeglut-3.0.0 .
  19. Нажать кнопку ОК. Применить использование библиотеки OpenGL, включая библиотеки, библиотечные папки.
  20. Кликнуть правой кнопкой мыши проект Shapes2D> «Свойства» > «Свойства конфигурации»> «Коннектор»> «Общие»> «Дополнительные каталоги библиотек».
  21. Справа находится раскрывающееся меню. Нажать на «Изменить . ». Появилось новое окно: «Дополнительные библиотеки».
  22. Нажать значок «Новая линия»> нажать кнопку обзора> выбрать две следующие папки для 64-разрядной версии: C: DEV Lib Glew-1.12.0 Lib Release x64 и C: DEV Lib freeglut-3.0.0 Lib x64.
  23. Нажать кнопку ОК> применить библиотечные файлы. Кликнуть мышью проект Shapes2D> «Свойства» > «Свойства конфигурации»> «Коннектор»> «Ввод».
  24. Справа находится раскрывающееся меню, нажмите «Изменить . ».
  25. Появилось новое окно: «Дополнительные зависимости». Кликнуите по белой области и напишите: freeglut.lib.
  26. Нажать Enter, чтобы перейти к следующей строке: glew32.lib.
  27. Нажать «Применить» и ОК.

Теперь Visual Studio IDE готова работать с OpenGL.

Загрузка Dev-C ++

Эти инструкции были протестированы на большом множестве систем Windows, которые поставляются с файлами, необходимыми для OpenGL, но не для файлов, необходимых для GLUT. Dev-C ++ не работает с Vista от Microsoft.

  1. Загрузите Dev-C ++ и установите его.
  2. Получите Dev-C ++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) с Mingw / GCC 3.4.2 (хотя это «бета-версия», она отлично работает).
  3. Теперь нужно нажать на SourceForge, чтобы перейти к списку сайтов загрузки, и выбрать один.
  4. Сохранить этот файл в таком месте, как C: Temp.
  5. Когда загрузка будет завершена, нажать кнопку «открыть», чтобы начать процесс установки. Или перейти к C: Temp и дважды кликнуть по devcpp4.9.9.2_setup.exe.
  6. Выбрать «типичную» установку. Принять предложенный пункт назначения для установки.
  7. Ответить: «Да», когда установка спрашивает, хотите ли установить Dev-cpp для всех пользователей. На экране появляется сообщение, что установка завершена. Нажать «Готово». Появится первый экран конфигурации.
  8. Выбрать «Английский» и «Новый взгляд». На следующих нескольких экранах нажать «Да». Программа запускается автоматически.
  9. Нажать «Файл», затем создать проект.
  10. Выбрать имя для проекта (например, «myProject»).
  11. Нажать «C Project», «Пустой проект» и ОК.
  12. В окне «Создать новый проект» нажать «Сохранить».
  13. Нажать «Файл / Новый / Исходный файл» и в «Добавить исходный файл в текущий проект» нажать «Да».
  14. Нажать «Файл / Сохранить как» и сохранить файл как «hello.c» (или другое имя). Важно убедиться, что расширение файла .c. С любым другим расширением (например, предлагаемым .cpp) возникнут проблемы с компиляцией.
  15. Нажать «Выполнить / Скомпилировать и запустить». Программа компилирует, запускает и записывает свой вывод в окно DOS.
  16. Попробовать другой способ запуска программы (после ее компиляции) — запустить окно DOS вне системы Dev-Cpp.
  17. Перейти к подкаталогу, в котором содержится проект, и набрать hello.exe.
  18. Найти Dev-C ++, указанный в разделе «Программы» из пускового меню.

Теперь пользователь сможет создавать, компилировать и запускать программы C (и C ++). У него будут файлы, библиотеки и dll для OpenGL (и всех других стандартных пакетов), но не GLUT. GLUT управляет окнами и другими компонентами пользовательского интерфейса, необходимыми для него, и их устанавливают отдельно .

Установка и запуск программы на Windows 7

Платформа выполнения для Visual Studio 2010 – Integrated. Среда (IDE), под управлением Windows 7. Вам нужно загрузить и установить Microsoft Visual C ++ 2010 Express. А после того как Visual C ++ будет успешно установлен, следует выполнить следующие действия:

  1. Загрузить и распаковать файл freeglut-MSVC-2.8.1-1.
  2. Открыть экран приветствия Visual C ++ 2010 из меню «Пуск».
  3. Создать новый проект, выбрав File -> New -> Project.
  4. Выбрать Win32 на панели «Установленные шаблоны», а затем «Консольное приложение Win32» со следующей панели.
  5. Назвать свой проект и выбрать папку, в которую нужно его сохранить.
  6. Снять флажок «Создать каталог для решения».
  7. Нажать ОК, чтобы открыть окно приветствия мастера и «Параметры приложения» для диалогового окна настроек.
  8. Снять флажок «Предварительно скомпилированный заголовок», установить флажок «Пустое проект» и выбрать «Консольное приложение».
  9. Нажать «Готово», чтобы увидеть новое окно проекта библиотеки OpenGL для Windows 7.
  10. Нажать мышью на Source Files и выбрать Add -> New Item, чтобы открыть диалоговое окно.
  11. Выбрать «Код» на панели «Установленные шаблоны» и «Файл C ++» (.cpp) со следующей панели.
  12. Назвать свой файл и нажать «Добавить», чтобы увидеть пустую панель кода в окне проекта с названием «Выбранное имя».
  13. Сохранить и создайть проект, перейдя в Debug -> Build Solution. Затем выполнить программу с помощью Debug -> Start Debugging.

Если графическая карта не поддерживает OpenGL 4.3, то программы, использующие его, могут компилироваться, но не выполняться, поскольку система не может предоставить контекст рендеринга OpenGL 4.3, заданный командой glutInitContextVersion (4. 3) в основной процедуре. В этом случае можно заменить Version 4.3 на 3.3 или даже на 2.1.

Хотя почти все платформы поддерживают OpenGL API, разработчикам по-прежнему необходимо создавать индивидуальные приложения для разных платформ. Это связано с тем, что графика является лишь частью приложения, а другие компоненты по-прежнему отличаются между платформами. Чтобы исправить это, WebApp был разработан для запуска целых программ в веб-браузере, таких как Chrome и Firefox. Так что одна программа может работать на всех платформах с совместимым браузером.

Между тем на стороне клиента все передается «на лету» с серверов, поэтому дальнейшая установка приложения не требуется. Специальный API под названием WebGL также был создан для Интернета и основан на ES, подмножестве OpenGL, разработанном специально для мобильных устройств. Чтобы достичь аналогичной цели для VR, другой API, называемый WebVR, был разработан, чтобы легко довести опыт VR до браузеров, независимо от платформы.

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

0

Библиотеки opengl и directx история и перспективы

Авторы: А. Игнатенко
Источник: Алексей Игнатенко. OpenGL и DirectX: взгляд изнутри. Компьютерная графика и мультимедиа. Выпуск №2(1)/2004. http://cgm.computergraphics.ru/content/view/55

Аннотация

Статья посвящена обзору двух графических библиотек.

Как это было

OpenGL

Стандарт OpenGL (Open Graphics Library – открытая графическая библиотека) был создан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах. Основой стандарта стала библиотека IRIS GL, изначально разработанная фирмой Silicon Graphics Inc (SGI).

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

Развитие стандарта OpenGL осуществляется специальной бюрократической структурой, известной как Architectural Review Board (ARB) – Комитет по пересмотру архитектуры. Комитет состоит из представителей основных компаний, заинтересованных в развитии и использовании библиотеки. В их числе 3D Labs, SGI, Apple, NVIDIA, ATI, Intel, id Software и, конечно, Microsoft. Кстати, Microsoft поставляет реализацию OpenGL вместе со своими операционными системами. Она соответствует одной из ранних версий OpenGL и не использует возможности аппаратного ускорения. Этот недостаток восполняют драйверы видеокарт, которые предоставляют быстрые реализации OpenGL.

C начала 90-х годов прошлого века OpenGL используется в различных областях индустрии и науки. Архитектура библиотеки получилась настолько удачной, что уже на протяжении более десяти лет она остается стабильной и предсказуемой. OpenGL де-факто является стандартом в области программирования графики. Но в этом скрыт и ее недостаток. ARB работает довольно медленно – любое изменение стандарта требует множества согласований, документов и так далее. В силу этого OpenGL развивается очень вяло. Правда, до последнего времени с этим не было проблем, поскольку изначально библиотека предназначалась для быстрых рабочих станций профессионального уровня, которые обновляют не так уж часто. Однако сейчас даже дешевые видеокарты за $100 превзошли уровень профессиональных монстров пятилетней давности стоимостью в тысячи долларов. И при этом обновление их возможностей происходит в среднем раз в год. Фактически OpenGL не поспевает за индустрией, поэтому игровые разработчики вынуждены использовать так называемый механизм расширений (extensions), чтобы получить доступ к новейшим функциям видеокарт.

На данный момент OpenGL прошла путь от версии 1.0 до версии 1.4 (и это за десять лет!). Версия 2.0, обещающая революционные изменения, находится в процессе стандартизации.

DirectX

К моменту выхода Windows 95 большинство игр по-прежнему делалось под MS-DOS. Windows в те времена не предоставляла возможностей для программирования игр. Многочисленные уровни абстракции (введенные в целях совместимости и универсальности) делали доступ к звуковому и видеооборудованию весьма медленным и неприменимым для игровых приложений. Поэтому было решено разработать библиотеку, предоставляющую возможность прямого доступа к аппаратуре. Это позволило бы играм работать на приемлемой скорости (и увеличило бы продажи Windows 95).

Вместо создания собственного API Microsoft использовала разработку небольшой компании RenderMorphic. Говорят, что изначально API был выполнен авторами в рамках студенческого задания и в конечном итоге провалился на экзамене. Тем не менее Microsoft интегрировала эту библиотеку в свой Game SDK. Корпорация подавала это как идеальное решение для программирования игр.

Однако то, что позже стало называться DirectX 1.0., не приобрело широкой популярности. Библиотека оказалась медленной, с большим количеством ошибок, с неудобной архитектурой и, кроме того, чрезмерно сложной.

Разумеется, Microsoft не собиралась сдаваться и продолжила развитие библиотеки с учетом пожеланий разработчиков игр. Первой более или менее жизнеспособной версией была DirectX 3.0. Позже последовали версии 5, 6 и 7 (четвертой не было). Седьмая версия была воспринята разработчиками с интересом: она хорошо работала, ее интерфейсы были достаточно удобны в использовании. Восьмая версия не заставила себя ждать и принесла интересные нововведения – вершинные и пиксельные шейдеры (специальные, обычно короткие программы, предназначенные для выполнения на графическом процессоре; используются для расчета освещения, создания тех или иных спецэффектов и так далее). Недавно вышедший DirectX 9 также развивает эти перспективные направления.

Длительное время DirectX рассматривался как неудачная альтернатива OpenGL. Однако последние улучшения в API сделали эту библиотеку весьма мощной и стабильной. Поскольку она разрабатывается авторами ОС, можно быть уверенным, что скорость ее работы с графикой оптимальна. Многие считают, что именно DirectX, а не OpenGL, становится стандартом для программирования графики. Microsoft постоянно работает в тесном контакте с разработчиками "железа", обеспечивая поддержку новых возможностей аппаратуры. Более того, DirectX иногда предлагает различные возможности раньше, чем на рынке появляются видеокарты с их аппаратной реализацией.

Мы рассматриваем только графическую часть DirectX, но кроме графики DirectX также предлагает интерфейсы для работы со звуком, источникам ввода, мультимедиа и так далее. У OpenGL таких функций нет – это чисто графическая библиотека.

Архитектура

Ключевая особенность OpenGL – простота. Ядро OpenGL контролирует процесс обработки примитивов (то есть треугольников). Для передачи данных используется процедурная модель, фактически – вызовы функций. В каждый момент времени состояние OpenGL определяется через набор переменных, задающих параметры обработки (например, накладывать текстуру или не накладывать). Каждый новый переданный треугольник проходит обработку в соответствии с текущим состоянием. Такой механизм весьма эффективен, а код обычно короток и прост. Хотя ядро OpenGL процедурное, в использовании OpenGL совместно с объектно-ориентированными технологиями сложностей обычно не возникает: все зависит от выбора программиста.

Структура DirectX очень сильно отличается от OpenGL. DirectX основан на модели COM (Component Object Model). Тем, кто знает, что это такое, сама аббревиатура уже скажет многое. Для остальных заметим лишь, что в отличие от простого вызова функций эта модель предполагает выполнение некоторых дополнительных действий, связанных с компонентной архитектурой DirectX. Такая архитектура имеет как достоинства, так и недостатки. В частности, код, в котором используются вызовы DirectX, обычно не является идеалом легко читаемого и понимаемого. Поэтому даже рисование простого треугольника требует огромного объема кода. Разработчики Microsoft, конечно, понимают это, поэтому для упрощения программирования ими создана отдельная библиотека DirectX Common Files, которая скрывает часто используемый код.

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

Производительность

Вопрос производительности настолько же важен, насколько запутан и неясен. Дебаты на тему "Что быстрее – OpenGL или DirectX?" не утихают. При этом, как ни парадоксально, cкорость обоих библиотек одинакова.

Иначе и быть не может, потому что сейчас большинство функций реализованы напрямую через аппаратные ускорители. Естественно, производительность может различаться в зависимости от степени оптимизации программного кода и используемой для тестирования аппаратной платформы. Оптимизация аппаратных драйверов тоже может внести свой вклад в преимущество той или иной библиотеки. Такие вещи достаточно тяжело предвидеть, поэтому хорошие игровые "движки" часто имеют две версии: под OpenGL и под DirectX. Это не очень-то хорошо как для производителя, так и для пользователя (возрастает стоимость разработки игр, появляются ошибки и т.п.), но таковы реалии современного рынка видеоигр.

Пример: считается, что драйверы от фирмы ATI для серии видеокарт ATI Radeon хорошо оптимизированы под DirectX и значительно слабее поддерживают OpenGL. Однако специально написанные тесты не выявили значительной разницы в скорости работы программ. Кроме того, на недавней Конференции разработчиков игр (КРИ, www.kriconf.ru) автору довелось побеседовать на эту тему с представителем ATI. Точка зрения последнего такова: если драйверы OpenGL у ATI и хуже, чем у NVIDIA, то это лишь вопрос времени – ATI обязательно будет в поддерживать OpenGL в полном объеме.

Сравнение

В чем же, если не в производительности, различие между библиотеками? Прежде всего – в удобстве интерфейса, функциях, гибкости, перспективах развития и области применения.

Начнем с функций. Неоднократно приходилось слышать заявления типа: "DirectX 9 поддерживает пиксельные шейдеры, а OpenGL не поддерживает, поэтому все игры должны быть написаны под DirectX!" Такое мнение неверно только отчасти. Действительно, если посмотреть на стандарт OpenGL последней версии (1.4), в нем ни слова о шейдерах.

Изображение, получаемое в реальном времени на современном аппаратном ускорителе. Качество и скорость рисования не зависят от применяемой библиотеки: DirectX и OpenGL обладают схожими возможностями.

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

Читайте также:  В какой папке хранится резервная копия iphone

Этот процесс выглядит следующим образом: как только производитель выпускает видеокарту с поддержкой определенной полезной функции, он включает ее в свою реализацию OpenGL (которая обычно входит в поставку драйвера). Для программиста эта возможность становится доступной, если он специальным образом запросит данное расширение. Конечно, такой путь не универсален: на другой видеокарте сделать это не получится из-за различий в интерфейсе. Поэтому существуют расширения, одобренные ARB, – при их использовании можно надеяться, что они будут работать на видеокартах различных производителей. Такие расширения являются кандидатами на включение в последующие версии OpenGL.

Данный механизм выглядит (и на самом деле является) неудобным. В DirectX все проще: функциональность либо поддерживается данной версией библиотеки, либо не поддерживается. Если нет – придется надеяться и ждать следующей версии. Однако случаи, когда аппаратные функции не используются из-за того, что не были включены в версию DirectX, довольно редки – как уже говорилось, Microsoft тесно работает с производителями игрового (и не только) "железа". С другой стороны, ждать версий DirectX приходится около года, а в это время новые функции уже доступны через расширения OpenGL.

Таким образом, по поддержке аппаратных функций OpenGL и DirectX , в общем, эквиваленты. OpenGL новые функции доступны через механизм расширений, а в DirectX они появляются только в новых версиях.

DirectX очень удобен для любителей объектно-ориентированного программирования и COM в частности. COM в DirectX используется для внесения изменений в библиотеку (в новых версиях) без изменения существующего кода. В OpenGL такого нет, но это вряд ли можно назвать серьезным недостатком.

Объем кода, необходимого для написания простой программы на DirectX, весьма велик (варьируется от 200 до 800 строк). Microsoft активно пытается уменьшить этот показатель, но он, тем не менее, достаточно велик. В OpenGL все существенно проще – для решения такой же задачи необходимо менее 50 строк кода.

OpenGL идеален для визуализации результатов научных исследований.

Серьезным достоинством OpenGL является прежде всего то, что это "открытый стандарт". Любая компания, имеющая аппаратную платформу, может купить лицензию у SGI и затем сделать собственную реализацию OpenGL. Изменения в OpenGL предлагаются, обсуждаются и утверждаются представителями различных компаний. Что касается DirectX, то здесь ситуация прямо противоположная. Только Microsoft может вносить какие-либо изменения в библиотеку. Иначе говоря, именно Microsoft в конечном итоге определяет все пути развития библиотеки, и если путь был выбран неверно, это может быть исправлено только в новой версии.

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

Что дальше?

Появление графических процессоров (GPU – Graphics Processing Unit) нового поколения, позволяющих создавать доселе немыслимые спецэффекты в реальном времени, всколыхнуло индустрию, и вскоре стало ясно, что за ними будущее. Очевидно, что графические библиотеки должны соответствовать этой тенденции.

Начиная с восьмой версии, DirectX имеет встроенную поддержку программируемых шейдеров. В девятой версии эта поддержка была значительно улучшена и расширена. И в дальнейшем развитие DirectX наверняка будет связано с постепенным улучшением гибкости и удобства использования программируемого "железа". Каких-либо радикальных перемен пока не ожидается. Например, вряд ли стоит надеяться, что Microsoft сделает реализации DirectX на других платформах.

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

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

В то же время близится к завершению разработка нового стандарта библиотеки – OpenGL 2.0. Развитие графической аппаратуры вышло за пределы исходной спецификации. Вторая версия OpenGL призвана поднять планку и вновь создать стандарт для компьютерной графики на десятилетия. Помимо прочего OpenGL 2.0 включает в себя возможность программирования всего графического конвейера на языке высокого уровня (подобный язык уже появился в девятой версии DirectX и называется HLSL – High Level Shading Language)

Таким образом, в перспективе вновь ожидается конкуренция между последующими версиями графических библиотек, от которой программисты только выиграют: одни получат желаемую мощь и тонкие настройки "железа" DirectX, другие – простоту и не меньшие возможности OpenGL.

NVIDIA обещала уже в ближайшие несколько лет достичь кинематографического качества видеоигр, сделанных для нового поколения видеоускорителей. Трудно сказать, является ли данное заявление результатом реальной оценки ситуации или это не более чем рекламный трюк. На сегодня игры довольно далеки от своего "кинематографического" идеала. Прежде всего это касается интерактивности – не хватает мощностей как центрального, так и графического процессора. Но мощности растут, порой даже обгоняя закон Мура. А при условии достаточных мощностей на первый план выходят возможности программирования графического процессора для получения реалистичных спецэффектов. Уже сейчас при просмотре технических демо NVIDIA и ATI иногда дух захватывает от красоты картинки! Описанные нами графические библиотеки как раз и являются для программистов проводниками в мир возможностей графического "железа".

Чем все это грозит простому пользователю? В первую очередь, улучшением качества картинки в играх и других графических приложениях. Развитие программируемых графических процессоров стимулирует фантазию дизайнеров и разработчиков, что приведет к появлению различных оригинальных спецэффектов. Можно ожидать повсеместного распространения высококачественных теней, использования различных отражающих поверхностей, процедурных текстур, деформируемой геометрии и так далее. Представляете, точным выстрелом разбить стакан вина на столе, приблизиться и увидеть свое отражение в каждой капле? И игру света от осколков стекла? Все это будет, и довольно скоро. Не сомневайтесь.

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

Начнем с OpenGL.

Интерфейс OpenGL (Open Graphics Library) создан и запущен в 1992 году известными компаниями в сфере разработки программ. Он был представлен как кросс-платформенный интерфейс, не зависящий от аппаратного обеспечения. В базе лежала IRIS GL — библиотека, которую ранее разработали специалисты из Silicon Graphics Inc (SGI).

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

Развитие библиотеки OpenGL происходит за счет специализированной структуры — Architectural Review Board (ARB). Это «Комитет по пересмотру архитектуры». В него включены несколько компаний, которые имеют определенные интересы в процесс развития рассматриваемой библиотеки. Сюда входят такие гиганты как 3D Labs, NVIDIA, ATI, Intel, id Software, SGI, Apple, и Microsoft, который в своих реализациях Windows использует OpenGL. Версия же этого OpenGL сходна с более ранними разработками и не может работать с аппаратным ускорением, но эти возможности появляются благодаря драйверам используемых видеокарт.

OpenGL используется повсюду, начиная с 90-х голов 20 века. Это связано с тем, что данная библиотека была грамотно написана с удачной архитектурой. Эта библиотека ведет себя стабильно при использовании, а также поведение OpenGL легко предсказать. Одним из недостатков является медленное развитие. Это связано с медленной работой ARB, а именно в том, что при изменении определенных стандартов много времени уходит на согласование различных документов.

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

Пришло время вспомнить историю развития DirectX.

К выходу операционной системы Windows 95 все же большая часть видеоигр работала под MS-DOS. Ранние версии Windows не представляли возможностей для разработок игр.

Уровни абстрагирования, обуславливающие универсальность и совместимость, не позволяли быстрый доступ к видеокартам и такая модель не подходила для игр.
В связи с этим приняли решение о создании совершенно новой библиотеки, позволяющей напрямую работу с оборудованием. Это могло увеличить производительность игр, а также следовательно и продажи Windows 95.
Компания Microsoft решила не использовать разработки своего API и взяли за основу решения небольшой фирмы RenderMorphic. Известно, что первоначально данный API был студенческим заданием и не узнал успеха на экзамене. Но все же Microsoft встроили эту библиотеку в Game SDK, считая это отличной возможностью.
Позже эта разработка называлась DirectX 1.0. и не стала популярной. Из-за медленной работы, кучи ошибок и негибкой архитектуры, а также достаточно сложного кода.

Читайте также:  Взлом вай фай через ноутбук

Microsoft учитывали методы разработчиков игр и продолжали развивать DirectX. Версия 3.0 была более работоспособной. Потом были разработаны версии 5, 6 и 7. Седьмая версия тоже неплохо работала и ее использование было более удобным. Вскоре вышел DirectX 8, принеся с собой нововведения, а именно шейдеры — мини-программы, занимающиеся расчетом освещения и созданием специальных эффектов. Позже вышел 9-й DirectX со своими наработками. В данный момент существуют 10 и 11 версия. Хотя некоторые считают, что последние версии DirectX являются больше маркетинговым ходом, чем новыми разработками.

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

В будущем возможно усовершенствование существующих интерфейсов, а возможно и возникновение совершенно новых.

Open Graphics Library – это стандартное графическое приложением для 2D и 3D-визуализации, разработанного в 1992 году. Opengl поставляется в двух вариантах. Первый из них — «Микрософт OpenGL», который часто включается в «Виндовс» для установки графической карты. Второй — Cosmo OpenGL – предназначен для систем, у которых нет ускоренной видеокарты. Библиотека OpenGL – основное условие работы приложения.

Пользовательский обзор OpenGL

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

OpenGL не зависит от характеристик «Виндовс» каждой операционной системы, но предоставляет специальные подпрограммы для ОС. Она выпускается с огромным перечнем встроенных возможностей, запрашиваемых через API. К ним относятся:

  • скрытое удаление поверхности;
  • альфа-смешение (прозрачность);
  • сглаживание;
  • текстурное картирование;
  • операции с пикселями;
  • просмотр и моделирование трансформаций;
  • атмосферные эффекты (туман и дымка).

Silicon Graphics – разработчики передовых графических рабочих станций – инициировала разработку OpenGL. DEC, Intel, IBM, Microsoft и Sun Microsystems вошли в отраслевую комиссию по обзору архитектуры. Разработка приложений, использующих API OpenGL, не несет никаких затрат, кроме обучения. Microsoft предлагает бесплатную загрузку ее библиотек для своих систем.

Набор модулей для Windows

Приложение доступно на многих системах Win32 и Unix. А f90gl — это реализация публичного домена официальных связей Fortran 90 для OpenGL, оформленная в виде базы данных модулей и библиотек, определяющей необходимые интерфейсы для функциональности программы. Сам f90gl был разработан Уильямом Ф. Митчеллом технологического института Гейтерберга в США. До недавнего времени OpenGL LF9x можно было создавать только в виде статически связанных программ, ориентированных на Visual C.

В настоящее время доступен гораздо более дружелюбный метод благодаря усилиям по переносу, реализованным Lawson B. Wakefield из Великобритании. Эта реализация сделала интерфейс OpenGL доступным в рамках WiSK и Winteracter и была выполнена на добровольной, некоммерческой основе. Для подключения библиотеки OpenGL нужны определенные DLL OpenGL, установленные в каталоге Windows SYSTEM32. К ним относятся следующие:

Первые две из этих библиотек OpenGL (изучить их перед установкой необходимо), являются стандартной частью Windows разных модификаций и Me. Библиотеки и модули f90gl должны быть установлены в LIB-каталоге LF95:

  • F90GL.LIB;
  • F90GLU.LIB;
  • F90GLUT.LIB;
  • OPENGL32.LIB;
  • GLU32.LIB;
  • GLUT32.LIB;
  • OPENGL.MOD;
  • OPENGL2.MOD;
  • OPENGL_KINDS.MOD;
  • OPENGL_GLINTERFACES.MOD;
  • OPENGL_FWRAP.MOD;
  • OPENGL_GLUINTERFACES.MOD;
  • OPENGL_GLU.MOD;
  • OPENGL_GLUTINTERFACES.MOD;
  • OPENGL_GLUT.MOD;
  • OPENGL_GL.MODd.

Компиляция и связывание программ f90gl требует, чтобы каталог LF95 LIB указывался в пути модуля компилятора и имена библиотек f90gl для связывания.

Библиотеки изображений

DevIL используется для разработчиков. Он поддерживает множество форматов изображений для чтения и записи, несколько компиляторов и ОС («Виндовс», «Линукс», Мас). Библиотека имеет следующий синтаксис :

  1. FreeImage — это кросс-платформенная библиотека OpenGL загрузки изображений с очень широкой поддержкой форматов (включая некоторые HDR-форматы, такие как OpenEXR).
  2. OpenImageIO (OIIO) — это библиотека для чтения и записи изображений, а также множество связанных классов, утилит и приложений. Широко используется в анимационных и VFX-студиях по всему миру, а также встроена в несколько коммерческих продуктах.
  3. SOIL — это кросс-платформенный загрузчик изображений общего пользования, который чрезвычайно мал. C ++, способный загружать текстуры DDS (DDS9 и DDS10) по лицензии MIT.
  4. Glraw предоставляет инструмент командной строки, который преобразует файлы изображений в необработанные, непосредственно содержащие простые текстурные данные.

Импорт активов 3D-файлов

Графическая библиотека OpenGL для импорта активов (Assimp) представлена как библиотека с открытым исходным кодом для импорта разнообразных популярных трехмерных моделей. Самая последняя версия экспортирует 3d-файлы и подходит как конвертер общего назначения. Имеется несколько видов таких библиотек:

  1. Может считывать различные форматы 3D-файлов – COLLADA, собственные файлы Blender3D, Wavefront Obj (.obj) и многие другие. Библиотека lib3ds предназначена для чтения 3ds-файлов.
  2. Open3mod — это средство просмотра модели на базе Windows. Он загружает все форматы файлов, которые поддерживает Assimp, и идеально подходит для быстрой проверки 3D-активов.
  3. AssetKit (In Progress) — библиотека OpenGL импортер/экспортер 3D-ресурсов, утилита, основанная на спецификациях COLLADA/glTF. Главное внимание здесь уделено COLLADA и glTF. Она будет полностью поддерживать форматы 1.4, 1.4.1, 1.5+, а также некоторые другие в качестве библиотеки для загрузки моделей в OpenGL.

Высокопроизводительная 2D/3D-графика

Графическая библиотека OpenGL для Android включает поддержку высокопроизводительной 2D и 3D-графики с открытой библиотекой, в частности API OpenGL ES. Android поддерживает ее как через API-интерфейс инфраструктуры, так и Native Development Kit (NDK). В платформе названной операционной системы есть два фундаментальных класса, которые позволяют создавать и манипулировать графикой с помощью API: GLSurfaceView и GLSurfaceView.Renderer.

Если есть цель использовать OpenGL в приложении для Android, то нужно понимать, как реализовать эти классы в действии. Так, GLSurfaceView может рисовать и манипулировать объектами, используя вызовы API OpenGL аналогично функции SurfaceView. Этот интерфейс определяет методы, необходимые для рисования графики в a GLSurfaceView. И пользователь должен обеспечить реализацию этого интерфейса как отдельный класс и прикрепить к GLSurfaceView экземпляр GLSurfaceView.setRenderer. После того как создан контейнерный вид для OpenGL ES, GLSurfaceView и GLSurfaceView.Renderer, можно начать подключение библиотеки OpenGL и использовать API.

Набор мобильных графических устройств

Реализации приложения различаются для Android-устройств поддерживаемыми расширениями API и включают сжатие текстур и другой набор функций. Android Extension Pack (AEP) поддерживает стандартную базу расширений. Упаковка их вместе способствует последовательному набору функциональности на всех устройствах, позволяя разработчикам в полной мере использовать новейший пакет мобильных графических конструкций.

AEP также улучшает поддержку изображений, буферов хранения шейдеров и счетчиков. Чтобы приложение могло использовать AEP, версия платформы должна поддерживать ее. Нужно также обозначит требование AEP следующим образом:

Проверка и выбор версии OpenGL ES

На Android-устройствах доступно несколько версий приложения. Можно указать минимальную версию API, которая требуется приложению в телефоне. Версия API opengl ES 1.0, версия 2.0 и версия 3.0 обеспечивают высокопроизводительные графические интерфейсы для создания 3D-игр, визуализации и пользовательских интерфейсов. Программа для OpenGL ES 2.0 во многом похожа на версию 3.0, представляющую собой надмножество API 2.0 с дополнительными функциями.

Программирование для 1.0 / 1.1 API по сравнению с 2.0 и 3.0 значительно отличается, и поэтому разработчикам следует внимательно изучить некоторые факторы, прежде чем начинать разработку с помощью этих API. Так, в общем, 2 и 3 обеспечивают более быструю графическую производительность, чем API ES 1/1,1. Тем не менее разница в ней может варьироваться в зависимости от устройства Android, на котором работает приложение, из-за различий в реализации аппаратного обеспечения графического конвейера.

Сравнение с драйверами DirectX

В Windows графические драйверы DirectX поддерживаются качественнее, чем OpenGL, несмотря на то что разработчики управляют из более быстрых.

Библиотеки OpenGL и DirectX (история и перспективы их) связаны с «Микрософт», которая фактически выступила против OpenGL. В 2003 году Microsoft заявила, что ей больше не интересны планы OpenGL. Затем в 2005 году они на презентации в SIGGRAPH сделали заявление, что Windows Vista удалит ее поддержку.

Эта кампания вызвала хаос в сообществе OpenGL, после чего многие программисты в области профессиональной графики перешли на DirectX. После того как Vista все же была выпущена, громкие заявления выполнены не были – поставщики создали новые производительные драйверы (ICD), которые восстанавливают встроенную функцию. Open рассылала информационные бюллетени с информацией, что по-прежнему является лучшим приложением. Тем не менее ущерб уже был нанесен, а общественное доверие к OpenGL сильно пошатнулось.

Читайте также:  Джойстики для пк как выбрать

На самом деле OpenGL более мощный, чем DirectX, поддерживает больше платформ и имеет преимущественное значение для будущего игр. История и перспективы библиотек OpenGL и DirectX говорят о том, что первая из них имеет все же больше позитива:

  1. Предоставляет возможность использовать функции графики для оперативных систем, в то время как DirectX предоставляет только моментальные элементы из них в новейших версиях «Виндовс». Технология тесселяции, которую Microsoft разработывал для DirectX 11, была расширением OpenGL в течение трех лет. Путем кропотливого труда удалось добиться того, что DirectX 10 и 11 теперь работают так же быстро, как и OpenGL, и поддерживают почти столько же функций. Однако есть одна большая проблема: они не работают в Windows XP, которой до сих пор пользуются много людей.
  2. Кросс-платформенный. Многие пользователи Lugaru работают на Mac, Linux и Windows XP и не могут играть через DirectX. Единственный способ доставить новейшую графику для геймеров Windows XP — через 32bits opengl библиотеки.
  3. Лучше для будущего игр. Это некоммерческий открытый стандарт, созданный для того, чтобы пользователи на любой платформе могли получать высококачественную графику, которую предоставиляет их оборудование. Его развитие разрушается сегодня монополистической атакой корпоративного гиганта, пытающегося доминировать в отрасли. Вот почему Direct3D становится единственным игровым графическим API, поддерживаемым в Windows.

C ++ и настройка Visual Studio

Библиотека OpenGL для c имеет бесплатную версию. Специалисты рекомендуют скомпилировать программы, написанные на ANSI C с OpenGL и GLUT, с помощью Dev-C ++.

Bloodshed Dev-C ++ – это бесплатный компилятор C ++ и среды разработки для операционных систем Windows. Как и большинство таких же технических средств, его можно использовать для компиляции ANSI C. Установив файлы заголовков GLUT и библиотеки, его применяют для написания программ. Для реализации этого проекта можно использовать 32-разрядную или 64-разрядную «Виндовс».

Перед тем как подключить к dev c библиотеку OpenGL, понадобятся заголовки glew, которые можно найти на вебсайте sourceforge Extension Wrangler, и версия freeglut для Visual Studio:

  1. Нажать ссылку внутри пакета freeglut 3.0.0 MSVC.
  2. Ввести имя файла, который нужно скачать.
  3. Загрузить его, в папке с freeglut.
  4. Извлечь и переименовать в freeglut.
  5. Общий каталог для установки: C: DEV.
  6. Каталог, в котором находятся проекты: C: DEV visual-studio-c ++.
  7. Каталог, в котором находятся библиотеки: C: DEV Lib Visual Studio.
  8. Открыть его и создать пустой проект > «Шаблоны»> Visual C ++> Пустой проект.
  9. Затем написать «Имя»: Shapes2D.
  10. Местоположение: C: dev visual-studio-c ++ .
  11. Создать новое решение в OpenGL-библиотеке для Visual Studio. Название решения: BadprogTutorial OK.
  12. Проект Shapes2D создан в решении BadprogTutorial.
  13. Добавить main.cpp> Кликнуть правой кнопкой мыши «Проект»> «Добавить»> «Новый элемент»> Visual C ++> Файл C ++. Написать имя: main.cpp и добавить.
  14. Настроить конфигурации библиотеки GL и OpenGL glut.
  15. Кликнуть мышью проект Shapes2D> «Свойства». В левом верхнем углу раскрывающегося меню найти «Конфигурация» и выбрать все конфигурации (вместо Debug).
  16. Кликнуть мышью на «Свойства конфигурации»> C / C ++> «Общие»> «Дополнительные каталоги вложений». Справа находится раскрывающееся меню, нажать «Изменить . ».
  17. Появилось новое окно: «Дополнительные каталоги».
  18. Нажать значок «Новая линия»> кнопку обзора и выбрать две следующие папки: C: DEV Lib Glew-1.12.0 . C: DEV Lib freeglut-3.0.0 .
  19. Нажать кнопку ОК. Применить использование библиотеки OpenGL, включая библиотеки, библиотечные папки.
  20. Кликнуть правой кнопкой мыши проект Shapes2D> «Свойства» > «Свойства конфигурации»> «Коннектор»> «Общие»> «Дополнительные каталоги библиотек».
  21. Справа находится раскрывающееся меню. Нажать на «Изменить . ». Появилось новое окно: «Дополнительные библиотеки».
  22. Нажать значок «Новая линия»> нажать кнопку обзора> выбрать две следующие папки для 64-разрядной версии: C: DEV Lib Glew-1.12.0 Lib Release x64 и C: DEV Lib freeglut-3.0.0 Lib x64.
  23. Нажать кнопку ОК> применить библиотечные файлы. Кликнуть мышью проект Shapes2D> «Свойства» > «Свойства конфигурации»> «Коннектор»> «Ввод».
  24. Справа находится раскрывающееся меню, нажмите «Изменить . ».
  25. Появилось новое окно: «Дополнительные зависимости». Кликнуите по белой области и напишите: freeglut.lib.
  26. Нажать Enter, чтобы перейти к следующей строке: glew32.lib.
  27. Нажать «Применить» и ОК.

Теперь Visual Studio IDE готова работать с OpenGL.

Загрузка Dev-C ++

Эти инструкции были протестированы на большом множестве систем Windows, которые поставляются с файлами, необходимыми для OpenGL, но не для файлов, необходимых для GLUT. Dev-C ++ не работает с Vista от Microsoft.

  1. Загрузите Dev-C ++ и установите его.
  2. Получите Dev-C ++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) с Mingw / GCC 3.4.2 (хотя это «бета-версия», она отлично работает).
  3. Теперь нужно нажать на SourceForge, чтобы перейти к списку сайтов загрузки, и выбрать один.
  4. Сохранить этот файл в таком месте, как C: Temp.
  5. Когда загрузка будет завершена, нажать кнопку «открыть», чтобы начать процесс установки. Или перейти к C: Temp и дважды кликнуть по devcpp4.9.9.2_setup.exe.
  6. Выбрать «типичную» установку. Принять предложенный пункт назначения для установки.
  7. Ответить: «Да», когда установка спрашивает, хотите ли установить Dev-cpp для всех пользователей. На экране появляется сообщение, что установка завершена. Нажать «Готово». Появится первый экран конфигурации.
  8. Выбрать «Английский» и «Новый взгляд». На следующих нескольких экранах нажать «Да». Программа запускается автоматически.
  9. Нажать «Файл», затем создать проект.
  10. Выбрать имя для проекта (например, «myProject»).
  11. Нажать «C Project», «Пустой проект» и ОК.
  12. В окне «Создать новый проект» нажать «Сохранить».
  13. Нажать «Файл / Новый / Исходный файл» и в «Добавить исходный файл в текущий проект» нажать «Да».
  14. Нажать «Файл / Сохранить как» и сохранить файл как «hello.c» (или другое имя). Важно убедиться, что расширение файла .c. С любым другим расширением (например, предлагаемым .cpp) возникнут проблемы с компиляцией.
  15. Нажать «Выполнить / Скомпилировать и запустить». Программа компилирует, запускает и записывает свой вывод в окно DOS.
  16. Попробовать другой способ запуска программы (после ее компиляции) — запустить окно DOS вне системы Dev-Cpp.
  17. Перейти к подкаталогу, в котором содержится проект, и набрать hello.exe.
  18. Найти Dev-C ++, указанный в разделе «Программы» из пускового меню.

Теперь пользователь сможет создавать, компилировать и запускать программы C (и C ++). У него будут файлы, библиотеки и dll для OpenGL (и всех других стандартных пакетов), но не GLUT. GLUT управляет окнами и другими компонентами пользовательского интерфейса, необходимыми для него, и их устанавливают отдельно .

Установка и запуск программы на Windows 7

Платформа выполнения для Visual Studio 2010 – Integrated. Среда (IDE), под управлением Windows 7. Вам нужно загрузить и установить Microsoft Visual C ++ 2010 Express. А после того как Visual C ++ будет успешно установлен, следует выполнить следующие действия:

  1. Загрузить и распаковать файл freeglut-MSVC-2.8.1-1.
  2. Открыть экран приветствия Visual C ++ 2010 из меню «Пуск».
  3. Создать новый проект, выбрав File -> New -> Project.
  4. Выбрать Win32 на панели «Установленные шаблоны», а затем «Консольное приложение Win32» со следующей панели.
  5. Назвать свой проект и выбрать папку, в которую нужно его сохранить.
  6. Снять флажок «Создать каталог для решения».
  7. Нажать ОК, чтобы открыть окно приветствия мастера и «Параметры приложения» для диалогового окна настроек.
  8. Снять флажок «Предварительно скомпилированный заголовок», установить флажок «Пустое проект» и выбрать «Консольное приложение».
  9. Нажать «Готово», чтобы увидеть новое окно проекта библиотеки OpenGL для Windows 7.
  10. Нажать мышью на Source Files и выбрать Add -> New Item, чтобы открыть диалоговое окно.
  11. Выбрать «Код» на панели «Установленные шаблоны» и «Файл C ++» (.cpp) со следующей панели.
  12. Назвать свой файл и нажать «Добавить», чтобы увидеть пустую панель кода в окне проекта с названием «Выбранное имя».
  13. Сохранить и создайть проект, перейдя в Debug -> Build Solution. Затем выполнить программу с помощью Debug -> Start Debugging.

Если графическая карта не поддерживает OpenGL 4.3, то программы, использующие его, могут компилироваться, но не выполняться, поскольку система не может предоставить контекст рендеринга OpenGL 4.3, заданный командой glutInitContextVersion (4. 3) в основной процедуре. В этом случае можно заменить Version 4.3 на 3.3 или даже на 2.1.

Хотя почти все платформы поддерживают OpenGL API, разработчикам по-прежнему необходимо создавать индивидуальные приложения для разных платформ. Это связано с тем, что графика является лишь частью приложения, а другие компоненты по-прежнему отличаются между платформами. Чтобы исправить это, WebApp был разработан для запуска целых программ в веб-браузере, таких как Chrome и Firefox. Так что одна программа может работать на всех платформах с совместимым браузером.

Между тем на стороне клиента все передается «на лету» с серверов, поэтому дальнейшая установка приложения не требуется. Специальный API под названием WebGL также был создан для Интернета и основан на ES, подмножестве OpenGL, разработанном специально для мобильных устройств. Чтобы достичь аналогичной цели для VR, другой API, называемый WebVR, был разработан, чтобы легко довести опыт VR до браузеров, независимо от платформы.

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *