¿OpenGL es apropiado para juegos 2D?


44

Hace un tiempo que me enseño la biblioteca OpenGL y quiero comenzar a hacer un juego. Sin embargo, para una introducción más fácil, quiero comenzar con algo en 2D, como un juego de arriba a abajo estilo Pokemon.

¿Es este un buen plan, o OpenGL está hecho específicamente para 3D?



Creo que un beneficio que tiene OpenGL para 2D es que obtienes el beneficio de los sombreadores. Estos podrían ser útiles para lograr efectos especiales. Otro beneficio es que si ya conoce OpenGL, ya estará familiarizado con la API.
Lysol

Respuestas:


44

OpenGL es bastante apropiado para juegos 2D. Aunque generalmente se usa para 3D, la misma funcionalidad se puede usar para juegos 2D. Es decir, cualquier cosa que pueda hacer con 3D OpenGL será aplicable con OpenGL "2D".

Se puede encontrar más información en esta ubicación .

2D OpenGL se logra de la misma manera que 3D OpenGL. 2D OpenGL es solo la aplicación de una técnica, es decir, renderizar la escena en un plano, luego usar una proyección ortográfica en lugar de una proyección en perspectiva que, según su configuración, podría distorsionar la escena.

Un ejemplo:

Ortho vs perspectiva

(a) es una escena en una proyección ortográfica. (b) es la misma escena, usando una proyección en perspectiva. En un juego 2D, esto puede causar un mal posicionamiento de los sprites si se altera su profundidad (lo cual, dependiendo de cómo se desarrolle, puede ser el caso). El uso de una proyección en perspectiva también dificulta la alineación de las cosas en las coordenadas de la pantalla.

Además, OpenGL conlleva muchos, muchos, muchos beneficios. Principalmente, la aceleración de hardware es una gran ventaja. También hay un grado mucho más fino de control sobre lo que hace la tarjeta gráfica y cómo funciona, lo que permite optimizaciones específicas para cada caso


¡Muchas gracias! Solo quería confirmación de que estaría bien hacer esto.
w4etwetewtwet

44
Si tiene la aptitud e interés para usar OpenGL para 2D, le traerá muchas recompensas que solo OpenGL puede ofrecer. Excelente rendimiento, compatibilidad multiplataforma ... Piénselo de esta manera. Casi todas las demás opciones para 2D se construirían sobre OpenGL de todos modos. Es una gran oportunidad para eliminar a algunos "intermediarios"
Steven Lu

2
@StevenLu y sin mencionar que es un poco más un programador real
Outurnate

Gran lectura! Gracias por vincular eso. Sí: codificar su 2D con OpenGL directo es simplemente más rudo, por eso debería hacerlo.
Steven Lu

1
Debería proporcionar más información a esta respuesta en lugar de solo un enlace. Quizás explique por qué GL funciona para 2D (vistas ortográficas) y qué ventajas trae (aceleración de hardware, efectos de sombreado).
Sean Middleditch

22

OpenGL como su nombre lo indica es una biblioteca de gráficos. Aunque está desarrollado pensando en 3d, no hay suposiciones codificadas en la biblioteca que usará 3d. Además, gracias a sus capacidades 3D, varias cosas que serían difíciles de hacer en un enfoque estrictamente 2D son triviales. Ejemplos:

  • La ordenación Z se simplifica mediante el uso de coordenadas 3d del búfer de profundidad (aunque tenga cuidado con la transparencia)
  • la rotación y escala del sprite es básicamente gratuita, ya que está utilizando quads texturizados que son independientes de la resolución
  • Si está dispuesto a restringirse a las tarjetas gráficas compatibles con OpenGL 2.0, puede aprovechar los sombreadores, lo que simplificará mucho la escritura de efectos especiales (desenfoques, efectos de partículas, manipulación de imágenes, sustitución de colores), sin mencionar que será mucho más rápido que el lado de la CPU

Estas son solo algunas de las ventajas que vienen de la parte superior de mi cabeza, supongo que hay varias otras.


3
Limítese a las tarjetas gráficas compatibles con OpenGL 2.0 (o superior), OpenGL 2.0 fue lanzado en 2004, incluso eso está bastante desactualizado.
Slicedpan

@Slicedpan, desafortunadamente algunas computadoras portátiles / netbooks todavía vienen con tarjetas Intel que tienen soporte GL 1.4 max - personalmente decidí deshacerme de ellas, pero algunas personas (especialmente cuando hacen juegos simples) podrían querer apoyarlas.
Kornel Kisielewicz

16

Si bien OpenGL es una API 3D, aún puede usarla para hacer juegos en 2D. Puede simular un entorno 2D en 3D a través de diversas técnicas, como contrastar datos a un plano.

