miércoles, 23 de noviembre de 2005

Ping? Pong!

Mucho llevo sin dar señales de vida. ¿Qué ha sido de mi en este tiempo? Simple: el tiempo libre ha dejado de existir por completo :P Ésto ha sido fruto de haber pasado a trabajar seis horas en vez de cuatro, empezar a hacer el proyecto de fin de carrera e intentar sacar ocho asignaturas de la carrera.

Tras la queja de rigor (porque quejarse es gratis) llega la chicha. ¿Qué ha sido de mis proyectos y planes? Pues bien, IO-3D está más que parado, en un punto intermedio entre 0.1.2 y 0.1.3 desde hace meses, y con el roadmap tan sumamente alterado que me pregunto si no será mejor empezar otra cosa desde cero (léase el siguiente párrafo).

En este tiempo me viene rondando por la cabeza la realización de un motor (no necesariamente para juegos) basado en un núcleo que gestione ciclo de vida de componentes. Uno de estos componentes sería una librería de comunicaciones multiplataforma, cuyo núcleo estuviera basado en el patrón Reactor, y usara SocketAcceptor, SocketConnector y SocketStream. Estoy dando vueltas a la forma de comunicación entre los módulos: directamente, que sería lo más fácil de implementar, o a través del núcleo, que permitiría tener un control absoluto de los sucesos, y depurar cada componente por separado con un testbench que emulara al resto. Ésto sería una pequeña parte del conjunto, que se me está gestando entre los pliegues de masa gris (y está a la espera de que 1:Termine de implementar mi mini-STL, 2:Encuentre tiempo en abundancia).

Por otro lado, después de bastantes años por fin me compré un ordenador nuevo en condiciones (AMD Athlon 64 X2 Dual-Core 3800+, 2 Gb DDR2 Kingston, GF6800GT 256Mb PCX), así que ya le he metido un buen Linux y a volar. Estoy casi completamente portado ya a Linux (si ya me va ahí Doom 3, qué más puedo querer :P) y sólo visito a Windows en caso de necesidad. Ésto me ha despertado la curiosidad, y estoy sacando tiempo de donde no lo hay (mejor dicho, de la universidad :P) para aprender por un lado Qt/KDE (para cubrir mis carencias en GUIs con C++) y por otro trastear un poco con Mono, que me está llamando bastante la atención.

¿Es ésto todo? ¡No! También tengo en mente realizar una pequeña aplicación que permita generar texturas de alta resolución de la tierra (a razón de 1 píxel/1 Km) a partir de la información libremente accesible por internet sobre composición del terreno, tipo de vegetación, temperatura, altitud, etc. No es probable que toque nada de ésto a corto plazo, pues implica leerse la especificación de multitud de fuentes de datos y realizar numerosos ensayos de prueba y error (más bien error a secas :P).

Como se puede ver, tengo para varios meses, aunque a saber las vueltas que da la vida :P

Un saludo.

lunes, 23 de mayo de 2005

Hola Eclipse, adiós WinCVS, y código y binarios de Red Knight

Hace poco he decidido dejar de utilizar WinCVS como cliente para acceder al repositorio CVS, y empezar a utilizar Eclipse Platform. ¿La razón? A pesar de que Eclipse es un IDE completo para desarrollar en Java, el módulo para CVS que trae es de lo mejor que he visto. Permite un mayor nivel de abstracción sobre la operación y es menos probable provocar tragedias con el repositorio :P Además, he estado mirando algo sobre desarrollo en Symbian y parece que hay plugin para hacerlo con Eclipse. Pudiera ser el inicio de la versión de IO-3D para Symbian.

Por otro lado, el código fuente de Red Knight, los binarios para el emulador y los datos necesarios ya están también en el repositorio, todo bajo licencia GNU/GPL. Se puede acceder por aqui: Isometric.

jueves, 12 de mayo de 2005

MobiGame, IO-3D, Red Knight y otras historias

La semana pasada se celebró el IV MobiGame, concurso de desarrollo de juegos para dispositivos móviles de la Escuela Politécnica de la Universidad de Alcalá. Participé, junto a mi amigo Luis, en la categoría de aplicaciones para PocketPC.

Presentamos un juego isométrico de aventura, llamado Red Knight, estilo Diablo pero con menos características. Para realizarlo tuvimos dos semanas, en las cuales monté un motor para juegos isométricos que permitiera definir todos los objetos, enemigos, textos, etc, usando archivos de definiciones, para no tener que recompilar si se quiere hacer otro juego diferente. Todo ésto montado, a su vez, sobre la última versión estable de IO-3D, la 0.1.2, con sistema de reproducción de música MIDI tipo 0 gracias a la ayuda de Luis.

¿Cuál fue el resultado? Primer premio en nuestra categoría :D

Para hacerse una idea, el tamaño total del juego, con IO-3D, tga2tex, el motor de juegos isométricos y los compiladores de archivos de definiciones es de 13517 líneas de código, repartidas en 72 archivos.

