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?
Respuestas:
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:
(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
fuente
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:
Estas son solo algunas de las ventajas que vienen de la parte superior de mi cabeza, supongo que hay varias otras.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente