Для 2D-игр есть ли причина НЕ использовать 3D-API, такой как Direct3D или OpenGL?

20

Я давно не увлекаюсь разработкой игр. Когда я делал это, большинство людей использовали Direct Draw для создания 2D-игр. К тому времени, когда я остановился, люди говорили, что OpenGL или Direct3D с ортогональной проекцией - это просто путь.

Я думаю вернуться к созданию 2D-игр, в частности, для мобильных телефонов, но, возможно, и для платформы XNA. Чтобы сделать что-то с использованием OpenGL, у меня была бы (надеюсь) небольшая кривая обучения, чтобы приспособиться к трехмерной разработке.

Есть ли какая-либо причина, чтобы пропустить это и вместо этого работать с 2D-каркасом, где у меня просто есть буфер кадра Width x Height, который мне нужно заполнить пикселями?

Эрик Палакович Карр
источник
Этот вопрос на самом деле неправильный ... Я имею в виду: Direct3D и OpenGL на самом деле не являются 3D API, не так ли? Они предлагают аппаратное ускорение, но как в 2D, так и в 3D. Там есть небольшая разница.
Жакмо

Ответы:

20

Вам определенно следует использовать что-то, что использует 3D-рендерер на сервере. Но в вашем коде более высокого уровня вы даже не должны видеть ось Z. Все это должно быть удалено на более низких уровнях. Если вы манипулируете пикселями напрямую, вы, вероятно, делаете что-то не так.

Для своих собственных игр я создал набор классов для работы с 2D-объектами. Моя игровая логика имела дело только с координатами x и y. Мои классы также обрабатывали такие вещи, как вращение, масштабирование, режимы наложения и т. Д. И т. Д.

Конечно, есть и существующие 2D-библиотеки, которые вы также можете использовать - Cocos2D является популярной на iPhone. Большинство, если не все, из этих библиотек будут построены на низкоуровневых API-интерфейсах 3D, так что они получат выгоду от доступного ускорения.

Деннис Манси
источник
Мне было бы интересно услышать, как xna обрабатывает 2d API за кулисами
Iain
5
Это все 3D в конце. Spritebatch, рабочая лошадка для 2D-рендеринга, является шейдерным эффектом.
drxzcl
+1 за отделение интерфейса от реализации.
Стив С.
@Iain Вот пример использования XNA в DirectX11, написанный авторами XNA xnatoolkit.codeplex.com .
ClassicThunder,
8

Есть причина не использовать 3D API.

Их поддерживают только компьютеры в Северной Америке, на северо-западе ЕС и в Японии ...

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

Я, например, могу играть в Dwarf Fortress (использую OpenGL для рендеринга графики ASCII) на моем собственном компьютере, на любом другом компьютере, который, как мне кажется, работает медленно.

И это не проблема только с Бразилией, я спросил окружающих, и это распространено в нескольких местах мира ... Население, которое фактически имеет карты, совместимые с OpenGL или Direct3D, составляет меньшинство ...

Только это меньшинство привлекает больше внимания со стороны компаний ...

Но если вы ориентируетесь только на эти «традиционные» рынки (NA, Северо-Запад ЕС, JP), то сделайте это!

РЕДАКТИРОВАТЬ для тех, кто отказался от голосования: Очевидно, что вы не согласны, поэтому у вас есть ДОКАЗАТЕЛЬСТВО, что НИКТО больше не поставляет компьютеры с дрянными чипами VIA или SIS (или даже других неизвестных или худших производителей) без поддержки OpenGL 1.0?

У меня дома есть ДВА таких машины, и они новые (обе имеют более одного ядра, обе имеют 2 ГБ ОЗУ, обе имеют тактовую частоту выше 2 ГГц ...)

В моем университете есть 200 таких машин, даже некоторые из них, построенные Dell.

Это просто, графические процессоры дороги (даже дрянные Intel), а на плохих рынках это роскошь, люди, покупающие машины для запуска MS Word и чтения электронной почты, не собираются покупать машину с приличным графическим чипом, когда они могут купить тот, который на 50 долларов дешевле, особенно если большинство людей вынуждены покупать еду в течение целого месяца за 50 долларов.

ПОЖАЛУЙСТА, не приходите сюда, говоря, что я говорю BS, если вы никогда не посещали страну третьего мира, а также, не говорите, что люди из стран третьего мира не играют в игры, они делают, много, Osmos В сообщении разработчика о запуске их версии для Linux указывалось, что большая часть входящего трафика (фактически большая его часть) была из России, просто потому, что эти люди обычно игнорируются.

Здесь, в Бразилии, самая популярная игра Counter-Strike, работающая в программном режиме ... Некоторые Lan-Houses имеют только 10% машин с графическим процессором, даже большие с 200 или даже 300 станциями ...

Я не должен был писать об этом, я знал, что это привлечет отрицательные голоса, я получил бесплатную потерю очков за публикацию этого, каждый раз, когда я объясняю, почему моя другая игра использует Allegro 4.4 вместо 5.0, потому что 5.0 не поддерживает Direct Draw или В программном режиме многие люди говорят, что я своего рода лжец или глуп, что говорю правду о фактической доступности ускорения OpenGL.

РЕДАКТИРОВАТЬ 2: Чтобы иметь возможность играть и разрабатывать игры, в которых есть OpenGL, мне пришлось просить родителей и других людей купить мне GeForce 8600 (это была самая дешевая карта, которая, как мне показалось, все еще могла работать с Mass Effect 1 и другими UT3). игровые автоматы), они купили мне одну, но теперь я уже несколько лет больше не получаю никаких других подарков, даже подарков на день рождения, из-за того, как это дорого стоило, и я надеюсь, что эта карта будет работать еще 3-4 года ...

