Soporte de scripts

Bueno, en estos días el proyecto no ha estado muy activo. Alguien se ofreció para hacer el terrain renderer, pero no ha dado más señales de vida. Y he estado ocupado retocando un relato qeu escribí, para enviarlo a revisar al taller literario. Si sale algo que sirva lo liberaré bajo licencia Creative Commons.
Pero hoy le eché nuevamente un vistazo y pensé que ya que no se me ocurría nada, era hora de volver a instalar Lua y agregar soporte de scripting. Aún no lo he probado y solo agregué unas líneas. Espero incrementarlo pronto. Por otra parte, tal vez teng auna solución para el terrain renderer, y es posible que pase a triangle strips.

Reunión del Hospitality Club

Ayer por la tarde nos reuniomos los miembros del Hospitality Club en Santiago de Cuba. Kiell, de Alemania, Pradel y Franklin, de Haití, Sang (no sé como se escribe exactamente el nombre) y Suzanne de China, Lianne, Otoniel, yoandro, Leo y yo, de Cuba.
Compartimos una buena tarde, ahora tenemos planificado una sesión de comida china el próximo sábado. A mí me toca buscar el aceite y la salsa china.

Xbox e Internet Explorer

No suelo hablar de consolas porque no tengo, ni podré tener una. Pero un comentario en un post de Javi es bastante curioso. Rafa se pregunta si IE estará incluido en el sistema operativo de las Xbox. En definitiva, es una versión recortada de Windows.
Y bien, esto es todo lo que pienso decir sobre consolas por ahora.

xorg 6.8.99

Esta es la versión RC2 del xorg, que incluye soporte para los chipsets r300 de ATI (superiores a la Radeon 9200). No sé qué mala idea me dio de compilarlo y probarlo cuando instalé Centos. El caso es que me he encontrado con los problemas más raros que he visto en mi vida. Para empezar cuando estoy en modo gráfico no puedo cambiar a las consolas texto con Ctrl+Alt+Fkey. Y desde hace dos días para acá, solo puedo usar Xfce o KDE como root, aunque el lunes probé el Xfce en el runlevel 5 como usuario normal.
Por supuesto que cualquier poco deseo que tenía de recompilar xorg modular en mi futura instalación de Gentoo en casa se me han quitado por completo, creo que me iré por la variante del driver propietario de ATI y soportaré los fallos que tenga.

Convirtiendo de click a coordenadas 3d

Una de las cosas que más me preocupaban en todo este trabajo de medio hacer el motor gráfico era convertir las coordenadas del mouse a las coordenadas 3d de Open GL. Pregunté en todas partes, pero nadie me daba una respuesta precisa, sólo que había que usar gluUnproject y dependía de la matriz de proyección. Llegué a pensar que hacía falta toda una serie de cálculos complejos para eso.
Sin embargo, la respuesta estaba bien cerca en NeHe y es bastante sencilla.
Esto resuelve el problema en caso que tenga un motor pseudo isométrico, sin embargo para la vista planeada en el proyecto no me sirve, pues lo que necesito averiguar es si el rayo trazado desde el punto en pantalla atraviesa el mesh de un personaje u objeto. Podría usarlo de todas formas, pero el click entonces se comportaría raro pues deberíamos clickear sobre los pies del personaje para seleccionarlo.

Mundodisco

Aunque este blog no es exactamente sobre libros y soy una completa nulidad en materia de crítica literaria, de vez en cuando dejo caer alguna opinión sobre lo que leo. Hace un tiempo mencioné que había leído algunos de los libros de la serie de Mundodisco, gracias a que podía meterlos en mi pda.
Pues bien, leí 8 de ellos de un tirón. No voy a entrar en detalles, pero si no los has leído échales un vistazo. Terry Pratchet hace un buen trabajo y hacía un buen tiempo que no me reía tanto. La acción se mueve rápido, nada de largas parrafadas inútiles y sin embargo está todo lo que tiene que esta para comprender este singular mundo que viaja por el universo a lomos de cuatro elefantes montados en la gran tortuga A'Tuin.
Ahora estoy leyendo La rueda del tiempo, pero por el momento no le cojo el gusto. Si Orson Scott Card tiene el don de llenar montones de páginas con profundos debates filosóficos, Robert Jordan tiene el de alargar sus libros enriqueciendo las descripciones con detalles tales como que Pepe se sentó en su mullido butacón de patas torneadas, sacudió la boquilla de la pipa de hueso herencia de su abuelo y el gordo gato amarillo saltó y se acomodó sobre sus piernas ronroneando. Cuando eres un escritor de renombre y vendes, los editores te dejan pasar esas nimiedades. Pero si lo hago yo, pues me señalan que el gato no aporta nada a la historia y de paso, tampoco las patas del mullido butacón. Supongo que con algo había que llenar 19 libros, pero hombre, no hacía falta todo un libro para simplemente introducir la historia. Sí, sé que soy un envidioso, ¿qué se le va a hacer?

Adiós a Fedora

Hoy tenía planificado migrar de Fedora Core 2 a CentOS 4.2. Luego de una larga lucha con el orden de los discos (tengo un SCSI y un IDE), logré arrancar una instalación mínima.
Ahora estoy batallando con la difícil tarea de rearmar el sistema a partir de esa instlación mínima, el mar de dependencias ya me tiene loco y el yum no funciona. El colmo es que para instalar dovecot tuve que instalar también mysql. Esa es una de las causas por la que me gusta mucho más gentoo.
Y aún me queda el jabber, pero eso será el lunes.

