Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Cosmo en 14 de Septiembre de 2004, 12:40:35 PM

Título: Calculos Con Bones
Publicado por: Cosmo en 14 de Septiembre de 2004, 12:40:35 PM
 Hola a todos,

Vereis, gracias a BeRSeRKeR he conseguido obtener toda la informacion que necesito de bones y pesos de un esqueleto desde Max y ahora creo que mas o menos tengo una idea de que hacer.

Para calcular la nueva posicion de cada vertice, ¿tengo que multiplicarlo por la matriz de traslacion de cada bone que le influye y promediarlo con su peso?

Pido perdon publicamente por todas las tonterias que pueda estar diciendo, estoy mas que verde en este tema  :P  
Título: Calculos Con Bones
Publicado por: BeRSeRKeR en 14 de Septiembre de 2004, 01:47:30 PM
 Supongo que te refieres a la hora del render.

Aquí tienes un trozo de código que he escrito ahora mismo sin comprobar si está bien o mal.

// Recorremos todos los vértices
for (int nVert = 0; nVert < vertices.count; nVert++)
{
   // Referencia al vértice actual
   vertex_t *auxVert = &vertices[nVert];

   // Posición final del vértice
   auxVert->xyz = vec3_t(0, 0, 0);

   // Para cada peso del vértice...
   for (int nWeight = 0; nWeight < auxVert->weights.count; nWeight++)
   {
        // Referencia al peso actual
        weight_t *auxWeight = &auxVert->weights[nWeight];
        // Referencia al bone que influye con el peso actual al vértice en curso
        bone_t *auxBone = &bones[auxWeight->boneID];

        // Vamos acumulando la posición promedio para cada peso
        auxVert->xyz += (auxWeight->vertex_offset * auxBone->transform_mat) * auxWeight->weight;
   }
}


Para cada vértice, recorres los bones que le afectan y para cada uno de ellos, transformas su posición por la matriz de transformación absoluta del bone y lo promedias con el peso de dicho bone. Eso lo vas acumulando hasta que al final del proceso obtendrás la posición correcta del vértice.

Ten en cuenta que vertex_offset es la posición del vértice relativa al bone que le afecta. Eso es algo que se calcula a la hora de exportar.

Saludos.
Título: Calculos Con Bones
Publicado por: Pogacha en 14 de Septiembre de 2004, 04:20:42 PM
 Yo no conocia este sistema de pesos, me quedé con bones pasados, y ya  que estamos en el baile pregunto.
¿Esto sirve para suavisar la animacion?, por ejemplo en los codos y rodillas.
¿Pero con dos pesos fijos alcanzaria creo, o tiene algun truco mas o alguna utilidad mas, o me equivoco?.
Título: Calculos Con Bones
Publicado por: BeRSeRKeR en 14 de Septiembre de 2004, 04:25:34 PM
 
Cita de: "Pogacha"¿Esto sirve para suavisar la animacion?, por ejemplo en los codos y rodillas.
Exacto. Con una buena definición de pesos consigues que en las zonas de las articulaciones, los vértices se deformen mucho más suavemente que sin pesos.

Siempre pongo este ejemplo...

Sin pesos:
(http://www.flipcode.com/tutorials/dx8s_anim-02.gif)

Con pesos:
(http://www.flipcode.com/tutorials/dx8s_anim-01.gif)

Saludos.
Título: Calculos Con Bones
Publicado por: Pogacha en 14 de Septiembre de 2004, 04:27:31 PM
 Estoy comenzando a sentir un enorme respeto por nuestro tutor BeRSeRKeR.
Gracias