jueves, 6 de febrero de 2014

OpenGL 4.3 con «OpenGL Superbible 6»

Me descargué de Internet el libro OpenGL Superbible 6 para ampliar mis conocimientos acerca de OpenGL. Un libro de 800+ páginas que, por lo poco que he leído, está estructurado como un tutorial, eso sí, un tutorial gigantesco. Incluye el código fuente de los ejemplos que aparecen en el texto. El caso es que hay un pequeño fallo en dicho código fuente que impide la compilación.
Este libro emplea una biblioteca propia llamada SB6 (código fuente incluido) que abstrae algunos detalles para poder enfocarse mejor en aprender OpenGL. Además, para gestionar los eventos del sistema operativo (ventanas, entrada/salida de teclado y ratón) usa la biblioteca GLFW. Uno quizá preferiría que hubieran empleado GLUT en vez de GLFW, pero bueno, eso es algo que en este libro no se toca, en principio. En cuanto a la biblioteca SB6, parece que incluye algunas abstracciones para cargar texturas y modelos, modelos que por cierto están en un formato binario (.sbm). Los detalles de las estructuras utilizadas para almacenar los modelos aparecen en el apéndice del libro. Todo esto es funcionalidad que uno si quisiera podría replicar y tener su propia versión. En resumen, digamos que en principio me parece un libro que está bien.

Ahora bien, respecto a los ejemplos y su compilación. Si tu distribución GNU Linux tiene un cmake con una versión posterior a la 2.6, tendrás que cambiar un par de cosas en el archivo «CMakeLists.txt». Me percaté del fallo gracias al resaltado de sintaxis del editor de textos. Resulta que los cmake posteriores al 2.6 no reconocen la instrucción «elif» y hay que usar «elseif». Además, según parece hay que añadir un par de bibliotecas más para enlazar: X11 y pthreads (glfw necesita pthreads si consultamos «pkg-config --cflags --libs libglfw»). Los cambios a realizar aparecen en github, en un fork del código que alguien hizo.

Una vez comprobado que compilaba, probé a ejecutar algunos ejemplos. Indispensable copiar los objetos y texturas en la carpeta bin/media. Tanto el código fuente como los archivos de texturas y modelos 3D están disponibles en la web (sección «Example Code») indicada en el libro, eso sí, están sin el cmake actualizado.

Ubuntu Saucy Salamander (13.10) lleva cmake 2.8. De hecho Ubuntu tiene a cmake 2.8 en sus repositorios desde Lucid Lynx (10.04), vamos, algo así como desde hace casi 4 años, tiene gracia porque el libro trata de la penúltima versión de OpenGL, la 4.3 (OGL 4.4 salió justo cuando este libro estaba terminado).

No quisiera ser un acusador, pero este libro tiene como autores a miembros de AMD y todos sabemos lo bien que funciona AMD con OpenGL y sobre todo Linux (con el controlador privativo Catalyst). Ja ja.

Por último, una muestra de un ejemplo funcionando:
Un dragón con SSAO aplicado
Eso sí, hay algunos que parece que siguen sin funcionar, como «sparsetexture» (segmentation fault) o «prefixsum» o «prefixsum2d» que se quedan con la ventana en negro. El del displacement mapping sin las texturas disponibles saca un polígono totalmente plano.

3 comentarios:

  1. Un libro que promueve una librería propietaria, aunque sea libre y te la regalen.
    Eso es lo que lía siempre, la falta de estándares. Podrían ser un poco mas unificados, como pasó con PHP, que apenas lo instalas, funciona, y no tienes que liarte con las librerías y diferencias en versiones.

    ResponderEliminar
  2. OpenGL es una especificación abierta y luego hay implementaciones libres y propietarias.
    Las bibliotecas propietarias son las que vienen con los drivers de las tarjetas gráficas.
    Las libres actualmente son Mesa y Gallium, si no me equivoco.

    ResponderEliminar
  3. OpenGL es una especificación abierta y luego hay implementaciones libres y propietarias.
    Las bibliotecas propietarias son las que vienen con los drivers de las tarjetas gráficas.
    Las libres actualmente son Mesa y Gallium, si no me equivoco.

    ResponderEliminar