Ir al contenido principal

Entradas

Mostrando entradas de noviembre, 2006

Irrlicht 1.2

Ha sido liberada la versión 1.2 de este motor gráfico, acompañada de la 0.6 de IrrEdit. Herramienta ésta que ha dado mucho de qué hablar en los foros de Irrlicht, ya que algunos se preguntan por qué se invierte tiempo en esto en vez de dedicarlo a mejorar el motor que en muchos aspectos aún es limitado. Por ejemplo, desde hace tiempo se viene reclamando que se diseñe (e implemente) un formato de modelos y escenarios propio con sus correspondientes exportadores apra las principales aplicacioens de modelado. Irrlicht maneja de forma nativa diversos formatos, pero ninguno de ellos del todo bien.
Me resulta curioso que esta noticia me llegó vía Gamedev.net, que no se caracteriza por su abundancia de noticias sobre software libre. Un punto a favor de Irrlicht.

Mi primera aplicacion con Ogre 3d

Tenía pendiente hacer algo con este motor gráfico, para ver qué tal me iba. Invertí en eso toda la mañana de ayer domingo y nada, tal como me esperaba apenas avancé un poco empezaron las excepciones de todo tipo y tuve que dejarlo por imposible.
El gran problema que veo en el concepto de Ogre es que solamente tienes control de la aplicación cuando el motor te deja. Eso es, antes de iniciar un cuadro o al terminar el cuadro. También cuando estás haciendo entrada por cola (buffered input). Al menos eso es lo que me ha parecido en unas pocas horas de uso. Soy partidario de un enfoque radicalmente opuesto, preferiría llamar al motor solo para que se encargase de refrescar la pantalla y que el control esté en mi manos. Así sé en todo momento dónde estoy parado.
Lo cual no quita que considere a Ogre como el mejor motor LGPL que exista en la actualidad. Pero bueno, hay montones de mujeres bellísimas por ahí y ninguna es mi novia (aún), ¿qué se le va a hacer?

Blogs

Al fin mi amigo Edwin se ha decidido a meterse en esto de los blogs. Esperemos que este intento sea el definitivo.
Y hablando de eso, me han confirmado la inscripción en el premio 20Blogs, de 20minutos.es. Me he inscrito en las categorías de Mejor blog de juegos y Mejor blog latinoamericano. Por supuesto que no espero ganar nada, el año pasado blogs mejores que éste quedaron por debajo de otros que muy poco o nada tenían que ver con juegos pero que recurrieron a todo tipo de artimañas. Pero un poco de competencia nunca viene mal.

Código de enlace

Voy a hacer un aparte para hablar un poco sobre la herramienta que uso para generar el código de enlace entre el intérprete Lua embebido y la aplicación que lo hospeda, en este caso el server.
En mi caso utilizo Lua porque es un lenguaje muy sencillo, medio Pascal, medio C, rápido y con las funcionalidades que necesito. Ahora bien, generar el código necesario para hacer accesibles las clases de C++ a los scripts es una tarea larga, tediosa y susceptible a errores de todo tipo.
Aquí entran los generadores de código, como Swig. Sin embargo, Swig genera código para proporcionar al script Lua la definición de una clase. Si quisiéramos enviar valores, por ejemplo, de dos entidades, habría que usar algún truco extra.
Por suerte hay varias variantes en el caso de Lua, y de ellas, mi preferida es tolua++. Este programita toma un encabezado limpio con algunas directivas específicas y genera el código de enlace que no solo proporciona a Lua la estructura de la clase, sino también funciones para en…

Lazo principal del server

En sus inicios el lazo principal del server era más o menos así:

while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
lo mismo para los NPCs
}

Tal esquema, en principio, no es tan malo. Bajo una situación de 1700 entidades NPC consumía un 15-30% de CPU como ya mencioné en una anotación anterior. Sin embargo, una solución más óptima y sencilla de implementear es la siguiente:

while
{
chequeo de eventos (incluye entrada de paquetes)
revisar la lista de jugadores y ejecutar refrescado si no han sido tocados en 2 segundos
revisar solo un NPC e incrementar el iterator para la proxima vuelta del lazo
}

En este caso sólo se verifica/ejecuta una entidad por cada iteración del ciclo principal. La única preocupación es que el servidor pueda garantizar que todas las entidades (NPCs o jugadores) se reciban su refrescado cada dos segundos o cualquiera que sea el intervalo.
Sin embargo, no he podido hacer los m…

