.comment-link {margin-left:.6em;}

PROYECTO UTOPIA

jueves, septiembre 29, 2005

Libreria Cal3d

En nuestro proyecto, decidimos usar la librería Cal3D para la carga y control de animaciones de los personajes de nuestro videojuego. Veamos brevemente que nos ofrece.

Las características mas importantes de esta librería las podemos resumir en dos:

- Permite asociar diferentes animaciones a una malla.

- Tiene diversos exportadores de ficheros para los programas de modelado mas importantes como Maya o 3DMax. El numero de exportadores se va ampliando para incluir otros de uso generalizado como el Blender.

Cal3D ha establecido una serie de ficheros que forman la estructura básica de todo personaje a animar. Así, cada modelo esta compuesto por los ficheros siguientes:

- Skeleton. El esqueleto de la figura. La base jerárquica de la animación.

- Malla del modelo.

- Ficheros de animaciones. Cada uno contiene un ciclo completo de animación.

- Materiales. Se pueden tener diversos ficheros de materiales para la iluminación del modelo y sus texturas.

Estos ficheros se forman a partir de un modelo y animación realizado con nuestro programa de modelado favorito, para después, exportar cada uno de los ficheros necesarios.

Este tipo de formato ahorra bastante tiempo a los modeladores, ya que permite usar la misma malla y su esqueleto para las diferentes animaciones que se vayan a usar en el juego. Y en programación el trabajo ahorrado es descomunal ya que con unas pocas funciones es muy sencillo usar las diferentes animaciones, realizando transiciones suaves entre cada una de ellas.

Hablemos de las animaciones. Cal3D define dos tipos de animación: Ciclos y Acciones.

Los ciclos son animaciones, que como bien indica el nombre, repetimos en un bucle. Un ejemplo de animación de este tipo puede ser la de andar de un personaje.

Las acciones, son animaciones que ejecutamos en un instante dado. Por ejemplo, nuestro personaje va andando y en un momento dado, da un salto.

Hay que resaltar que cualquier animación puede ser tratada como ciclo o como acción, diferenciándose solamente por el tipo de función usada para procesar la animación.

Para tratar una animación como ciclo usaremos dos funciones:

BlendCycle() y clearCycle().

BlendCycle() ajusta el peso de una animación en una cantidad de tiempo determinada. La función tiene tres argumentos:

- Identificador de la animación.

- Peso de la animación.

- Tiempo de transición.

Estos valores se usan para asignar una transición con suavidad entre dos ciclos (animaciones) diferentes.

Para las acciones usaremos la función executeAction(). Tiene tres parámetros:

- identificador de la animación.

- Tiempo de transición inicial.

- Tiempo de transición final.

Las acciones se ejecutan automáticamente.

No debemos olvidar el control del tiempo. Para que la animación se presente con suavidad, el control del tiempo se ha de realizar en un proceso cíclico. Esto envuelve evaluar el tiempo en cada momento y los valores de transición para la animación que esta activa en cada momento. Esto se realiza mediante la función update(). Solo acepta un argumento que son los segundos transcurridos desde la ultima llamada a la función.

Veamos un pequeño ejemplo de código:

void CvisorModelosUtopiaView::actualizar(int idAnimacionUso)

{

float elapsedSeconds;

elapsedSeconds = (float)(GetTickCount() - m_lastTick) / 1000.0f;

if(!ejecutaAccion)

{

m_calModel->getMixer()->blendCycle(idAnimacionUso, 1.0f, 0.0f);

}

else
// Se ejecuta como accion la animación elegida.

{

m_calModel->getMixer()->executeAction(idAnimacionUso, 1.0f, 1.0f);

ejecutaAccion=false;

idAnimacion=idAnimacionCiclo;

}

m_calModel->update(elapsedSeconds);

m_lastTick = GetTickCount();

}

En este ejemplo, la función actualizar() recibe el identificador de la animación a procesar. Si el valor de la variable ejecutaAccion es verdadero se ejecutará la animación como una acción. Si es falso se ejecutará como un ciclo.

En breve seguiremos comentando mas posibilidades de esta librería.

2 Comments:

Publicar un comentario

<< Home