OpenGL вращений для человека - PullRequest
2 голосов
/ 31 марта 2011

В настоящее время я могу вращаться вокруг точки поворота, сначала переместившись в точку поворота, затем выполнив вращение и, наконец, вернувшись к исходной точке. Я делаю это достаточно легко для плеча в моем примере. Однако я не могу понять, как добавить вращение вокруг локтя для предплечья.

Я попробовал следующее для вращения предплечья вокруг локтя:

  1. перевести на плечо, повернуть, перевести на источник, перевести на предплечье, повернуть, перевести на начало
  2. перевести на плечо, повернуть, перевести на предплечье, повернуть, перевести на плечо, перевести на начало

Ни одна из них не работает для меня. Какие-либо предложения? Я действительно застрял на этом.

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Я столкнулся с подобной проблемой, когда делал скелетную анимацию.Для этого очень полезно использовать рекурсию.Кроме того, структурируйте свои кости иерархически (например, плечо является родителем предплечья, которое является родителем руки и т. Д.).Сделав это, вы можете написать свой код следующим образом:

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;  

Этот веб-сайт является отличным ресурсом для скелета.анимация.

0 голосов
/ 31 марта 2011

Второй подход должен работать.Я действительно не знаю вашу модель человеческого тела.Некоторым подобным заданием было первое задание в курсе компьютерного зрения, которое я прошел.

Полезно использовать граф сцены для построения деталей, которые имеют общую локальную систему координат.Тогда вы можете пройти его и вращаться правильно.Полезно не переводить, а использовать glPushMatrix () и glPopMatrix ()

Таким образом, вы можете мыслить в локальной системе координат и влиять на все другие элементы.

...