Propuesta

Esto ni yo mismo me lo creo. Una amiga me ha propuesto escribir un guión para una serie de televisión, cosa que por supuesto nunca he hecho ni tengo idea de cómo se hace. La serie sería un anime en 3D, producida en unos estudios que se están formando en Holguín, cerca (relativamente) de aquí. Las únicas condiciones son que sea algo fantástico pero sin caer en lo de siempre. En un principio se pedía que fuera ambientada en las civilizaciones precolombinas o algo así, que se apartara de la visión americana/europea/japonesa pero luego de romperme la cabeza decidí que me era mucho más fácil encontrar una idea original en un mundo creado por mí que lograr hacer encajar una historia fantástica en la era de los aztecas. Tampoco es que las ideas originales estén a patadas por ahí, pero ya veré cómo me las agencio. Eso en caso de que logre salir adelante con esta locura.
Y siguiendo esta misma línea, estén atentos proque pronto tendré una sorpresa por aquí.

SWIG 1.3.30

Ha sido liberada la versión 1.3.30 (rama de desarrollo) de SWIG, una herramienta de desarrollo que genera a partir de un fichero de encabezado de C/C++ el código necesario para hacer que funciones y variables de C/C++ estén disponibles en otros lenguajes.
Nuevo en esta versión: soporte para un nuevo lenguaje, R; soporte para Python 2.5; soporte para directores en C# y otras muchas cosas.

Double Fusion y Rebellion llevan la publicidad a los juegos

Pues mucho había tardado en llegar, pero ya lo tenemos. Recuerdo que hace un año aproximadamente Funcom realizó una encuesta para estudiar el grado de aceptación por parte de los usuarios de publicidad dentro de Anarchy Online.
Según este artículo de Gamasutra, Double Fusion se ha asociado con la compañía Rival Interactive con base en Virginia y Rebellion del Reino Unido para colocar ingame ads en PRISM, un juego creado para la Guardia Nacional por estos dos desarrolladores. Las opciones son variadas, incluyendo objetos 3D interactivos, videos, ads interactivos con posibilidad de compra en tiempo real.
Es cuestión de tiempo apra que en medio de cualquier juego nos interrumpa un mercader vendiéndonos, además de armaduras y espadas, objetos y servicios del mundo real.

Transparencias

Al fin logré solucionar el problema con el blend de OpenGL. Antes el último color utilizado se mezclaba con la textura e incluso rellenaba las áreas que supuestamente debían ser transparentes. La solución es simple: solo tenía que habilitar blend con glEnable(GL_BLEND) pero no definir ninguna función de mezclado. No sé si será la forma correcta pero al menos me funciona.
Aún me quedan por resolver dos problemas muy enojosos, el renderizado de fuentes y una falla de segmentación al crear texturas a partir de una SDL_Surface, que por alguna razón sólo se produce cuando compilo con VC o gcc 4. En gcc 3 el siguiente código:

tmp=IMG_Load("default/dialog_back.png");
glBindTexture(GL_TEXTURE_2D, dialog_back); // 2d texture (x and y size)

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tmp->w, tmp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, tmp->pixels);


produce un…

De regreso de las vacaciones

Por desgracia los días de vagancia terminaron. Tuve algunas jornadas de trabajo bastante provechosas, principalmente en el server. He concluido un sistema básico de scripting usando lua y tolua++ para generar el código de enlace entre C++ y el intérprete incrustado. Incluso hice algunas pruebas de carga con 1700 entidades, cada una ejecutando un script con un ciclo y operaciones matemáticas. Antes de optimizar utilizaba entre un 15 y un 30% del CPU. Luego de la optimización bajó bastante, solo me preocupa que con demasiadas entidades y jugadores el server no pueda garantizar que cada una sea atendida cada 2 segundos. Lo que aún no he podido optimizar es el procesado de los jugadores.
También encontré un problema en el código de login, pero persiste otro que ocasiona que las cadenas se envíen con caracteres extra y por lo tanto el server rechaza la solicitud de login.

XFCE 4.4 RC2

Hago un alto en mis vacaciones para informarme un p0oco de cómo va el mundo y me encuentro que ayer se liberó el segundo RC de XFCE 4.4, acompañado de libexo 0.3.1.12 rc2 y Thunar 0.5. Pueden consultar el changelog aquí. Los afortunados usuarios de Slackware y Suse ya pueden disfrutar de los correspondientes paquetes.