Ich habe eine Weile versucht, ein 2D-Skelettanimationssystem zu erstellen, und ich glaube, dass ich kurz vor dem Abschluss stehe. Derzeit habe ich folgende Datenstrukturen:
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
und Bone->y
sind die Koordinaten des Endpunktes des Knochens. Der Startpunkt ist gegeben durch (bone->parent->x, bone->parent->y)
oder (0, 0)
. Jede Entität im Spiel hat eine Mesh
und Mesh->vertices
wird als Begrenzungsbereich für die Entität verwendet. Mesh->tex_coords
sind Texturkoordinaten. In der Aktualisierungsfunktion der Entität wird die Position der Entität Bone
verwendet, um die Koordinaten der Entität zu ändern Vertices
, die an sie gebunden sind. Derzeit habe ich:
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;
}
}
Ich glaube, ich habe alles, was ich brauche. Ich weiß nur nicht, wie ich die Transformationen auf die endgültigen Netzkoordinaten anwenden soll. Welche Transformationen brauche ich hier? Oder ist mein Ansatz einfach völlig falsch?
quelle