РЕДАКТИРОВАТЬ 3:
Практический пример: Eletronic Arts создала нового клиента для Ultima Online, который использует 3D-ускорение для 2D-графики ... Результат: многие игроки жалуются на невероятно низкие частоты кадров, а EA отступают в своем решении принудить использование новый клиент (теперь разрешено продолжать использовать старый)

РЕДАКТИРОВАТЬ 4 в 2015 году: этот ответ останется здесь в основном как исторический артефакт, в настоящее время количество компьютеров с крайне дрянными чипами низкое даже в странах третьего мира, они все еще существуют, особенно в офисных компьютерах, но это не так Я больше не думаю, что стоит больше работать с программными API-интерфейсами, API-интерфейсы на основе OpenGL - это то, что нужно.

повышающее устройство
источник
3
Сегодня нет чипов, которые не поддерживают 3D. Скорее всего, вам просто нужно обновить драйверы, потому что драйверы, предоставляемые Windows, не поддерживают OpenGL. Самый распространенный дерьмовый GPU - это Intel GMA, и даже в нем есть базовая поддержка OpenGl.
Аксель Гнейтинг
1
Повторяю еще раз: чипы здесь БОЛЬШЕ, чем Intel GMA. И да, некоторые модифицированные драйверы решают проблему, но вы не можете ожидать, что пользователи узнают об этом.
спидер
Практический пример: Eletronic Arts создала нового клиента для Ultima Online, который использует 3D-ускорение для своей 2D-графики ... Результат: многие игроки жалуются на невероятно низкие частоты кадров, а EA отступают в своем решении принудить использование нового клиента (теперь разрешено продолжать использовать старый)
спидер
1
Мой клиент с 2008 года, о чем рассказывает моя история: люди в 2008 году не любили клиента OpenGL и вернулись к использованию 1997 года.
спидер
1
Тот факт, что люди не обновляют свои драйверы, не означает, что их компьютеры не поддерживают OpenGL и Direct3D. OP должен просто проверить совместимость OpenGL / Direct3D. Если его там нет, он должен сказать пользователю обновить его драйверы. Это будет работать в 98,6% случаев, возможно, даже во втором и третьем мире. Если серьезно, можете ли вы дать ссылку на компьютер, который вы можете купить без поддержки OpenGL / Direct3D?
Ави
3

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

Охватите 3d и полюбите его, но полюбите его с одной меньшей осью.

ZorbaTHut
источник
2

3D API, как правило, путь. Современные графические процессоры предназначены для рендеринга 3D-графики, поэтому вам гарантирована довольно стабильная производительность. И, как сказал ZorbaTHut, переход на 3D-маршрут позволит вам воспользоваться такими вещами, как пиксельные шейдеры.

На самом деле 2D-API не так уж и много. DirectDraw устарел, и большинство 2D / векторных библиотек там используют OpenGL или Direct3D для выполнения их рендеринга в любом случае. Даже современные инструментарии пользовательского интерфейса используют 3D API для их рендеринга и компоновки. Возьмем, к примеру, WPF (последний пользовательский интерфейс Microsoft): он использует Direct3D для рендеринга.

Майк Штробель
источник
2

Есть все еще удивительное количество действительно старых машин с дрянным / несуществующим 3d-ускорением и драйверами, которые никогда не обновлялись, так что использование DirectDraw все еще будет намного быстрее, чем OpenGL или D3D. Я испытал это во время работы над многопользовательской игрой, которой уже около 10 лет, когда я пытался написать новый рендеринг в OpenGL для поддержки других платформ. Многие игроки сообщали, что режим OpenGL не воспроизводился из-за низкой частоты кадров. Я также согласился бы с бразильским плакатом, что это более распространено за пределами США и Европы, но это все еще верно и в тех местах.

Если вы нацелены на мобильные телефоны или XNA, то обязательно используйте 3D. Но если вы хотите сделать игру, которая работает на любом ПК, где угодно, я бы сказал, придерживайтесь DDraw.


источник
1

Единственное, о чем я могу думать, это то, что использование 3D API поверх 2D добавляет некоторую базовую сложность. По крайней мере, в OpenGL вы должны загружать и управлять текстурами, а когда вы рисуете их, вам нужно правильно подобрать геометрию. Слой обертки решает эти проблемы.

Тем не менее, использование 3D-графики, как представляется, имеет больше преимуществ, чем недостатков, поэтому, если вы спросите меня, оно того стоит.

Тунг Нгуен
источник
1

Если ваша игра достаточно проста, и вы хотите, чтобы игра хорошо работала на недорогих компьютерах, особенно на нетбуках и старых ноутбуках (без 3D-ускорения или на минимальном уровне - со встроенной графикой Intel и т. Д.), Все равно стоит подумать о чистой 2D кадровый подход

Если вы рады, что для игры требуется хотя бы младшая карта / чип ATi / NVidia, то использование 3D API позволит вам сделать много интересных вещей (альфа-смешение, масштабирование / вращение и т. Д.), Которые было бы сложно сделать хорошо / эффективно в чистом программном рендере.

Также имейте в виду, что некоторые вещи, которые очень просты в «чистом 2D», становятся более интересными, когда задействовано трехмерное оборудование (и билинейная фильтрация / альфа-смешение). Понять концепцию предварительного умножения альфа. А также подумайте, например, о том, как бы вы обрабатывали швы между плитками в 2D-карте листов, если бы вы хотели масштабируемый / вращающийся вид.

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

Но в целом, 3D-оборудование - это круто, а аддитивное смешивание - ваш друг :)

bluescrn
источник