OpenGL или Direct3D для нового игрового проекта Windows? Или что-то другое? - PullRequest
10 голосов
/ 02 сентября 2008

Я начинаю проект хобби-игры на Windows, который будет интенсивно использовать эффекты 3D-графики. Скорее всего, он будет написан на C ++.

Должен ли я использовать OpenGL или Direct3D для моего графического бэкэнда? Почему?

Или я должен использовать готовый графический движок, такой как OGRE 3D ? Какой?

Было бы полезно несколько ссылок "как начать". (По любой технологии или по обоим.)

Редактировать - Да, я действительно имел в виду Direct3D, а не DirectX, спасибо graham.reeds за разъяснения

Редактировать - Михай Лазар указал, что я мог бы также использовать графический движок, такой как OGRE 3D. Отредактировал вопрос, чтобы отразить эту альтернативу.

Ответы [ 20 ]

1 голос
/ 17 сентября 2008

Вы должны думать о том, что вы хотите от этого, так как это хобби-проект. Я предполагаю, что «обучение» будет основной частью опыта, поэтому избегайте того, что скрывает от вас что-то и делает что-то за кулисами, поскольку это даст вам только часть картины.

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

Я начал с OpenGL для записи и примерно через месяц перешел на Direct3d (версия 7 на тот момент). Я обнаружил, что Direct3D заставил меня больше осознавать, что я хотел сделать и как я настраивал, но я предпочел этот уровень понимания.

Важно ИМО, какой бы способ вы ни выбрали, делайте это шаг за шагом и регулярно выводите информацию на экран. Есть множество причин, почему что-то не отображается на экране (оно прозрачное, камера находится внутри объекта и т. Д.), Поэтому, делая маленькие шаги и заставляя вещи отображаться регулярно, вы оба проверяете, что все еще движется и получает маленькая визуальная награда.

1 голос
/ 16 сентября 2008

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

Это позволяет разработчикам Direct3D использовать лучшие методы распределения и управления, подходящие для приложения, но это также дополнительная работа.

Я сделал типичные приложения "Hello World" в каждом, и я предпочитаю OpenGL, а не Direct3D, но это только мое мнение. Вы должны попробовать оба, потратить день или два на изучение и игру с каждым и решить для себя.

1 голос
/ 16 сентября 2008

Чтобы ответить на этот вопрос, требуется больше информации о вас:

  • каковы ваши навыки программирования?

Если он высокий, я бы, вероятно, начал с Ogre (лучший движок с открытым исходным кодом для строгого рендеринга, IMHO) или другого игрового движка с открытым исходным кодом, такого как Delta3D, если вам нужны дополнительные функции (звук, физика и т. Д.), Которые игровой движок приносит.

Если вы не хотите использовать движок, я бы выбрал Direct3D, потому что он обновляется намного быстрее, чем OpenGL. Я не хочу вдаваться во все проблемы, но версия 3.0 OpenGL была анонсирована во время SIGGRAPH, и большинство в сообществе были очень разочарованы этим. Direct3D предоставляет вам гораздо лучшие возможности для использования шейдеров и других целей программируемого конвейера.

