Я некоторое время обучаю себя библиотеке OpenGL и хочу начать создавать игру. Тем не менее, для более простого вступления я хочу начать с чего-то двухмерного, такого как игра в стиле покемонов сверху вниз.
Это хороший план или OpenGL создан специально для 3D?
Ответы:
OpenGL вполне подходит для 2D игр. Хотя он обычно используется для 3D, такая же функциональность может быть использована для 2D игр. То есть все, что вы можете сделать с 3D OpenGL, будет применимо с "2D" OpenGL.
Некоторая дополнительная информация может быть найдена в этом месте .
2D OpenGL достигается так же, как 3D OpenGL. 2D OpenGL - это только применение метода, то есть рендеринг сцены на плоскую плоскость с последующим использованием ортогональной проекции вместо перспективной проекции, которая, в зависимости от вашей настройки, может исказить сцену.
Пример:
(а) сцена в ортографической проекции. (б) та же сцена, используя перспективную проекцию. В 2D-игре это может привести к неправильному позиционированию спрайтов, если их глубина изменяется (что может иметь место в зависимости от того, как вы занимаетесь разработкой). Использование перспективной проекции также затрудняет выравнивание объектов в экранных координатах.
Кроме того, OpenGL несет в себе много-много- много преимуществ. В первую очередь, аппаратное ускорение - огромный плюс. Существует также более тонкий уровень контроля над тем, что делает видеокарта и как она работает, что позволяет оптимизировать работу под конкретный случай.
источник
OpenGL, как следует из названия, является графической библиотекой. Хотя он разработан с учетом 3d, в библиотеке нет жестко заданных предположений о том, что вы будете использовать 3d. Более того, благодаря своим трехмерным возможностям некоторые вещи, которые трудно сделать в строго двумерном подходе, являются тривиальными. Примеры:
Это всего лишь несколько преимуществ, которые приходят из головы, я думаю, есть несколько других.
источник
Хотя OpenGL является 3D-API, вы все равно можете использовать его для создания 2D-игр. Вы можете подделать 2D-среду в 3D с помощью различных методов, таких как сопоставление данных с плоскостью.
Однако в реальном API существует ограниченная поддержка для выполнения этого очевидным образом (например, нет функции «включить режим 2D»). Способы его моделирования (которые вы можете найти во многих онлайн-уроках) могут быть сложными для понимания без некоторого понимания трехмерного конвейера, который фактически используется под капотом.
Похоже, что вы некоторое время рассматривали OpenGL и, вероятно, достаточно хорошо разбираетесь в этих основах. Однако, если вы чувствуете себя шатко на них, вы можете начать свою игру, используя 2D-библиотеку, которая построена на основе OpenGL, например, cocos2d . Он даст вам некоторый опыт того, как обычно должны выглядеть 2D API, и все же даст вам преимущества аппаратного ускорения 3D-интерфейса, если вы чувствуете, что не совсем готовы решать все это самостоятельно.
источник
Многие 2d графические библиотеки, такие как SDL или SFML, используют аппаратное ускорение OpenGL. Это дает вам преимущество в производительности OpenGL, но абстрагирует неприятные детали низкого уровня за гораздо более простым API.
источник
Сейчас у меня большой опыт программирования на OpenGl, и я могу сказать, что это боль. В прошлом, когда я начинал программировать, я был очень продуктивным в таких простых средах, как BlitzBasic. Затем я начал переходить к следующему шагу, изучая C ++ и OpenGl. И когда у вас нет хорошего учителя или людей, которых можно спросить, вы навсегда столкнетесь с черным экраном. Самая большая проблема - государственный ад OpenGl. Существует множество переключателей, которые вы можете поменять местами, чтобы изменить состояние opengl. И некоторые переключатели зависят от других переключателей. например, glGet (GL_TEXTURE_BINDING_2D) зависит от glGet (GL_ACTIVE_TEXTURE). И документация, состояние которой зависит от того, какое другое государство не является лучшим. Многие операции, такие как загрузка текстуры, требуют, чтобы вы изменили это состояние, что очень часто приводит к поломке другого кода, который требует старого состояния. И затем возникает проблема, связанная с тем, что OpenGl зависит от реализации, поэтому ваша программа работает на вашем компьютере, но на другом компьютере все, что вы видите, - черный. Все, что вы можете здесь сделать, это угадать, что не так в ваших 10000 строках кода. Так что если вам нравится разочарование, тогда да, используйте OpenGl для 2D вещей. Для всех остальных людей не делайте этого, если вам это не нужно. Вы можете стать продуктивным в OpenGl, но это будет стоить вам много времени и нервов. Вероятно, больше, чем вы хотите потратить. Вы можете стать продуктивным в OpenGl, но это будет стоить вам много времени и нервов. Вероятно, больше, чем вы хотите потратить. Вы можете стать продуктивным в OpenGl, но это будет стоить вам много времени и нервов. Вероятно, больше, чем вы хотите потратить.
источник
Unity3D использует OpenGL, и я использую его для 2D и 2.5D платформеров. Unity3D - это игровой движок 3D, но он также используется для игр 2D и 2.5D. Вы можете иметь плоскости x, y, z и ограничивать движение или вращение только двумя из этих плоскостей, создавая двумерную атмосферу в основном трехмерном мире.
источник