Hilo de OpenGL

B

Visto que el foro de desarrollo y diseño sólo toca de pasada el gamedev, y que OpenGL se usa mayormente para desarrollar videojuegos, he decidido abrir este hilo para mostrar juegos, animaciones o cualquier cosa hecha con esta librería de 3D.

¿Qué es OpenGL?

OpenGL (Open Graphics Library) es una especificación estándar que define una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan gráficos 2D y 3D. La interfaz consiste en más de 250 funciones diferentes que pueden usarse para dibujar escenas tridimensionales complejas a partir de primitivas geométricas simples, tales como puntos, líneas y triángulos. Fue desarrollada originalmente por Silicon Graphics Inc. (SGI) en 19922​ y se usa ampliamente en CAD, realidad virtual, representación científica, visualización de información y simulación de vuelo. También se usa en desarrollo de videojuegos, donde compite con Direct3D en plataformas Microsoft Windows.

¿Cómo funciona OpenGL?

El funcionamiento básico de OpenGL consiste en aceptar primitivas tales como puntos, líneas y polígonos, y convertirlas en píxeles. Este proceso es realizado por una pipeline gráfica conocida como Máquina de estados de OpenGL.

La mayor parte de los comandos de OpenGL bien emiten primitivas a la pipeline gráfica o bien configuran cómo la pipeline procesa dichas primitivas. Hasta la aparición de la versión 2.0 cada etapa de la pipeline ejecutaba una función prefijada, resultando poco configurable. A partir de la versión 2.0 algunas etapas son programables usando un lenguaje de programación llamado GLSL (muy similar a C).

¿Qué lenguajes se usan para desarrollar con OpenGL?

OpenGL está programado con C pero, como se comenta más arriba, sus APIs están disponibles en muchos lenguajes de programación. La mayoría de proyectos actuales se desarrollan con lenguajes orientados a objetos como C++ y Java, especialmente el primero. Hay una infinidad de juegos desarrollados con C++ y OpenGL, y en el caso de Java el ejemplo más famoso es la versión original de Minecraft, que utiliza una API de alto nivel.

Vale, ¿pero dónde empiezo a aprender?

La primera versión de OpenGL tiene casi 25 años. Los tutoriales que se pueden encontrar se dividen en los que enseñan el estilo antiguo y más simple y el estilo moderno y más complejo (pero mucho más potente). Aquí sólo voy a poner tutoriales que cubran versiones modernas (de la 3 en adelante)

Páginas

https://learnopengl.com/
http://www.opengl-tutorial.org/
http://ogldev.atspace.co.uk/
https://open.gl/

Libros

https://www.amazon.es/Antons-OpenGL-4-Tutorials-English-ebook/dp/B00LAMQYF2
https://www.amazon.es/OpenGL-Shading-Language-Cookbook-high-quality-ebook/dp/B07HXYJ9VT/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1544364945&sr=1-1&keywords=shading+cookbook

Jastro

Gran aportación, aunque creo que poco debate se va a generar, porque creo que pocas personas tocan opengl como tal aqui.

Vulkan > opengl

1 respuesta
Alberteban

Yo estoy ahora mismo estudiando C++, ¿creéis que intentar hacer juegos con OpenGL sería una opción para seguir aprendiendo? ¿o es algo que requiere un alto nivel en general?

2 respuestas
B

Aquí un vídeo de lo último que he hecho, es un render de Superman en medio del mar xD

Como he comentado en el foro de diseño voy aprendiendo a cuentagotas por el poco tiempo libre que he tenido estos meses. Cada semana intento aprender una o dos cosas nuevas, esta semana he empezado a iluminar modelos 3D y a crear cubemaps. Para la siguiente semana empezaré a hacer animaciones esqueletales para que los modelos no salgan to tiesos.

#2 Sabía que iba a surgir el tema de Vulkan y OpenGL enseguida XD Vulkan es un mundo de complejidad superior en mi opinión, en las líneas que programas para hacer un triángulo con cuatro cosas te da para un juego sencillo con OpenGL. De hecho mi objetivo original era aprender Vulkan pero me acabé decantando por OpenGL por eso. Pero sin duda en el futuro lo aprenderé, de momento OpenGL ya me saca de la zona de comfort en la que llevaba años con Python y Pygame.

#3 Yo vengo del mundo del webdev y de hacer juegos 2D tochos pero con Python, que es un lenguaje con librerías de mucho más alto nivel y más fácil de pillar en general. Mi formación en C++ es bastante escasa pero al saber bastante Java se trata más que nada de añadir conceptos de memoria y de más bajo nivel. Si tienes buen nivel de programación orientada a objetos yo me lanzaría ya. Te recomiendo https://learnopengl.com/, es el tutorial con el que más he aprendido.

1 1 respuesta
Jastro

#4 Vulkan es el puto infierno, pero el rendimiento es superior eso esta claro, pero es normal que no se extienda mucho, solo un colgado de al vida podria conseguir hacer cosas con eso.

#3 eso mejor que te responda #1

PD: #4 muy chulo tu curro x)

totespare

La verdad es que hacía falta algún hilo de este tipo, sobretodo para darle aspectos muy técnicos y de bajo nivel al foro. Personalmente no lo utilizo, pero a ver si se anima más gente y le dáis cañita :P

starfucker