Tras ésto, me he replanteado un poco el planning de IO-3D. Estoy estudiando portar las clases de más bajo nivel a Symbian y hacerlo multiplataforma, pero aún no tengo nada decidido. Ya veremos cómo voy de tiempo. Además, en el trabajo he sacado nuevas ideas sobre el diseño general del motor, basado en eventos, y mucho más flexible y ampliable.

Pablo tiene alojadas algunas fotos nuestras del evento en su máquina:
Nota: El de más pelo en la cara soy yo, el otro es Luis :P

Yo y Luis, subiendo a la presenación que haciamos los finalistas, esperando que se baje la competencia :P

"Luis, mata esos bichos y ve hacia el Este, a la vieja ermita"

Yo con Blur Motion y vista del menú del juego

Luis y yo, aplaudiendo a los segundos, que suben a recoger el premio (a sabiendas de que ya sólo queda nuestro grupo y el primer premio :P)
Los malos pelos son efecto secundario del sueño acumulado.

El representante de e-brain, entregandonos el primer premio

Galería completa

Por último, voy a poner los agradecimientos a las personas que me han hecho posible participar y ganar:

A Luis, por participar conmigo y desarrollar toda la chicha del sistema MIDI, buscar, preparar y pintar todos los gráficos, buscar los sonidos, las músicas, convertirlas a tipo 0, y hacer los mapas.

A Pablo, por hospedar mi web, el repositorio CVS donde mantengo el código de IO-3D, por ayudar con la creación de los mapas, ser Beta Tester oficial y prestarnos su portátil para realizar las dos presentaciones del juego.

A Sergio, por cubrirme con las prácticas en los días que yo ya hasta soñaba con C++ (el poco tiempo que tenía).

Y a todos los que han demostrado su apoyo, dando ánimos, etc., porque ayudan a sacar fuerzas para aguantar sin dormir, muchas gracias.

PD: Cuando tenga un rato libre prepararé la página del juego en mi web (ruben3d.mondedeu.com), y subiré una distro con los binarios para el emulador y el código fuente, a parte de una pequeña historia con lo que han sido esas dos semanas de intenso desarrollo nocturno.

lunes, 28 de febrero de 2005

Rubén laboral

Por fin me decidí a ponerme a trabajar. Actualmente estoy como becario en Amplía como desarollador en C++. Lo malo es que mi escaso tiempo libre entre semana ha dejado de existir por completo debido a que lo combino con ir a la universidad por la tarde, así que todos mis proyectos personales han visto reducida su velocidad de desarrollo considerablemente (más bien, se han parado). Espero que cuando lleve más tiempo consiga encontrar más huecos.

Por otro lado, he vuelto a ponerme con Blender, el programa de modelado y animación libre por excelencia. De nuevo, he tenido que aprender a desenvolverme con la interfaz de uso menos intuitiva que se haya podido diseñar. Sin embargo, el aprender a manejarlo vale la pena. Lo que se puede llegar a hacer en conjunción con el motor de render con iluminación global YafRay es bastante aceptable, tanto que he visto imágenes de una calidad que no he llegado a alcanzar con la combinación 3dsmax+Brazil (eso no quiere decir que en la galería de Brazil no las haya, pero echale un vistazo a las de YafRay). Si no lo dejo por falta de tiempo, me comprometo a escribir un tutorial sobre su manejo.

Me voy a dormir.

jueves, 27 de enero de 2005

El CVS ya me funciona, e IO-3D 0.1.1

Bueno, después de tanto tiempo, ya he conseguido que el servidor CVS me deje hacer un commit. El origen del problema fue que hubo que cambiar el host. Yo lo actualicé en el cuadro de login, con lo cual me dejaba hacerlo sin problemas, pero olvidé que había que ir directorio por directorio y cambiarlo en cada fichero CVS\Root. Con ésto, ya está funcionando sin problemas.

Respecto a IO-3D, ya está subida la versión 0.1.1, con proyección a memoria de los archivos. Se trata del tag IO3D_0-1-1 en el repositorio, que como siempre puede accederse aqui: IO-3D, repositorio.

Un saludo.

jueves, 20 de enero de 2005

ODE (aka Open Dynamics Engine)

Estaba vagando hoy por Internet cuando me ha venido a la cabeza un tema que siempre he tenido muy descuidado: la física en la simulaciones por ordenador. Tras mucho meditarlo (tal vez no tanto), decidí descargar y aprender a manejar ODE, un motor de física de cuerpos rígidos, con diversas opciones de articulación, uso intuitivo y detección de colisiones incorporada.

Antes de descargarlo me estuve mirando un poco el manual, y los juegos en los que se ha utilizado. Todo ello me llenó de ganas de probarlo, así que corrí raudo a descargarlo y descomprimirlo, llevandome una desagradable sorpresa...

No hay binarios, sólo código.

De eso se trata, está bajo licencia GNU/LGPL y BSD, ¿no? Pues a mi no me gusta no tener los binarios, el "compile it yourself". Viendo Linux, en donde todo lo he de instalar así, no me gusta. Debo de ser la persona menos afortunada que existe con este sistema, ya que no hay vez que haya ejecutado un configure previo al make en la que no me haya salido un error indicando que debo actualizar algo, y ese algo implica algo más, que implica a lo primero. Al final, la mitad del sistema no funciona, y todo para probar la última versión 0.2.543.lo_que_sea_pre_alfa de cualquier cosa (que además, van y la llaman Stable).

