Direct3D должен использоваться по OpenGL в Windows?

Так как Microsoft обычно является небольшой предвзятостью к Direct3D, был бы сцена с помощью VBO's в Direct3D быть быстрее, чем та же сцена с помощью VBO's в OpenGL, или это будет то же, так как это до Драйвера графической платы?Спасибо

10
задан jmasterx 30 June 2010 в 04:15
поделиться

9 ответов

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

Некоторые операции в OpenGL по своей природе быстрее, чем в DirectX9, хотя DX10 исправил это.

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

При написании сетевого кода узким местом является сетевой адаптер, и не имеет значения, написан ли ваш код сокета на .NET, на простых сокетах Беркли на C или, возможно, с использованием какой-либо библиотеки Python.

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

Однако есть веские причины предпочесть любой API.

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

OpenGL имеет то преимущество, что он не привязан к конкретной ОС. DirectX9 работает только в Windows. DX10 и выше работает только с Vista и выше.

OpenGL работает в любой ОС, в которой был написан драйвер OpenGL.

В Windows ситуация иногда бывает немного неудобной. Сама Windows поставляется только с древними реализациями OpenGL. (Я полагаю, XP с v1.1 и Vista / 7 с 1.5).

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

20
ответ дан 3 December 2019 в 18:30
поделиться

Использовать промежуточное ПО. Ogre хорош, если вам нужно что-то с большим количеством функций (загрузка 3D-моделей и анимации и т. Д.). SDL хорош, если вам просто нужна простая оболочка.

Отвечая на ваш вопрос, все сводится исключительно к драйверам. И это зависит от производителя. Насколько я понимаю, сейчас GL не поддерживается всеми основными компаниями (nVidia, ATI, Intel), что является большой проблемой.

Лично я бы использовал промежуточное ПО, но полагаюсь на тестирование / разработку в основном для D3D.

0
ответ дан 3 December 2019 в 18:30
поделиться

См. Некоторые связанные вопросы -

OpenGL все еще лучше, чем Direct3D для неигровых приложений?

OpenGL или Direct3D для нового игрового проекта Windows? Или что-то еще?

Microsoft сейчас сильно предвзято относится к Direct3D. Многие интегрированные карты Intel начального уровня не поставляются с драйверами OpenGL по умолчанию, или, если они есть, они поддерживают только более старые версии / спецификации OpenGL, такие как 1.2 / 1.4. Если вы ориентируетесь на такие машины (Intel имеет 50% рынка графики), будет сложно воспользоваться преимуществами более продвинутых функций, таких как шейдеры (которые стали доступны в OpenGL 1.5). Принимая во внимание, что вы сможете использовать аналогичные шейдеры в Direct3D из-за наличия лучших драйверов для этих младших карт. Конечно, с Direct3D работает только в Windows.

Если, с другой стороны, вам действительно не нужно использовать шейдеры, вы можете использовать Direct3D или OpenGL. Хотя я бы больше склонялся к OpenGL. Он кроссплатформенный, и его поддерживают все, кроме Microsoft. Некоторые вещи, например рисование линий (разной ширины), также намного проще в OpenGL. OpenGL также имеет встроенный режим выбора, который намного надежнее, чем выбор лучей (особенно если вы хотите указывать точки и линии).

Третий вариант - использовать абстрактный API или существующий движок, который может обрабатывать как OpenGL, так и Direct3D.

3
ответ дан 3 December 2019 в 18:30
поделиться

На самом деле, это действительно зависит от типа проекта, над которым вы работаете.

Если вы когда-нибудь захотите перенести его на другую платформу - не используйте DirectX. Если вам нужен полный контроль и быстро развивающаяся библиотека для Windows, вам подойдет DirectX. Если вы найдете графический движок со всей необходимой вам функциональностью - воспользуйтесь им. Это проще, чем использовать простой DX или OpenGL, особенно если он поддерживает цепочку инструментов (редактор уровней, импорт моделей из разработчиков 3D-моделей, ...).

Если вы хотите изучить DX, выберите DX или SlimDX. Если вы хотите изучить OpenGL, выберите OpenGL.

0
ответ дан 3 December 2019 в 18:30
поделиться

Вы можете попробовать сами, если хотите. Ogre3D - отличная 3D-библиотека, где при запуске вы можете выбрать, хотите ли вы использовать DirectX или OpenGL. Если я правильно помню (прошло 3-4 года с тех пор, как я его использовал), у них была частота кадров и другие данные, даже в своих примерах , где вы можете увидеть, какой из них быстрее.

0
ответ дан 3 December 2019 в 18:30
поделиться

Я бы выбрал DirectX. Он быстро улучшается и развивается - намного быстрее, чем может двигаться комитет OGL. Расширение, черт возьми, есть?

0
ответ дан 3 December 2019 в 18:30
поделиться

Имейте в виду, что драйверы GL в Windows обычно довольно нестабильны и содержат ошибки. OEM-производители обычно очень мало работают с драйвером GL под Windows. Достаточно, чтобы последняя игра от id работала нормально. И это неприятно, если вы будете поступать по-другому.

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

Также стоит отметить, что X-Box и DirectX достаточно отличаются друг от друга, и это означает, что вам понадобится отдельная серверная часть для обеих платформ, если вы все равно попытаетесь это сделать.

Лично мой движок поддерживает DX9, DX10, Open GL3, OpenGL ES2.1, и мне гораздо больше нравится уровень абстракции :)

Редактировать: В соответствии с комментариями я хотел бы указать, что драйверы nVidia ЯВЛЯЮТСЯ наименее хлопотливые драйверы Windows OpenGL. Практически у всех остальных производителей есть проблемы. Даже у nVidia много проблем. По моему опыту, часто приходится бороться с драйвером, у которого все «просто работает» (тм) с DirectX.

0
ответ дан 3 December 2019 в 18:30
поделиться

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

2
ответ дан 3 December 2019 в 18:30
поделиться

Раньше я использовал OpenGL, но сейчас мне интересно исследовать мир DirectX. Причина - выход DX11, который положил конец долгой затяжной войне в Windows.

Группа Khronos вскоре выпустила OpenGL 4, чтобы дать отпор; к сожалению, в OGL4 до сих пор отсутствует или отстает половина новых функций, а некоторые из них жизненно важны для создания гибкого 3d-фреймворка.

-4
ответ дан 3 December 2019 в 18:30
поделиться