Так как Microsoft обычно является небольшой предвзятостью к Direct3D, был бы сцена с помощью VBO's в Direct3D быть быстрее, чем та же сцена с помощью VBO's в OpenGL, или это будет то же, так как это до Драйвера графической платы?Спасибо
С точки зрения производительности и при условии наличия приличных драйверов графического процессора, в целом разницы нет.
Некоторые операции в 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 обычно отстают как по качеству, так и по поддерживаемым функциям.
Использовать промежуточное ПО. Ogre хорош, если вам нужно что-то с большим количеством функций (загрузка 3D-моделей и анимации и т. Д.). SDL хорош, если вам просто нужна простая оболочка.
Отвечая на ваш вопрос, все сводится исключительно к драйверам. И это зависит от производителя. Насколько я понимаю, сейчас GL не поддерживается всеми основными компаниями (nVidia, ATI, Intel), что является большой проблемой.
Лично я бы использовал промежуточное ПО, но полагаюсь на тестирование / разработку в основном для D3D.
См. Некоторые связанные вопросы -
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.
На самом деле, это действительно зависит от типа проекта, над которым вы работаете.
Если вы когда-нибудь захотите перенести его на другую платформу - не используйте DirectX. Если вам нужен полный контроль и быстро развивающаяся библиотека для Windows, вам подойдет DirectX. Если вы найдете графический движок со всей необходимой вам функциональностью - воспользуйтесь им. Это проще, чем использовать простой DX или OpenGL, особенно если он поддерживает цепочку инструментов (редактор уровней, импорт моделей из разработчиков 3D-моделей, ...).
Если вы хотите изучить DX, выберите DX или SlimDX. Если вы хотите изучить OpenGL, выберите OpenGL.
Вы можете попробовать сами, если хотите. Ogre3D - отличная 3D-библиотека, где при запуске вы можете выбрать, хотите ли вы использовать DirectX или OpenGL. Если я правильно помню (прошло 3-4 года с тех пор, как я его использовал), у них была частота кадров и другие данные, даже в своих примерах , где вы можете увидеть, какой из них быстрее.
Я бы выбрал DirectX. Он быстро улучшается и развивается - намного быстрее, чем может двигаться комитет OGL. Расширение, черт возьми, есть?
Имейте в виду, что драйверы GL в Windows обычно довольно нестабильны и содержат ошибки. OEM-производители обычно очень мало работают с драйвером GL под Windows. Достаточно, чтобы последняя игра от id работала нормально. И это неприятно, если вы будете поступать по-другому.
Что вам нужно сделать, так это написать слой абстракции между двумя и реализовать оба бэк-энда. Это дает вам лучшее из обоих миров. Стабильность DirectX под Windows и кроссплатформенность OpenGL. Это также дает вам огромное преимущество в том, что вы можете добавить туда часть будущей рендеринга, если хотите.
Также стоит отметить, что X-Box и DirectX достаточно отличаются друг от друга, и это означает, что вам понадобится отдельная серверная часть для обеих платформ, если вы все равно попытаетесь это сделать.
Лично мой движок поддерживает DX9, DX10, Open GL3, OpenGL ES2.1, и мне гораздо больше нравится уровень абстракции :)
Редактировать: В соответствии с комментариями я хотел бы указать, что драйверы nVidia ЯВЛЯЮТСЯ наименее хлопотливые драйверы Windows OpenGL. Практически у всех остальных производителей есть проблемы. Даже у nVidia много проблем. По моему опыту, часто приходится бороться с драйвером, у которого все «просто работает» (тм) с DirectX.
В общем, это будет примерно то же самое. Было время, когда DirectX имел явное преимущество в скорости над OpenGL, но для большинства практических целей это уже древняя история.
Раньше я использовал OpenGL, но сейчас мне интересно исследовать мир DirectX. Причина - выход DX11, который положил конец долгой затяжной войне в Windows.
Группа Khronos вскоре выпустила OpenGL 4, чтобы дать отпор; к сожалению, в OGL4 до сих пор отсутствует или отстает половина новых функций, а некоторые из них жизненно важны для создания гибкого 3d-фреймворка.