Является ли OpenGL подходящим для 2D-игр?

Я уже некоторое время преподаю библиотеку OpenGL и хочу начать делать игру. Однако, для более легкого введения, я хочу начать с чего-то 2D, например, сверху вниз по-покемоновую игру.

Это хороший план или OpenGL специально для 3D?

39 голосов | спросил w4etwetewtwet 15 J000000Monday13 2013, 20:22:31

6 ответов


41

OpenGL вполне подходит для 2D-игр. Хотя он обычно используется для 3D, для 2D-игр можно использовать те же функциональные возможности. То есть все, что вы можете сделать с 3D OpenGL, будет применимо к «2D» OpenGL.

Дополнительная информация приведена в этом месте .

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

Пример:

Ortho vs перспектива

(a) - это сцена в орфографической проекции. (b) является одной и той же сценой, используя перспективную проекцию. В 2D-игре это может привести к неправильному позиционированию спрайтов, если их глубина изменится (что, в зависимости от того, как вы продвигаетесь по разработке, может иметь место). Использование перспективной проекции также затрудняет выравнивание объектов в координатах экрана.

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

ответил Outurnate 15 J000000Monday13 2013, 20:27:53
19

OpenGL в качестве состояний имен - это графическая библиотека. Хотя он разработан с учетом 3D, в библиотеке нет жестко сформулированных предположений, что вы будете использовать 3d. Более того, благодаря его трехмерным возможностям несколько вещей, которые трудно выполнить в строго двухмерном подходе, тривиальны. Примеры:

  • Z-сортировка упрощается с помощью 3d-координат буфера глубины (обратите внимание на прозрачность)
  • sprite rotation и масштабирование в основном бесплатно, поскольку вы используете текстурированные квадрациклы, которые не зависят от разрешения
  • Если вы хотите ограничить себя графическими картами, поддерживающими OpenGL 2.0, вы можете воспользоваться шейдерами, что упростит запись специальных эффектов (размывание, эффекты частиц, манипулирование изображениями, замена цвета) - не говоря уже о том, что это будет намного быстрее, чем на стороне процессора

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

ответил Kornel Kisielewicz 15 J000000Monday13 2013, 20:47:20
15

Хотя OpenGL - это 3D-API, вы все равно можете использовать его для создания 2D-игр. Вы можете подделать 2D-среду в 3D с помощью различных методов, таких как перечеркивание данных на плоскости.

Однако в фактическом API существует ограниченная поддержка, чтобы сделать это очевидным образом (например, функция «включить 2D-режим» отсутствует). Способы имитации (которые вы можете найти во многих учебниках онлайн), может быть трудно понять, не понимая 3D-конвейера, который фактически используется под капотом.

Похоже, вы некоторое время смотрели на OpenGL и, вероятно, имели достойное понимание этих основ. Однако, если вы чувствуете шаткость на них, вы можете начать игру с помощью 2D-библиотеки, которая построена поверх OpenGL, например cocos2d . Это даст вам некоторое представление о том, что 2D API, как правило, должно выглядеть и по-прежнему дает вам преимущества аппаратного ускоренного 3D-back-end, если вы чувствуете, что не совсем готовы решать все это самостоятельно.

ответил Josh Petrie 15 J000000Monday13 2013, 20:35:04
4

Многие графические библиотеки 2d, такие как SDL или SFML используют аппаратное ускорение OpenGL. Это дает вам преимущество OpenGL, но абстрагирует неприятные детали низкого уровня за гораздо более простым API.

ответил Philipp 16 J000000Tuesday13 2013, 01:16:06
0

У меня теперь есть большой опыт программирования OpenGl, и я могу сказать вам, что это боль. В прошлом, когда я начал программировать, я был очень продуктивным в простых средах, таких как BlitzBasic. Затем я начал идти на следующий этап обучения C ++ и OpenGl. И когда у вас нет хорошего учителя или людей, которых вы спросите, вы будете постоянно натыкаться на черный экран. Самой большой проблемой является государственный ад OpenGl. Есть много переключателей, которые вы можете менять, чтобы изменить состояние opengl. И некоторые переключатели зависят от других коммутаторов. например glGet (GL_TEXTURE_BINDING_2D) зависит от glGet (GL_ACTIVE_TEXTURE). И документация, которая зависит от того, какое другое государство не лучшее. Многие операции, такие как загрузка текстур, требуют изменения этого состояния, что очень часто приводит к поломке другого кода, требующего старого состояния. И тогда возникает такая проблема, что OpenGl как поведение, зависящее от реализации, так что ваша программа работает на вашем компьютере, а на другом компьютере все, что вы видите, черное. Все, что вы можете сделать здесь, - это угадать, что не так в ваших 10000 строках кода. Поэтому, если вам нравится разочарование, тогда да используйте OpenGl для 2D-вещей. Для всех других людей не делайте этого, если вам это не нужно. Вы можете получить продуктивность в OpenGl, но это будет стоить вам много времени и нервов. Уместно больше, чем вы хотите потратить.

ответил Arne 23 FebruaryEurope/MoscowbSun, 23 Feb 2014 23:55:35 +0400000000pmSun, 23 Feb 2014 23:55:35 +040014 2014, 23:55:35
-2

Unity3D использует OpenGL, и я использую его для 2D и 2.5D-платформеров. Unity3D - это, в основном, 3D-игровой движок, но он также используется для игр 2D и 2.5D. Вы можете иметь плоскости x, y, z и ограничивать движение или вращение на 2 из этих плоскостей, создавая 2D-атмосферу в основном в 3D-мире.

ответил ApolloSoftware 16 J000000Tuesday13 2013, 21:21:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132