He estado tratando de construir un sistema de animación esquelética 2D durante un tiempo, y creo que estoy bastante cerca de terminar. Actualmente, tengo las siguientes estructuras de datos:
struct Bone {
    Bone *parent;
    int child_count;
    Bone **children;
    double x, y;
};
struct Vertex {
    double x, y;
    int bone_count;
    Bone **bones;
    double *weights;
};
struct Mesh {
    int vertex_count;
    Vertex **vertices;
    Vertex **tex_coords;
}Bone->xy Bone->yson las coordenadas del punto final del hueso. El punto de partida viene dado por (bone->parent->x, bone->parent->y)o (0, 0). Cada entidad en el juego tiene un Mesh, y Mesh->verticesse usa como el área límite para la entidad. Mesh->tex_coordsson coordenadas de textura En la función de actualización de la entidad, la posición de la Bonese utiliza para cambiar las coordenadas de la Verticesque está vinculada a ella. Actualmente lo que tengo es:
void Mesh_update(Mesh *mesh) {
    int i, j;
    double sx, sy;
    for (i = 0; i < vertex_count; i++) {
        if (mesh->vertices[i]->bone_count == 0) {
            continue;
        }
        sx, sy = 0;
        for (j = 0; j < mesh->vertices[i]->bone_count; j++) {
            sx += (/* ??? */) * mesh->vertices[i]->weights[j];
            sy += (/* ??? */) * mesh->vertices[i]->weights[j];
        }
        mesh->vertices[i]->x = sx;
        mesh->vertices[i]->y = sy;
    }
}Creo que tengo todo lo que necesito, simplemente no sé cómo aplicar las transformaciones a las coordenadas de malla finales. ¿Qué transformaciones necesito aquí? ¿O mi enfoque está completamente equivocado?
fuente
