Ho cercato di costruire un sistema di animazione scheletrica 2D per un po 'e credo di essere abbastanza vicino alla fine. Attualmente, ho le seguenti strutture di dati:
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->x
e Bone->y
sono le coordinate del punto finale dell'osso. Il punto di partenza è dato da (bone->parent->x, bone->parent->y)
o (0, 0)
. Ogni entità nel gioco ha una Mesh
, e Mesh->vertices
viene utilizzata come area di delimitazione per l'entità. Mesh->tex_coords
sono coordinate di trama. Nella funzione di aggiornamento dell'entità, la posizione di Bone
viene utilizzata per modificare le coordinate di Vertices
ciò che è associato ad essa. Attualmente quello che ho è:
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;
}
}
Penso di avere tutto ciò di cui ho bisogno, semplicemente non so come applicare le trasformazioni alle coordinate di mesh finali. Di quali trasformazioni ho bisogno qui? O il mio approccio è completamente sbagliato?