Я давно не увлекаюсь разработкой игр. Когда я делал это, большинство людей использовали Direct Draw для создания 2D-игр. К тому времени, когда я остановился, люди говорили, что OpenGL или Direct3D с ортогональной проекцией - это просто путь.
Я думаю вернуться к созданию 2D-игр, в частности, для мобильных телефонов, но, возможно, и для платформы XNA. Чтобы сделать что-то с использованием OpenGL, у меня была бы (надеюсь) небольшая кривая обучения, чтобы приспособиться к трехмерной разработке.
Есть ли какая-либо причина, чтобы пропустить это и вместо этого работать с 2D-каркасом, где у меня просто есть буфер кадра Width x Height, который мне нужно заполнить пикселями?
Ответы:
Вам определенно следует использовать что-то, что использует 3D-рендерер на сервере. Но в вашем коде более высокого уровня вы даже не должны видеть ось Z. Все это должно быть удалено на более низких уровнях. Если вы манипулируете пикселями напрямую, вы, вероятно, делаете что-то не так.
Для своих собственных игр я создал набор классов для работы с 2D-объектами. Моя игровая логика имела дело только с координатами x и y. Мои классы также обрабатывали такие вещи, как вращение, масштабирование, режимы наложения и т. Д. И т. Д.
Конечно, есть и существующие 2D-библиотеки, которые вы также можете использовать - Cocos2D является популярной на iPhone. Большинство, если не все, из этих библиотек будут построены на низкоуровневых API-интерфейсах 3D, так что они получат выгоду от доступного ускорения.
источник
Есть причина не использовать 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 - это то, что нужно.
источник
Нет, нет Вы получите лучшие эффекты и более быстрый рендеринг с помощью 3D рендера. Например, вот 2D-игра, которую я сделал несколько недель назад (в один из выходных) - эффекты сферы сильно зависят от 3D-шейдеров, хотя во многих отношениях они являются 2D-эффектами. Точно так же я широко использовал доступную технологию рендеринга для этой игры - там есть три или четыре различных эффекта пиксельных шейдеров, которые позволяют мне развиваться быстрее и делать ее красивее.
Охватите 3d и полюбите его, но полюбите его с одной меньшей осью.
источник
3D API, как правило, путь. Современные графические процессоры предназначены для рендеринга 3D-графики, поэтому вам гарантирована довольно стабильная производительность. И, как сказал ZorbaTHut, переход на 3D-маршрут позволит вам воспользоваться такими вещами, как пиксельные шейдеры.
На самом деле 2D-API не так уж и много. DirectDraw устарел, и большинство 2D / векторных библиотек там используют OpenGL или Direct3D для выполнения их рендеринга в любом случае. Даже современные инструментарии пользовательского интерфейса используют 3D API для их рендеринга и компоновки. Возьмем, к примеру, WPF (последний пользовательский интерфейс Microsoft): он использует Direct3D для рендеринга.
источник
Есть все еще удивительное количество действительно старых машин с дрянным / несуществующим 3d-ускорением и драйверами, которые никогда не обновлялись, так что использование DirectDraw все еще будет намного быстрее, чем OpenGL или D3D. Я испытал это во время работы над многопользовательской игрой, которой уже около 10 лет, когда я пытался написать новый рендеринг в OpenGL для поддержки других платформ. Многие игроки сообщали, что режим OpenGL не воспроизводился из-за низкой частоты кадров. Я также согласился бы с бразильским плакатом, что это более распространено за пределами США и Европы, но это все еще верно и в тех местах.
Если вы нацелены на мобильные телефоны или XNA, то обязательно используйте 3D. Но если вы хотите сделать игру, которая работает на любом ПК, где угодно, я бы сказал, придерживайтесь DDraw.
источник
Единственное, о чем я могу думать, это то, что использование 3D API поверх 2D добавляет некоторую базовую сложность. По крайней мере, в OpenGL вы должны загружать и управлять текстурами, а когда вы рисуете их, вам нужно правильно подобрать геометрию. Слой обертки решает эти проблемы.
Тем не менее, использование 3D-графики, как представляется, имеет больше преимуществ, чем недостатков, поэтому, если вы спросите меня, оно того стоит.
источник
Если ваша игра достаточно проста, и вы хотите, чтобы игра хорошо работала на недорогих компьютерах, особенно на нетбуках и старых ноутбуках (без 3D-ускорения или на минимальном уровне - со встроенной графикой Intel и т. Д.), Все равно стоит подумать о чистой 2D кадровый подход
Если вы рады, что для игры требуется хотя бы младшая карта / чип ATi / NVidia, то использование 3D API позволит вам сделать много интересных вещей (альфа-смешение, масштабирование / вращение и т. Д.), Которые было бы сложно сделать хорошо / эффективно в чистом программном рендере.
Также имейте в виду, что некоторые вещи, которые очень просты в «чистом 2D», становятся более интересными, когда задействовано трехмерное оборудование (и билинейная фильтрация / альфа-смешение). Понять концепцию предварительного умножения альфа. А также подумайте, например, о том, как бы вы обрабатывали швы между плитками в 2D-карте листов, если бы вы хотели масштабируемый / вращающийся вид.
Также помните, что скорость заполнения ограничена. И на удивление легко достичь этих пределов в 2D. У вас может не быть много полигонов, но если вы хотите много альфа-смешанных слоев параллакса, или частиц, или постэффектов - вы можете легко заполнить столько пикселей, сколько в достаточно качественной трехмерной игре.
Но в целом, 3D-оборудование - это круто, а аддитивное смешивание - ваш друг :)
источник