miércoles, 16 de marzo de 2022

Demos, Rust, Raytracing y Rasterizer

Seis años después, me he mudado, he cambiado de trabajo y las niñas están grandes y ya no necesitan tanta atención. Vuelvo a programar por diversión, igual que antes y retomo este blog. 

Desde hace unos años, todas las navidades hago una pequeña demo para mí y mis amigos. En el 2018 usé Godot, en 2019 fue Unreal, en 2020 Godot otra vez y e 2021 usé la librería raylib. Estas navidades que vienen voy a intentar algo loco. Quiero aprender rust de una vez y desde hace mucho tiempo quequiero intentar hacer un pequeño motor 3D.

Gracias a Humble Bundle, tengo el libro "Computer Graphics from Scratch", que enseña a programar un una aplicación de ray-tracing y otra de rasterización . Mi idea es implementar estas dos ideas en rust.

Pero antes, tengo que coger soltura en rust y para eso, estoy leyendo y repitiendo los ejemplos del libro "The Rust Programming Language". Acabo de empezar el capítulo sobre la posesión ("ownership") de la memoria y de momento lo entiendo bien. Ya veremos. 

viernes, 15 de julio de 2016

Sigo vivo.

La vida, mi vida, es cambio.

Han cambiado muchas cosas desde la última vez que escribí algo por aquí y hay muchas más que van a cambiar.

Laboralmente, me he alejado de la administración de sistemas para meterme de lleno en el mundo Hadoop. Además, me he desvinculado de la producción para adentrarme en el diseño y arquitectura de sistemas Big Data.

Para mi trabajo, estoy aprendiendo Python y Java para poder programar con el framework Apache Spark. Y para mis jueguecillos, esto del Rust tiene muy buena pinta.

Otra cosa interesante que he visto es que el microprocesador MOS 6502 (la CPU del Commodore 64) sigue fabricándose hoy en día. Estoy planteándome hacer mi propio ordenador.

Y por último y no menos importante, me voy a cambiar de casa. La venta de mi actual vivienda y la compra de la que queremos va a ocuparnos bastante tiempo a mí y a mi familia.

Yo creo que para diciembre podré empezar de nuevo a hacer cosas interesantes.

martes, 30 de diciembre de 2014

Volveré.

Lo prometo.
Tengo en la cabeza un par de mini-proyectos para mis hijas. La nueva librería SDL tiene buena pinta.
Y además estoy aprendiendo un poco de Java.

sábado, 17 de agosto de 2013

¿Quién tiene el pez?

    Muchas cosas pasando en la vida. Y la vida obliga a abandonar unas cosas por otras. Por ejemplo, "The Aberrant", "Teclas Divertidas" para Mac, "Formula Retro" han sido abandonados y ahora me dedico a mi familia.
   
    Pero de vez en cuando no puedo resistir hacer algo. Lo que sea. Sólo por refrescar un poco mis pocas habilidades de programación.

    Volviendo a visitar la web de mi antiguo compañero Ximito, me he encotnrado con esta adaptación del acertijo atribuido a Einstein: http://www.2ddepot.com/games/whoownsthefish/ Intenté resolverlo, pero me rendí pronto.


    Así que pensé que tenia bajo mis dedos una máquina capaz de probar millones de combinaciones en segundos y que había que utilizarla. El resultado es este proyecto que he completado en unas horas. El método es una simple búsqueda de todas las permutaciones posibles por fuerza bruta.

    Aquí está el código fuente: http://sourceforge.net/projects/whoownsthefish/files/latest/download

miércoles, 8 de agosto de 2012

Tutorial: Incluir el framework libSDL en tu app con XCode 4

