Подходит ли OpenGL для 2D игр?

44

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

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

w4etwetewtwet
источник
Я думаю, что одним из преимуществ использования OpenGL для 2D является то, что вы получаете преимущество шейдеров. Это может быть полезно для достижения специальных эффектов. Другое преимущество заключается в том, что если вы уже знаете OpenGL, вы уже знакомы с API.
Lysol

Ответы:

44

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

Некоторая дополнительная информация может быть найдена в этом месте .

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

Пример:

Орто против перспективы

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

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

Outurnate
источник
Большое спасибо! Я просто хотел подтверждения, что все будет в порядке.
w4etwetewtwet
4
Если у вас есть склонность и интерес к использованию OpenGL для 2D, это принесет вам множество наград, которые может дать только OpenGL. Высокая производительность, кроссплатформенная совместимость ... Подумайте об этом так. В любом случае, почти все другие варианты 2D будут построены поверх OpenGL. Это отличная возможность вырезать некоторых "посредников"
Стивен Лу
2
@StevenLu и не говоря уже о том, чтобы быть немного более настоящим программистом
Outurnate
Отличное чтение! Спасибо, что связали это. Ага: кодирование 2D с использованием OpenGL просто более круто , поэтому вы должны это сделать.
Стивен Лу
1
Вы должны предоставить больше информации для этого ответа, а не просто ссылку. Возможно, объясните, почему GL работает для 2D (орфографические виды) и какие преимущества он дает (аппаратное ускорение, эффекты шейдеров).
Шон Миддледич
22

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

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

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

Корнел Киселевич
источник
3
Пожалуйста, ограничьте себя видеокартами с поддержкой OpenGL 2.0 (или выше), OpenGL 2.0 был выпущен в 2004 году, даже если он довольно устарел.
Slicedpan
@Slicedpan, к сожалению, некоторые ноутбуки / нетбуки все еще поставляются с картами Intel, поддерживающими GL 1.4 max - лично я решил отказаться от них, но некоторые люди (особенно при создании простых игр) могут захотеть их поддерживать.
Корнел Киселевич
16

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

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

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

Джош
источник
5

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

Philipp
источник
0

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

Arne
источник
-2

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

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Apollo
источник
Отлично, мой первый отрицательный голос. Рад, что у gamedev тоже есть ненавистники.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Apollo
1
Я полагаю, что наглядный пример с помощью примеров из реального мира осуждается. Очень профессиональный.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Apollo
7
Amit, отрицательные голоса не указывают на "ненавистников". Снижение голосов - это просто способ для сообщества выразить свое мнение о вопросах и ответах. Это не личное для вас, поэтому постарайтесь не воспринимать это так. Я согласен, что downvoter должен был прокомментировать причину downvote, так как вы не знаете, как улучшить ответ без обратной связи. Я скажу вам, почему я думаю, что это было понижено. Тот факт, что один человек использует OpenGL для 2D-игр, в целом не означает, что он уместен. Вы также должны указать причины, почему это уместно.
MichaelHouse
2
Да, не уверен, почему люди голосуют; бит «использует OpenGL», который, как я чувствовал, должен быть пояснен словами «использует OpenGL на платформах, которые в этом нуждаются» (он использует Direct3D или специфичные для консоли API везде, кроме iOS / Anrdoid / OSX / Linux), но это скорее разъяснение, чем исправление.
Шон Мидлдич
1
Я не отрицал себя, но еще одна причина, по которой этот ответ неуместен, заключается в том, что вы используете движок на основе OpenGL, а не необработанный OpenGL, который многое меняет.
w4etwetewtwet