Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Calculos Con Bones

Iniciado por Cosmo, 14 de Septiembre de 2004, 12:40:35 PM

« anterior - próximo »

Cosmo

 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  

BeRSeRKeR

 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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Pogacha

 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?.

BeRSeRKeR

 
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:


Con pesos:


Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Pogacha

 Estoy comenzando a sentir un enorme respeto por nuestro tutor BeRSeRKeR.
Gracias






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.