Nuestro objetivo es incluir el framework con la librería SDL en la aplicación para no tener que obligar al usuario a instalarlo en /Library/Frameworks. De paso, explico cómo crear desde cero una aplicacion SDL en Mac.
Primero creamos una nueva aplicación Cocoa:
Vamos a llamar a nuestra aplicación "pruebaSDL2".
En este momento tenemos una aplicación COCOA Normal y corriente. Primero copiamos el framework de SDL al directorio que contiene nuestro proyecto. Simplemente arrastramos el framework con el ratón.
La aplicacion sólo tiene un target. Buscamos la sección de enlace con los frameworks y añadimos uno más.
Seleccionamos el framework que acabamos de copiar en el directorio de nuestro proyecto.
Quedando de esta manera.
Si ahora compilamos e intentamos ejecutar nuestra aplicación, obtenemos este error en la ejecución. El cargador de librerías de MacOs no es capaz de encontrar la librería SDL contra la que hemos enlazado.


Volvemos a buscar nuestro único target y entramos en la sección de fases de construcción "Build Phases". Añadimos una fase más de copia de ficheros. Cambiamos el destino de la copia a "Frameworks" y añadimos nuestro framework de SDL.

Ahora especificamos el camino que debe buscar el cargador de librerías dinámicas en tiempo de ejecución. Buscando un poco en Google, encontré este post, que lleva a este otro enlace que explican bastante bien lo que hacemos en este paso. Resumiendo, lo que hacemos es poner el valor "@loader_path/../Frameworks" en la variable @rpath.

Ahora vamos a sustituir el código por defecto por el código necesario para crear una ventana SDL. Primero borramos del proyecto los ficheros que crean la ventana Cocoa.
Y a continuación añadimos los ficheros del directorio "devel-lite" que viene con el framework que nos bajamos de la pagina oficial.
Nos aseguramos de marcar "Copy to destination..." y de que añadimos los ficheros al target del proyecto.
Creamos un nuevo "main.c" con la opción "New File..." del menú "File" y eligiendo el tipo "C file". En este fichero programamos nuestra función main. Yo he copiado y pegado el código de este ejemplo que he encontrado.
Al intentar compilar veremos que tenemos un par de errores por que no encontramos el fichero "SDL.h" en los includes.
Yo me he limitado a cambiarlos a "SDL/SDL.h".
Ya tenemos nuestro ejemplo SDL funcionando con la librería SDL incluida en el directorio app que genera la compilación.

martes, 7 de agosto de 2012

Teclas Divertidas para Mac.

Me he propuesto portar a Mac Os X mi Teclas divertidas. De momento he instalado el XCode y he conseguido compilar una pequeña app con un ejemplo y el framework SDL incluido. Pronto más detalles.

domingo, 14 de febrero de 2010

jueves, 21 de enero de 2010

Nuevo proyecto.


Desde que terminé Teclas Divertidas, he empezado Formula Retro. Un jueguecillo de coches. Estoy utilizando Irrlicht para los gráficos y Mikmod para el sonido. Mi idea es pasarlo a alguna plataforma comercial e intentar venderlo.

miércoles, 21 de octubre de 2009

jueves, 15 de octubre de 2009

miércoles, 30 de septiembre de 2009

lunes, 24 de agosto de 2009

jueves, 20 de agosto de 2009

Polimorfismo.

En C++, a un puntero declarado como una clase A se le puede asignar una instancia de una clase B si éste es hijo de A.
Utilizo esta técnica para las escenas de mi nuevo proyecto, de tal forma que dentro un bucle principal que se encarga del refresco de la pantalla continuamente, se llama a un método de una clase instanciada en un puntero. Este puntero esta declarado como tipo "ClaseEscena" y tiene un método virtual que se encarga de actualizar los sprites. Sin embargo, en cada momento este puntero tiene una instancia de una clase hija de la "ClaseEscena", que implementa el método virtual de acuerdo con la escena de ese momento. Así, con un mismo bucle principal, tengo diferentes animaciones según convenga al juego.

viernes, 14 de agosto de 2009

Retomamos aficiones y dibujamos un poquito.


Hace mucho que no escribo nada aquí, pero sigo vivo. Vuelvo a tener tiempo libre, por lo que me he puesto a programar otra vez y he retomado este blog que, según las estadísticas, no lee nadie desde hace al menos 5 meses. Más o menos el tiempo que he estado ocupado.