Если ваши навыки программирования не слишком высоки, и вы делаете это, чтобы изучать программирование, я бы начал с OpenGL, потому что его легче изучать и в Интернете есть больше ресурсов (см. http://nehe.gamedev.net для пример).

0 голосов
/ 25 июня 2011

Как видно из полученных ответов, вы можете разумно начать с D3D или OpenGL для своего API-интерфейса для трехмерной графики. Игровые игры Triple-A были разработаны с использованием обеих технологий, и у них обоих есть свои сильные и слабые стороны.

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

  • Портативность: OpenGL (и OpenGL ES) доступен в Windows, Linux, OS X, iOS, Android и других системах. D3D / DirectX блокирует вас только на платформах MS.
  • Ввод игры: В DirectX API DirectInput предоставляет доступ к контроллерам. OpenGL здесь не имеет эквивалента.
  • Звуки: DirectAudio поддерживает звуки, OpenGL не имеет эквивалента (однако часто используется OpenAL)
  • Физика: в зависимости от ваших игровых потребностей вам может потребоваться продвинутая физическая симуляция

Как правило, основное внимание уделяется игровому процессу, ИИ, бою, сюжетной линии и т. Д.

Если вы все еще поднимаетесь по кривой обучения C ++ (стоит, но занимает некоторое время), вы можете вместо этого использовать C # и OpenTK . Это обеспечит вам преимущества «игровой среды», такой как Ogre, разумный прямой доступ к OpenGL и значительные преимущества использования управляемого кода (и IDE) для игровой логики. OpenTK является кроссплатформенным через Mono, поэтому ваш код может работать и в OS X и в Linux.

Веселись!

0 голосов
/ 25 июня 2011

Мое мнение таково, что OpenGL лучший.

OpenGL SuperBible: всеобъемлющее руководство и справочник - хороший справочник.

0 голосов
/ 07 июня 2009

Не начинайте с огров.

Начните с OpenGL GLUT (Win32) и учебник или два .

Как только вы сможете перейти на Win32 и взглянуть на этот сайт , который сейчас довольно стар, но все же довольно хорош.

0 голосов
/ 29 ноября 2008

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

Я бы избегал DirectX на случай, если вы захотите перенести игру на другие платформы. План на будущее. DirectX 10 может дать некоторые преимущества по сравнению с OpenGL, но я действительно не думаю, что вы почувствуете их, если не будете профессиональным разработчиком. В противном случае, если вы сторонник Microsoft, вам все равно следует использовать XNA, поскольку для разработчика-любителя вам не понадобится контроль, предоставляемый DirectX.

Я работаю с OpenGL уже довольно давно, а с Ogre3D уже несколько месяцев, и не могу сказать, что хочу чего-то еще. Недавно я получил книгу по DirectX 7, и я считаю, что это грязно. Возможно, что-то изменилось, но из того, что я заметил, я не нахожу DirectX, а путем экстраполяции Direct3D привлекательным.

0 голосов
/ 12 сентября 2008

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

Я бы посоветовал вам выбрать один. Вы будете выбирать понятия достаточно легко - достаточно, чтобы потенциально вы могли работать на уровне абстракции или в другой библиотеке достаточно просто. Но просто сделай это. Я бы на самом деле не беспокоился о том, какой из них правильный. Они оба хорошие, солидные исполнители. DX10 (если у вас Vista) может иметь небольшое преимущество перед более современными моделями шейдеров, но для кого-то, начинающего сейчас, я думаю, что это не имеет значения. Преимущество GL заключается в том, что некоторые из сложных математических / векторных математических операций либо скрыты от вас, либо предоставлены вам (хотя я думаю, что DX также имеет некоторые из них.)

0 голосов
/ 02 сентября 2008

Для начала у нас есть сравнение Википедии OpenGL и Direct3D .

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

0 голосов
/ 15 сентября 2008

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

Однако я думаю, что хороший вопрос - какова ваша конечная цель?
Если это простая игра, без скелетной анимации и простого 3D - OpenGL, безусловно, ответ. Если вы стремитесь к более высокому уровню и не хотите тратить время на разработку всех технологий с нуля (или отправиться на поиски бесплатных библиотек и собирать все вместе), тогда DX - хороший выбор, я бы пошел на DX9c, пока не выйдет DX11.

Если вы не возражаете возиться с другими языками, кроме C ++, вам также следует взглянуть на среду разработки XNA - она ​​стала достаточно зрелой и хорошей.

Точно так же хорошо использовать уже существующий движок, если вы знаете, что он даст вам большую часть того, что вам нужно, по правильной цене и сэкономит вам время на его разработку самостоятельно, основная проблема заключается в том, что вы Вам нужно будет пройтись по нескольким игровым движкам (Ogre, Game Studio, Torque и т. д.), а затем сделать свой выбор, основываясь на ограниченном опыте - прежде чем продолжить, прочитайте как можно больше отзывов от случайных разработчиков и попробуйте посмотрите на код, если вы собираетесь его изменить.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...