Volviendo a ODE, como decía, sólo estaba el código fuente. ¿Cierto? ¡No! También estaba el configure y los makefiles propios para gcc, mingw y cygwin. Pero, ¿qué es lo que vieron mis ojos, casi con lágrimas de alegría? ¡Una carpeta llamada vc6! Raudo, entré en ella. Allí estaban los archivos de proyecto necesarios para construir un dll con el motor, o un lib estático. También para construir todos los ejemplos. Lo abrí con el VS7 y le di a Generar Solución. En pocos segundos tenía todos los binarios construidos, y todo funcionando. Errores: 0. Peticiones de actualización de librerías: 0.

Ojalá todos los proyectos que sólo distribuyen el código fuente me fueran así de bien. Claro, que éste es el único de este estilo que he probado en Windows.

He observado que en muchos proyectos de este estilo reusan dar soporte al compilador de Microsoft, aun siendo el más utilizado a nivel profesional. Allá ellos, yo me quedo con ODE.

Mis más sinceras felicitaciones al autor.


PD: El WinCVS sigue sin dejarme hacer un commit, así que sigo sin poder subir la última versión de IO-3D. Según Pablo, el que se entiende con los chanchullos de redes, comunicaciones y Linux, la configuración del servidor es la misma y tengo los permisos adecuados, así que la culpa debe ser mía. ¿Qué habré tocado yo? Si sólo instalé el SP2 del WinXP Pro...

miércoles, 12 de enero de 2005

Los increíbles efectos de "Los Increíbles"

El otro día vi Los Increíbles y quedé maravillado por dos cosas: el pelo y la vegetación.

La simulación del pelo de los personajes está muy conseguida. El movimiento es muy real, los personajes se despeinan, los matices y brillo anisotrópico perfectos, las colisiones, etc. Excepto cuando aparecen en el agua, que da la sensación de plástico. Me trae ésto a la memoria la película Final Fantasy, en el que el pelo de los personajes era rígido y permanecía inalterable (si lo hubieran hecho con actores habrían tenido que emplear toneladas de laca). Desde luego, la simulación de pelo ha evolucionado mucho estos años.

Por otro lado está la veetación, principalmente la de la isla en la que apresan a Mr. Increíble. Qué decir, aparte de que es una maravilla. No alcanzo a apreciar con las escenas en movimiento si es toda geometría, o el follaje está conseguido con texturas con mapas de opacidad, pero sea lo que sea está muy bien. Por cierto, que el agua está mejor que la que aparece en Sky Captain (aparece en una escena con un mapa de desplazamiento de lástima), y eso que en esta última se busca imagen realista.

Por último, pongo el nick que se ha puesto un amigo en el messenger, que ocasionó que me estuviera un rato riendo:
In the land of the X-eyed, X+1-eyed is king; where x=0

He dicho.

martes, 4 de enero de 2005

Feliz año nuevo y otras novedades

Como diría Ramón García (casi obligado por la Obregón), ¡Feliz 2005!

IO-3D

A parte de esa pequeña novedad (al fin y al cabo, todos los años tenemos cambio de año) la versión 0.1.1 de IO-3D está casi lista. En los últimos tiempos no le he dedicado mucho, pero parece que vuelve a marchar. Ya me he olvidado de la reproducción de MIDIs en el PocketPC, o al menos por el momento, ya que no conseguí reproducir ni uno usando el API de bajo nivel de Windows Mobile 2003 (pero de bajo, bajo nivel, que no hay ni mci, un poco más y te tienes que dar con las interrupciones). Si veo al final que voy sobrado de tiempo (permitidme que me ría) me pondré de nuevo a ello.

Si no hay MIDI, ¿qué hay en 0.1.1? Bien, visto el tiempo de carga que había (3-5 minutos para cargar 100 Kb) decidí reimplementar parte de la clase File, para que se proyectara en memoria el fichero entero con una sola lectura, y así poder leer byte a byte todas las veces que quisiera. Por supuesto, sin cambiar la interfaz pública de la clase, simplemente añadiendo un nuevo flag a los modos de apertura (no quería que dejara de funcionar de golpe todo el código que accede a ficheros). Con ésto, el tiempo de carga completo de la aplicación ha bajado a unos 2 segundos (yup!).

Por otro lado, he arreglado un fallo bastante gordote en el código de sonido. Para resumir, digamos que si me daba por reproducir una sola vez un único sonido antes de nada, al acabar obteniamos una violación de acceso. Ya no es problema.

Por último el CVS no me deja hacer un commit, así que la actualización no está disponible para descargar, a ver si hablo con el administrador.

Para la siguiente versión habrá sistema de menús (tengo planeado algo bastante vistoso, pero ojo, recordad que rasterizo por software, e incluso mis funciones pueden ser lentas :P).

Un saludo.