Sin embargo, hay un soporte limitado en la API real para hacer esto de una manera obvia (por ejemplo, no hay una función de "activar el modo 2D"). Las formas en que lo simularía (que puede encontrar en muchos tutoriales en línea) pueden ser difíciles de comprender sin una cierta comprensión de la tubería 3D que realmente se está utilizando bajo el capó.

Parece que has estado viendo OpenGL por un tiempo y probablemente tienes una comprensión decente de esos fundamentos. Sin embargo, si te sientes inestable con ellos, es posible que desees comenzar con tu juego usando una biblioteca 2D que se construye sobre OpenGL, como cocos2d . Le dará algo de experiencia con el aspecto general de las API 2D y aún obtendrá los beneficios de un back-end 3D acelerado por hardware, si siente que no está del todo preparado para abordar todo por su cuenta.



5

Muchas bibliotecas gráficas 2D como SDL o SFML hacen uso de la aceleración de hardware OpenGL. Esto le brinda el beneficio de rendimiento de OpenGL, pero abstrae los desagradables detalles de bajo nivel detrás de una API mucho más simple.


0

Ahora tengo mucha experiencia en la programación de OpenGl, y puedo decirte que es una molestia. En el pasado, cuando comencé a programar, era muy productivo en entornos simples como BlitzBasic. Luego comencé a dar el siguiente paso con el aprendizaje de C ++ y OpenGl. Y cuando no tenga un buen maestro o personas para preguntar, se encontrará permanentemente con la pantalla en negro. El mayor problema es el infierno estatal de OpenGl. Hay toneladas de interruptores que puede intercambiar para cambiar el estado de opengl. Y algunos interruptores dependen de otros interruptores. por ejemplo glGet (GL_TEXTURE_BINDING_2D) depende de glGet (GL_ACTIVE_TEXTURE). Y la documentación de qué estado depende de qué otro estado no es el mejor. Muchas operaciones, como la carga de texturas, requieren que cambie este estado, lo que a menudo conduce a la ruptura de otro código que requiere el estado anterior. Y luego está el problema de que OpenGl es un comportamiento dependiente de la implementación, de modo que su programa se ejecuta en su máquina, pero en la otra máquina todo lo que ve es negro. Todo lo que puede hacer aquí es adivinar lo que está mal en sus 10000 líneas de código. Entonces, si le gusta la frustración, sí, use OpenGl para cosas 2D. Para todas las demás personas, no lo hagas si no lo necesitas. Puede ser productivo en OpenGl, pero le costará mucho tiempo y nervios. Probablemente más de lo que quieres gastar. Puede ser productivo en OpenGl, pero le costará mucho tiempo y nervios. Probablemente más de lo que quieres gastar. Puede ser productivo en OpenGl, pero le costará mucho tiempo y nervios. Probablemente más de lo que quieres gastar.


-2

Unity3D usa OpenGL, y yo lo uso para plataformas 2D y 2.5D. Unity3D es esencialmente un motor de juego 3D, pero también se usa para juegos 2D y 2.5D. Puede tener planos x, y, z y solo limitar el movimiento o la rotación a 2 de esos planos, creando una atmósfera 2D esencialmente en un mundo 3D.


Genial, mi primer voto negativo. Me alegra ver que gamedev también tiene enemigos.
SOFTWARE Apollo

1
Supongo que ilustrar un punto a través de ejemplos del mundo real está mal visto. Muy profesional.
SOFTWARE Apollo

77
Amit, los votos negativos no indican "enemigos". Los votos negativos son simplemente una forma para que la comunidad transmita su opinión sobre las preguntas y respuestas. No es personal para usted, así que trate de no tomarlo de esa manera. Estoy de acuerdo en que el votante negativo debería haber comentado el motivo del voto negativo, ya que no sabes cómo mejorar la respuesta sin comentarios. Te diré por qué creo que fue rechazado. El hecho de que una persona use OpenGL para juegos 2D no significa en general que sea apropiado. También debe dar razones de por qué es apropiado.
MichaelHouse

2
Sí, no estoy seguro de por qué las personas votan negativamente; El bit "usa OpenGL" que sentí debería aclararse con "usa OpenGL en plataformas que lo requieren" (usa Direct3D o API específicas de la consola en todas partes excepto iOS / Anrdoid / OSX / Linux), pero eso es más una aclaración que una corrección.
Sean Middleditch

1
No me voté mal, pero otra razón por la que esta respuesta es inapropiada es porque estás usando un motor basado en OpenGL, no OpenGL en bruto, que cambia las cosas bastante.
w4etwetewtwet
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.