¡Volvemos a programar! Esta vez me propongo un reto un poco más fácil. Imitar un viejo juego de Spectrum y Commodore 64 que se llamaba "Teclas Divertidas", aunque The Aberrant no está olvidado. Ya he creado un esqueleto con un bucle principal y tengo que crear un sistema de escenas y gestión de animaciones y respuesta a eventos.

De momento, pongo unas nubes que irán en la presentación del juego.

Prueba desde Facebook.

Estoy escribiendo este post desde una aplicación de Facebook para probar.

domingo, 8 de marzo de 2009

De vuelta en casa y curvas.

Ahora vivo en mi propia casa. Una cosa en la lista menos :)

Desde hace mucho tiempo siempre quise hacer una cosa en mis animaciones: curvas. Siempre he querido hacer que un sprite se mueva como en las presentaciones de los juegos de CAPCOM o SNK. La foto de un luchador haciendo pose que viene desde fuera de la pantalla a mucha velocidad y suavemente se coloca en la en su posición.
Para conseguier este efecto primero pensé en utilizar tablas de senos y cosenos para añadir un modificador a una funcion lineal simple. Pero siempre que lo intenté implementar, ni siquiera conseguí compilar.
Desde hace un tiempo tengo este libro de matemáticas para juegos. En uno de los capítulos, tras unas sesudas demostraciones matemáticas, enseña las fórmulas que describen cómo hallar un vector que interpola otros cuatro que describen el punto inicial, final y dos modificadores. En otras palabras, curvas Hermite y Beizer:


claseVector2D curvaHermite(Uint32 tInicial, Uint32 tFinal, Uint32 tAhora, claseVector2D p1, claseVector2D p2, claseVector2D t1, claseVector2D t2){
claseVector2D H(0,0);
if ((tAhora > tFinal)||(tAhora < tInicial)) return H;
double t=(double)(tAhora-tInicial)/(double)(tFinal-tInicial); // t es un valor entre 0 y 1
//printf("%f , %d, %d, %d\n",t,tInicial,tFinal,tAhora); // debug
H=((1-(3*t*t)+(2*t*t*t))*p1)+(((t*t)*(3-2*t))*p2)+(t*((t-1)*(t-1))*t1)+(((t*t)*(t-1))*t2);
return H;
}

claseVector2D curvaBeizer(Uint32 tInicial, Uint32 tFinal, Uint32 tAhora, claseVector2D p0, claseVector2D p3, claseVector2D p1, claseVector2D p2){
claseVector2D B(0,0);
if ((tAhora > tFinal)||(tAhora < tInicial)) return B;
double t=(double)(tAhora-tInicial)/(double)(tFinal-tInicial); // t es un valor entre 0 y 1
B=(((1-t)*(1-t)*(1-t))*p0)+(((3*t)*((1-t)*(1-t)))*p1)+(((3*(t*t))*(1-t))*p2)+((t*t*t)*p3); // se puede optimizar esta formula calculando (1-t) y pasandolo a una variable
return B;
}


Simple y eficiente. En otro post explico la implementación de "claseVector2D".

sábado, 7 de febrero de 2009

Sensación extraña

Volver a ver mi código después de tantos meses, es raro. En general lo entiendo bien, pero parece que algunas cosas son demasiado complicadas para lo que hacen.

Ahora que estoy en paro, tengo más tiempo para cacharrear y he descubierto esta pequeña joyita: irrlicht. He conseguido mover un cubo por una pista hecha en blender como si fuera un coche.

Creo que voy a volver con el proyecto e incluso iniciar otro para no terminar ninguno de los dos :)

miércoles, 19 de noviembre de 2008

Eh! que me bloquean...

Tengo tan olvidada esta página, que google cree que soy "spam". Bueno, señores de google, no se preocupen. Respondí a la solicitud y al "captcha" de sonido (por que la imagen era imposible de descifrar).
Este proyecto esta en parada técnica. Ahora mismo estoy buscando trabajo y no puedo estar con esto. Pero volveré.