Tag Archive: C++


Siempre había tenido curiosidad por la programación gráfica en las tres dimensiones, pero los comentarios de la gente que me hablaba de ello hacían que decidiera aplazar mi inmersión en el tema e incluso olvidarme de ello. Curiosamente todos esos comentarios coincidían en que tanto OpenGL como DirectX eran APIs difíciles de aprender y para las que había que tener un conocimiento muy fuerte de las matemáticas.

Pues bien, os diré que todo depende de lo que quieras hacer. Mostrar una simple figura geométrica y rotarla es muy sencillo. Pero si ya quieres desplegar mallas más complejas, con texturas, mapas de normales y especulares, iluminación y cámara, el asunto se torna un poco más complicado y laborioso. Pero si bien es cierto que tanto OpenGL como DirectX pueden asustar con sólo echar un pequeño vistazo a la documentación o a algún ejemplo de cierto calado, realmente, para hacer cosas básicas (y no tan básicas) lo más importante no es conocer dichas APIs, sino los conceptos, su funcionamiento interno, y tener una pequeña base de álgebra lineal y física. Después, el aprender una u otra biblioteca a un nivel que te permita hacer algo curioso se hace inmensamente más llevadero.

Comencé a estudiar OpenGL, ya que Android e iOS lo utilizan, y, ya que me ponía a aprender algo, debía valorar qué usos y aplicaciones prácticas poder darle de cara a un posible futuro profesional (el desarrollo para dispositivos móviles lleva tiempo en pleno boom). Pero una oferta de trabajo interesante como programador de videojuegos para Windows me hizo interrumpir mis avances con OpenGL y pasarme a DirectX con la finalidad de crear una aplicación 3D que me sirviera de muestra, tal y como pedían en la oferta. Así pues en más o menos un mes conseguí hacer esto:

La aplicación hace uso de la biblioteca libre Assimp para la carga de los modelos y escenarios, de DirectX 9.0c para el trabajo sucio y de los shaders para el renderizado final, concepto que también se me tornaba oscuro hasta hace poco (¡lo importante que es hacerse con un buen libro!).

Aún me queda mucho por aprender; La programación gráfica es un océano de técnicas, conceptos y conocimientos multidisciplinares. Pero la parte más complicada, que es empezar y asentar los conocimientos fundamentales y más comunes, ya está conseguida.

Anuncios

Millenium Challenge es un videojuego homebrew para Nintendo DS con una mecánica basada en el Mahjong y una temática de concienciación social sobre los Objetivos de Desarrollo del Milenio.

Motivado principalmente por mi pasión por los videojuegos, he aprovechado este proyecto para cubrir varios objetivos, como suele ser habitual en mi:

  • Estudio, enfocado al desarrollo, de una arquitectura de recursos limitados y distinta a la de los PCs.
  • Diseño y desarrollo completo de un videojuego del modo más profesional posible, siguiendo una metodología iterativa y generando toda la documentación pertinente.
  • Aprovechar y ampliar los conocimientos de análisis, diseño, implementación y pruebas de software adquiridos en la titulación de Ing. Tec. en Informática de Sistemas.
  • Disponer de un proyecto fin de carrera para dicha titulación.
  • Ampliar mi experiencia con el lenguaje C++.

En su desarrollo he llevado a cabo las múltiples tareas multidisciplinares que un software de estas características requiere: Documentación sobre desarrollo homebrew para la videoconsola (DevkitARM/Libnds), análisis y diseño (UML sobre Artisan Studio Uno), obtención, creación y edición de los recursos multimedia (Photoshop y editor de arhivos MIDI), creación de una herramienta para el diseño de los niveles (Visual Basic .NET), implementación (C/C++ sobre Eclipse), depuración y pruebas (emulador Desmume y videoconsola Nintendo DS Lite), documentación técnica y de usuario, y grabación y montaje de un vídeo con el resumen del proceso y teaser del videojuego (Camtasia Studio).

Aquí muestro el vídeo con el proceso de creación seguido y el teaser:

Un proyecto de estas características resulta más laborioso de lo normal por dos motivos: la escasa, dispersa y desactualizada documentación disponible sobre el desarrollo homebrew para esta videoconsola y el bajo nivel de programación, y por tanto buen conocimiento de la arquitectura de la consola, que requiere la biblioteca Libnds. Disponiendo de un framework y/o de una buena documentación, el diseño e implementación resultarían mucho más fluidos, y el período aproximado de 6 meses que me llevó concluirlo se habría visto bastante reducido.

Y aquí otro vídeo ejecutando el juego en la consola:

Aún así, superando mis expectativas, Millennium Challenge ha sido premiado por la Fundación General de la Universidad de Valladolid con una generosa cuantía económica y con registro en la propiedad intelectual. Además diversos medios de comunicación se han visto interesados en divulgar el trabajo realizado. Medios como la revista Alarva de la asociación de antiguos alumnos del Colegio San Agustín de Valladolid en el que estudié, el periódico El Norte de Castilla en relación con los premios de la Fundación o el periódico El Mundo, en el cual me hicieron una entrevista personal.