Tôi đã cố gắng xây dựng một hệ thống hoạt hình xương 2D trong một thời gian và tôi tin rằng tôi đã gần hoàn thành. Hiện tại, tôi có các cấu trúc dữ liệu sau:
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
và Bone->y
là tọa độ của điểm cuối của Xương. Điểm bắt đầu được đưa ra bởi (bone->parent->x, bone->parent->y)
hoặc (0, 0)
. Mỗi thực thể trong trò chơi có một Mesh
và Mesh->vertices
được sử dụng làm vùng giới hạn cho thực thể. Mesh->tex_coords
là tọa độ kết cấu. Trong chức năng cập nhật của thực thể, vị trí của Bone
được sử dụng để thay đổi tọa độ của Vertices
liên kết với nó. Hiện tại những gì tôi có là:
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;
}
}
Tôi nghĩ rằng tôi có mọi thứ tôi cần, tôi chỉ không biết cách áp dụng các phép biến đổi cho tọa độ lưới cuối cùng. Tôi cần gì ở đây? Hay là cách tiếp cận của tôi hoàn toàn sai?