Google
 

viernes, septiembre 15, 2006

Quest3D 3.5 review

Quest3D es un motor para videojuegos bastante completo con la peculiaridad de que el lenguaje usado es un lenguaje gráfico basado en canales. Un canal es una caja con varias entradas y una salida, como si de una función en C se tratara. Para programar no hay más que ir uniendo los diferentes canales y definir sus propiedades. Al principio costó acostumbrarme, pues no se parecía a nada de lo que había usado antes, pero contra más lo usas más te va maravillando su sencillez para hacer cosas complicadas. Realmente vale la pena de aprender.

Por calidad de gráficos uno no se puede quejar ya que tiene todo lo que un gran motor gráfico ha de poseer, desde algo tan básico como pixels shaders hasta HDR. Usa el motor de físicas ODE y un sencillo motor de sonido 3d (tal vez su punto más flojo). Simulación de agua, ropas, plugin para la web, lightmaps, LUA, etc...

Como queja tenemos el precio, su licencia básica es de 999€ aunque se puede adquirir por 199$ aunque con bastantes limitaciones. El exportador para 3ds max se podría mejorar pero cumple su función perfectamente. Como dije antes el motor de sonido adolece de ser demasiado simple pero uno siempre puede agregar funcionalidades al lenguaje y crear un wrapper para OpenAL usando el SDK para C++.

Os podéis bajar la demo pero si lo que os interesa es ver como funciona os podeis bajar unos video tutoriales o incluso unos videos de demostración.

Solo añadir que es el motor que se está usando para el remake de la Abadia del Crimen.


martes, septiembre 12, 2006

Juegos originales

Recientemente me han llamado la atención algunos juegos por su originalidad, algo que, por desgracia, no está demasiado en boga últimamente.

- Rumble Box: todos los personajes están formados por cubos y esferas que se quedan por ahí una vez derrotados.

- Darwinia: me ha llamado mucho la atención la estética de los gráficos que me recuerda enormemente a la película Tron. La mecánica también es bastante original.

- Goblin Hack: estoy acostumbrado a juegos en modo texto (Nethack, DoomRL, etc...) pero nunca había visto llevar los gráficos ASCII hasta este punto.

NetBeans C/C++

Al igual que Eclipse, NetBeans también tiene un plugin para añadir soporte C/C++ al IDE. Aunque aún le faltan algunas cosas parece que tiene un futuro prometedor.

lunes, septiembre 11, 2006

¿Porqué las macros de C apestan?

Imaginad que queremos hacer una macro que nos devuelva el cuadrado de un número. En un primer intento escribiremos:
#define cuadrado(x) x*x
Pero sin darnos cuenta hemos caído en una trampa terrible. En un primer intento nos damos cuenta que 2/cuadrado(10) no funciona porque se expande a 2/10*10. Para intentar solucionarlo cambiamos la macro a:
#define cuadrado(x) (x*x)
Acto seguido vemos como no funciona al intentar hacer cuadrado(1+1) porque se expande a (1+1*1+1). Así que intentamos volver a arreglar la macro:
#define cuadrado(x) ((x)*(x))
Pero así y todo nos sigue sin funcionar de forma correcta al hacer:
int x = 2;
cuadrado(x++)
Porque se expande a ((x++)*(x++)). Finalmente intentamos usar otra solución:
int temp_var;
#define cuadrado(x) (temp_var=(x); temp_var*temp_var)
Pero sólo nos funciona con números enteros así que nunca más podrás hacer cuadrado(3.5). Para conseguir una versión de la macro que nos funcione de forma correcta deberemos tirar de extensiones del lenguaje no estándar:
#define cuadrado(x) ({typedef xtype = x; xtype xval = x; xval * xval; })
Una simple macro que en un principio parecía que no sería gran cosa nos ha obligado a usar extensiones del lenguaje que no nos ofrecen ninguna garantía de continuidad ya que no son parte del estándar. Pero es que el sistema de macros de C no acaba aquí, programar una macro que haga algo tan simple como:
strswitch(exp) {
case “hola”: llamar_hola(); break;
case “adios”; llamar_adios(); break;
default: llamar_pordefecto(); break;
}
Es literalmente imposible de llevar a cabo en C.

[Basado en http://lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html]