Formato de mapas

En estos días me he detenido para pensar en el diseño del formato de los mapas. Necesito (por ahora) un formato que permita especificar alturas como un heightmap, pero al mismo tiempo seguir siendo orientado a tiles. Como usaré XML debía optimizar dentro de lo posible evitar incluir la definición de tiles o ubicaciones vacíos, por lo que opté por una representación sparse (dispersa). O sea, el mapa incluye sólo las definiciones de los puntos que difieren del layout base.
El mapa xml sería más o menos así:
< x="100" y="110">Testing map< /map>
< -- Base texture -->
< id="1">marsh.jpg< /baset>
< id="2">rocky.jpg
<>
< x="10" y="12" h="4">
< x="10" y="12" texture="2">
< /tiles>
Y generaría una matriz final, que no sería sparse, así:
(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0)
(1,0),(1,0),(1,0),(2,4),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0)
(1,0),(1,0),(1,0),(2,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0)
(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0),(1,0)
****
En el momento de la carga se precalcularía la geometría real del mapa. Lo que intento averiguar ahora es si puedo dibujar todo el mapa con un solo QUAD_STRIP. De no ser así tendría que renderizar cada fila como un QUAD_STRIP con el consiguiente desperdicio de vértices vecinos redibujados, o cambiar la geometría para utilizar un TRIANGLE_STRIP.

Tags: ,

¡Windows Vista soportará enlaces simbólicos!

¡Qué gran novedad! Luego de muchos años de existir en los sistemas de archivos Unix, al fin NTFS incorporará enlaces simbólicos. De los de verdad, no ese invento malojero que son los accesos directos, como bien nos explican en la anotación que enlazo. Lo que no detallan es si tendremos dos categorías: duros y blandos. Para los no familiarizados, un enlace blando es solo un puntero al nombre del objeto. Si borras el objeto el enlace blando se queda perdido. Un enlace duro es un puntero al objeto en sí. Si borras un objeto, y existe un enlace duro a él, el objeto no desaparece pues en la tabla de archivos queda otro apuntador a esos datos (y si no es así que me corrija un profesor de Sistemas Operativos).

¿A dónde fue Google Analytics?

Como todo el mundo, me suscribí hace tre días al nuevo servicio Google Analytics. El primer día no funcionó. El segundo más o menos, pero sin estadísticas. Ayer vi que tenía algunas. Hoy resulta que al intentar acceder me redirige hacia la página de búsqueda.
Realmente Analytics ha arrancado con el pie izquierdo.

Modelos animados

Hoy finalmente me decidí a echar un vistazo a los tutoriales de archivos 3d con carga de animaciones incluida. Luego de revisar el tutorial de DigiBen (en gametutorials.com, que según veo hay que pagarlo ahora) y la implementación hecha por Gabor para Scourge (basada en ese mismo tutorial), me decidí finalmente por el primero. Tuve que hacer un trabajo extra porque el código no era portable, por suerte ya lo es y lo que más me preocupaba, que era el sistema de temporizado de los cuadros funciona, o al menos eso parece. Ahora estoy en proceso de implementar la carga de texturas.
De paso, aprovecho para recomendarles que sigan el trabajo de Dmitri, creo que va muy bien aunque modestamente considera que su motor aún es débil, yo le veo mucho potencial.

Tags: ,

Neverwinter Nights 2

Vía Gamespot recibí este artículo sobre la próxima versión de este clásico del rol, ahora desarrollado por Obsidian. Las imágenes del motor desarrollado por la compañía para esta entrega se ven interesantes, aunque por el momento no se aprecian innovaciones revolucionarias. Que dicho sea de paso, no son necesarias, porque este título vende por sí solo.

Tags: ,

Bienvenidos a la era del xml

Hace dos días me di a la tarea de implementar el soporte para xml en el proyecto. Para ello escogí TinyXml, que es muy fácil de integrar pues como no es una biblioteca sólo tienes que incluir algunos archivos y ya está.
De momento, la configuración del cliente (servidor al que se conecta y resolución de pantalla) se lee desde un xml. El archivo en cuestión es el siguiente:


< ip="192.168.1.1">< /server>
< x="800" y="600" bpp="32">Screen resolution< /screen>

Y se parsea con un código tan sencillo como este:

TiXmlDocument conf;
if (!conf.LoadFile("metalclient.xml")) {
//hubo algun problema
printf("Error loading config file.\n");
}
TiXmlHandle chandle(&conf);
TiXmlElement *cvalue=chandle.FirstChild("screen").Element();
if (cvalue->QueryIntAttribute("x",&Width)!=TIXML_SUCCESS) {
printf("Problem loading config value screen, check config file.\n");
} else printf("Width %i",Width);
if (cvalue->QueryIntAttribute("y",&Height)!=TIXML_SUCCESS) {
printf("Problem loading config value screen, check config file.\n");
} else printf("Height %i",Height);
cvalue=chandle.FirstChild("server").Element();
if (cvalue) {
//tenemos un valor
printf("server %s ip es %s\n",cvalue->GetText(), cvalue->Attribute("ip"));
}

Sencillo ¿verdad?

Tags: ,