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

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

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

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

Некоторые ссылки "как начать" будут полезны. (Либо по технологии, либо по обоим.)

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

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

Ответ 1

Начните с OpenGL, потому что на нем есть хорошие учебники и другие онлайн-ссылки. Как только вы получите возможность писать 3D-игру, вы сможете сами сделать это.

Завершение игры, даже если это действительно глупо и просто для вас, важнее выбора правильной библиотеки. С помощью glut вы можете получить 3D-объект, который будет отображаться на вашем экране за день. Начните с NeHe уроков.

Ответ 2

Если вы хотите рассмотреть С#, взгляните на XNA. Для проектов хобби, предполагая, что вы хотите, чтобы фактически начать игру и вместо того, чтобы перерабатывать сложный код API, я не могу рекомендовать ее достаточно высоко. Он становится все более зрелым, хорошо документированным и, по сравнению с D3D/OpenGL, очень быстрым и простым в использовании. В качестве бонуса с членством в Клубе авторов в размере 100 долларов в год вы даже можете использовать его для разработки игр для Xbox 360.

Ответ 3

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

Это было бы безопаснее и быстрее, чем изучение более тяжелых вещей, поскольку оно уже было абстрагировано. Плюс через пару месяцев вы будете говорить о трехмерном жаргоне. Существует также книга, которая поможет вам начать работу с Ogre, я думаю, что это уже кстати, но отправной точкой в ​​любом случае.

Ответ 4

Вы должны помнить, что DirectX - это набор технологий - Input, Audio и Graphics. Однако для большинства людей DX является синонимом рендерера.

На мой взгляд, D3D (или DirectGraphics) на самом деле не так тяжело с DX8. Я не пробовал DX9 или DX10.

Бернард прав - старайтесь как можно больше абстрагироваться. Попробуйте сохранить вызовы DX или OGL вне ваших классов объектов.

Ответ 5

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

Механизм рендеринга является агностиком DirectX/OpenGl, позже вы можете отображать свою игру с помощью OpenGL или DirectX (с изменениями в вашем коде).

Ответ 6

Я сделал диссертацию на uni по сравнению OpenGL и Direct3D. Реальные преимущества Direct3D заключаются в том, что он имеет регулярный расписание релизов - он всегда обновляется, чтобы воспользоваться последними достижениями в графическом оборудовании. Сколько времени прошло между выпусками OpenGL 2.0 и 3.0? Кроме того, в расширениях OpenGL была проделана большая работа, что означает, что на некоторых картах будет работать только некоторый рендеринг.

Сказав это, OpenGL будет легче начать программирование. Поскольку Direct3D сильно основан на COM, он имеет крутую кривую обучения.

Если бы это был я, я бы выбрал DirectX поверх OpenGL. Это ценой не-платформенной независимости.

Ответ 7

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

Ответ 8

В ситуации, которую вы описываете, я бы рекомендовал Direct3D.

Основная причина использования Direct3D вместо OpenGL заключается в том, что зачастую производители видеокарты отлично справляются с драйверами OpenGL для своих "high end" карт.

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

Если важна переносимость, то это будет большой причиной вместо OpenGL или Ogre.

Но если вы никогда не планируете порт, то сосредоточьтесь на Direct3D, так как это более стабильная платформа с лучшей поддержкой драйверов IHV.

Ответ 9

То, что вы должны рассмотреть, - это решение независимости платформы. Вы хотите связать свою игру с Windows или хотите выпустить ее в Mac OS X или Linux в какой-то момент. Если вы решите, что хотите поддерживать Linux, OS X в будущем, вам нужно будет использовать OpenGL.

Похоже, что сообщество Linux проявляет большую доброжелательность, если игра по крайней мере частично выпущена для Linux.

Ответ 10

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

  • Какова ваша способность программирования?

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

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

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

Ответ 11

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

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

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

Ответ 12

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

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

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

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

Ответ 13

Я действительно согласен с тем, кто говорит вам учиться Ogre3D. Вы сказали, что используете С++, поэтому Ogre3D - отличный выбор. XNA использует С#, и вам нужно будет изучить различия между ним и С++, кроме изучения самой XNA. Также XNA не является ни Open Source, ни кросс-платформой, поэтому, если вы хотите получить более широкие знания об игре, я бы предложил сначала изучить SDL, а затем Ogre3D.

Ответ 14

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

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

Ответ 15

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

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

Ответ 16

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

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

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

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

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

Ответ 18

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

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

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

Обычно фактический "игровой процесс" фокусируется на AI, бое, сюжетной линии и т.д.

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

Удачи!

Ответ 19

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

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

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