Saya telah mencoba untuk membangun sistem animasi kerangka 2D untuk sementara waktu, dan saya percaya bahwa saya sudah hampir selesai. Saat ini, saya memiliki struktur data berikut:
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
dan Bone->y
merupakan koordinat titik akhir Tulang. Titik awal diberikan oleh (bone->parent->x, bone->parent->y)
atau (0, 0)
. Setiap entitas dalam permainan memiliki Mesh
, dan Mesh->vertices
digunakan sebagai area pembatas untuk entitas. Mesh->tex_coords
adalah koordinat tekstur. Dalam fungsi pembaruan entitas, posisi Bone
digunakan untuk mengubah koordinat Vertices
yang terikat padanya. Saat ini yang saya miliki adalah:
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;
}
}
Saya pikir saya memiliki semua yang saya butuhkan, saya hanya tidak tahu bagaimana menerapkan transformasi ke koordinat mesh akhir. Tranformasi apa yang saya butuhkan di sini? Atau apakah pendekatan saya benar-benar salah?
sumber