En la anterior entrada hemos dejado planteadas una serie de cuestiones que tenemos que resolver antes de empezar a programar.
Empecemos a plantear la cuestión de los tipos de gráficos. Si vamos hacerlo en 2D en Linux hay una serie de librerías que nos van a servir de base. La más conocida y utilizada es la Simple DirectMedia Layer.
Anteriormente he hablado de DirectX y de Direct3d. Muchas veces se hace el error de comparar OpenGL con DirectX cuando realmente la comparación correcta es OpenGL vs Direct3D. DirectX es una colección de API creadas para facilitar tareas multimedia, un componente suyo, Direct3D se encarga de los gráficos en 3D y se aprovecha de la aceleración por hardware de las tarjetas gráficas haciendo de interfaz entre el programador y la tarjeta de video.
Volviendo al tema de la SDL, podemos compararla con DirectX salvo por el tema de los gráficos en 3D. De esta manera al ser una librería multimedia nos va a dar acceso a programar con ella los gráficos en 2D, pero es que además sirve para el tema del sonido, input (teclado, ratón, joystick), cdrom, video con mpeg, etc... Además han programado algunas "extensiones" como SDL_net que junto a la SDL nos permite desarrollar aplicaciones que hagan uso de conexiones de red. Además de C y C++, que son los lenguajes más comunes para usarlas, tienen bindings para otros lenguajes como puede ser Python, Perl, etc... Otra ventaja que tiene es que es multiplataforma y esta portada a gran cantidad de sistemas operativos (Windows, Linux, FreeBSD, Solaris, etc...). Tiene una buena documentación, han salido incluso libros al mercado, con tutoriales y con el API bien documentado. Además se utiliza no solo en desarrollos amateur sino también en juegos como Quake 4 (La explicación más abajo).
El inconveniente de esta estupenda librería es que es de bajo nivel por lo no vamos a tener facilidades de otras librerias de más alto nivel. Por ejemplo no tenemos colisiones cosas que otras librerias de más alto nivel si proporcionan como puede ser ClanLib.
Otra alternativa en el campo de las 2D, sobre todo para gente que tanto C, como C++, se le hace dificil, es el de utilizar un lenguaje de programación como Fenix. Lo que le hace especial es que es una alternativa libre al lenguaje DIV. Tanto Fenix como DIV son lenguajes creados especialmente para desarrollar videojuegos. Esto hace que el propio lenguaje tenga soporte para cargar imagenes, colisiones, manejo de sonido, input, sin necesidad de utilizar ninguna libreria. La pega es que tienen un rendimiento muy pobre y que al ser lenguajes creados especificamente para los videojuegos suelen ser mucho peor diseñados que otros de proposito general. Sin embargo cualquiera sin apenas conocimientos de programación puede hacer cosas interesantes y de forma muy rápida. Aquí teneís un manual de fenix algo atrasado pero que tiene utilidad fenix-ref.pdf
Ahora pasemos al tema de las 3D. Tenemos varias alternativas y de buena calidad. La primera es utilizar OpenGL para desarrollar nuestro propio engine. Como es una libreria de bajo nivel nos da primitivas para cosas muy simples como puntos,lineas, poligonos, por lo que vamos a tener que programar todo desde cero. Podemos acompañarla con la libreria SDL y asi tenemos una alternativa perfectamente valida a DirectX puesto que juntamos lo que le faltaba a SDL con lo que le falta a OpenGL.
Sin embargo como desarrollar un engine propio es lento, costoso, y dificil, no vamos a reinventar la rueda y vamos a ver engines ya hechos que nos ayuden a programar un videojuego.
CrystalSpace es muy conocido por ser el engine utilizado en el juego planeshift. Es de los más completos engines opensource. Soporta multitextura, LOD, animación de los mesh mediante libcal3d, sprites 2D, sistema de partículas, físicas con ODE, multiplataforma etc ... El inconveniente que tiene es que tiene poca documentación en forma de tutoriales por lo que tiene una curva alta de aprendizaje. De todas formas jorrit (uno de sus creadores) es consciente de ello, asi que me supongo que harán todo lo que puedan por solucionarlo. Aquí teneís un ejemplo de lo que se puede conseguir con CrystalSpace:

Ogre3D es otro engine, pero esta vez solo funciona como librería 3D, es decir, solo sirve para los gráficos, tal y como dicen en su web, ni sonido, ni IA, ni físicas. Sin embargo tiene la ventaja de ser más facil de utilizar que el anterior y de tener una buena documentación con guias de iniciación, tutoriales, etc... Además podemos utilizar en conjunción de otras librerías para tener sonido, físicas, según necesitemos. Por supuesto tiene características muy interesantes como el uso de shaders, ser multiplataforma, LOD, sistema de partículas, HDR etc.. Un ejemplo de como usa la iluminación con HDR lo podeís ver en la siguiente imagen:

Ya por último nos queda Irrlicht. Este no lo voy a comentar porque lo vamos a utilizar en los próximos artículos para programar gráficos en 3D. Aun así os dejo este video para que veaís las posibilidades que ofrece este engine.
Salu2