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
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.
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?.
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.
Estoy comenzando a sentir un enorme respeto por nuestro tutor BeRSeRKeR.
Gracias