しばらくの間、2Dスケルトンアニメーションシステムを構築しようとしていましたが、仕上げにかなり近づいていると思います。現在、私は以下のデータ構造を持っています:
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
そしてBone->y
骨の終点の座標です。開始点は(bone->parent->x, bone->parent->y)
またはによって指定され(0, 0)
ます。ゲームの各エンティティにはがありMesh
、Mesh->vertices
エンティティの境界領域として使用されます。Mesh->tex_coords
テクスチャ座標です。エンティティの更新関数では、の位置をBone
使用しVertices
て、それにバインドされているの座標を変更します。現在私が持っているのは:
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;
}
}
必要なものはすべて揃っていると思いますが、最終的なメッシュ座標に変換を適用する方法がわかりません。ここで必要な変換は何ですか?それとも私のアプローチは完全に間違っていますか?