Código:
void animation_mode(animation_t* a, int mode, int speed, int loops)
{
const u8 frames[][2] =
{
{ 0, 40}, //MD2_ANIM_STAND
{ 40, 6}, //MD2_ANIM_RUN
{ 46, 8}, //MD2_ANIM_ATTACK
{ 54, 4}, //MD2_ANIM_PAIN1
{ 58, 4}, //MD2_ANIM_PAIN2
{ 62, 4}, //MD2_ANIM_PAIN3
{ 66, 6}, //MD2_ANIM_JUMP
{ 72, 12}, //MD2_ANIM_FLIPOFF
{ 84, 11}, //MD2_ANIM_SALUTE
{ 95, 17}, //MD2_ANIM_TAUNT
{112, 11}, //MD2_ANIM_WAVE
{123, 12}, //MD2_ANIM_POINT
{135, 19}, //MD2_ANIM_CROUCH_STAND
{154, 6}, //MD2_ANIM_CROUCH_WALK
{160, 9}, //MD2_ANIM_CROUCH_ATTACK
{169, 4}, //MD2_ANIM_CROUCH_PAIN
{173, 5}, //MD2_ANIM_CROUCH_DEATH
{178, 6}, //MD2_ANIM_DEATH1
{184, 6}, //MD2_ANIM_DEATH2
{190, 8} //MD2_ANIM_DEATH3
};
animation_init(a, mode, frames[mode][0], frames[mode][1], speed, loops);
}
La definición de los modelos se hace asumiendo la estructura del MD2 por eso en el método anterior que se usa para animar los modelos 3D que suelen tiener 199 frames de animación distribuidos en 21 animaciones completas. Si se quisiera tener "soporte nativo" para modelos MDL de Quake o MD3 de Quake 3 se podría picar el código correspondiente para cargar y manejar dichos modelos sin tener que usar herramientas de conversión de modelos que permitan pasar de MDL a MD2, de MD3 a MD2 o de OBJ a MD2. Estás herramientas existen y funcionan. Sin embargo esas herramientas convierten tal cual el modelo original a MD2 manteniendo los frames de animación del modelo original.
Marcadores