Я столкнулся с подобной проблемой, когда делал скелетную анимацию.Для этого очень полезно использовать рекурсию.Кроме того, структурируйте свои кости иерархически (например, плечо является родителем предплечья, которое является родителем руки и т. Д.).Сделав это, вы можете написать свой код следующим образом:
void drawBone(Bone *root) {
if (!root) return;
glPushMatrix();
glTranslatef(root->x,root->y,0);
glRotatef(root->a,0,0,1);
// insert code to actually draw bone here
int i;
glTranslatef(root->l,0,0);
for (i=0; i<root->childCount; i++)
drawBone(root->child[i]);
glPopMatrix();
}
Моя структура кости выглядит следующим образом:
typedef struct _Bone {
float x,y,a,l; // position, angle, length of bone
int childCound; // number of children for this bone
struct _Bone *child[MAX_CHILD_COUNT], *parent;
} Bone;
Этот веб-сайт является отличным ресурсом для скелета.анимация.