La verdad que te esta quedando chulo.
Lo bueno de OpenGL es ponerte a toquetear shaders y hacer efectos chulos.
Para el renderizado de la escena estas usando algun tipo de arbol de escena? o estas renderizando a pelo uno detras de otro?
Por cierto, cuando empieces con las sombras veras como con una cagadita en el shader hace que vaya todo a 2 fps xDD (experiencia propia)

1 2 respuestas
Ridote

#7 Pero es que para tocar shaders no te hace falta meterte con openGL que es un infierno. Cualquier motor serio te deja programar shaders en openGL.

#1 Mucho ánimo y espero ver movimiento y que encuentres más gente interesada en openGL por estos lares.

1 respuesta
starfucker

#8 Luego se le acaba cogiendo el gusto :joy: y buscas las mil formas de toquetear cosas :joy:

1 respuesta
Ridote

#9 Yo hice un par de cosas, bastante sencillas. Hice un sistema planetario con los planetas en "proporciones reales" quitando un par que no se venían si no los ponía algo más grandes. Y giraban todos también en proporciones reales alrededor del Sol y de ellos mismos. Y la tierra tenía la luna haciendo lo propio. Sin más lunas. Es una chulada verlo funcionando aunque sea algo megasencillo, pero en general no puedo con openGL, me parece feísimo. Lo que me mola de openGL son los shaders, pero como ya dije con cualquier motor les puedes dar a los shaders y ya. Es genial.

B

#7 Una de las razones por las que estoy aprendiendo OpenGL en vez de algo tipo Unity es que se puede integrar en un sinfín de aplicaciones. Juegos que tengas hechos con SDL antiguo o cosas así les vas a poder dar un lavado de cara.

Hay muros con los que chocas con motores de alto nivel cuando intentas hacer cosas tipo generar chorrocientas partículas vistosas por frame, y que parece que OpenGL puede hacer mejor.

El código que tengo ahora mismo es bastante guarrete porque es básicamente mezcla de código de diferentes tutoriales (boilerplates para cargar modelos con Assimp, ventanas con GLFW, etc...) tcon lo que voy haciendo yo, sin demasiado orden. Por eso lo siguiente que voy a hacer va a ser ir encapsulando partes y organizando lo que he he hecho hasta ahora. Para cuando empiece con animaciones esqueletales y a jugar con Blender ya voy a organizarlo con árboles, nodos y más limpito todo xD

2 respuestas
kesada7

#11 Yo diría que se buscan cosas muy distintas y no se puede comparar aprender OpenGL con aprender a manejar un motor como Unity con un lenguaje de alto nivel. Con este estás dedicado al desarrollo del gameplay y el juego en sí. Y en el otro caso yo diría que es interesante pues si te quieres centrar y te gusta temas de programación de más bajo nivel, programación de gráficos o motores, no para hacer un videojuego propiamente.

Lo cual hay bastante trabajo en la industria, no tanto en indies donde suelen usar motores como unity, pero muchas o casi todas de las tochas usan sus propios motores y buscan a gente que sepa programar a bajo nivel.

2 respuestas
B

Nvidia acaba de liberar el código de PhysX en https://github.com/NVIDIAGameWorks/PhysX-3.4, habrá que compilarlo y probarlo

#12 Al fin y al cabo OpenGL no es más que una API para mover píxeles en una pantalla, ello conlleva un mundo de posibilidades enorme pero también una carga de trabajo adicional. Pero lo gratificante que es cuando consigues algo chulo lo compensa, al menos para mí.

AngelRc

#12 En tema gráficos no hay casi trabajo comparado con el resto de ramas de programación dentro del desarrollo de videojuegos(y el que hay no es bastante). Y programación bajo nivel(ensamblador) para optimizar cuellos de botella muchisimo menos, y solo los mejores encuentran trabajo de eso (aunque no se que tiene que ver con opengl).

#11 OpenGl te valdrá si quieres meterte a trabajar en motor en empresas grandes o en no tan tochas haciendo shaders (no creo que te pongan solo ha hacer shaders si no aparte temás de gameplay/otros). Mucha gente que busca trabajo con Unity/UE no sabe nada de shaders, creo que sería un gran punto a tu favor si te interesan además esos motores.

B

Al final me he decidido a hacer un pequeño proyecto en vez de seguir jugando con ejemplos y tutoriales, soy muy project-based a la hora de aprender. Estos días iré haciendo un ajedrez en 3D y enseñando cómo queda

B

He avanzado bastante

Me está costando hacer que salgan todas las piezas pero es cuestión de seguir aprendiendo, igual hago el tablero con unos cubos y unas texturas antes de terminar con las piezas xD
Como se puede apreciar en el vídeo las piezas tampoco tienen las texturas cargadas todavía, pero aun así son muy elegantes. Lo que estoy aprendiendo de estructuras de datos de C++ no tiene precio.

Edit: he actualizado el primer post con enlaces a páginas y libros.

3 meses después
B

Resucito el hilo después de estos meses para seguir poniendo cosillas.

Aunque esté currando en webdev sigo sacando ratos para ir aprendiendo OpenGL. Además he empezado a aprender Blender para hacer rigs. Con un poco de maña y muchas horas de tutoriales he conseguido hacer animaciones esqueletales con texturas.

1 respuesta
starfucker

#17 una manera rapida de sacar animaciones es con mixamo

1 1 respuesta
B

#18 me lo apunto, a ver si esta semana le echo un vistazo.

Usuarios habituales

Tags