2011-03-31 5 views
2

현재 피벗 포인트로 변환 한 다음 회전을 수행하고 마지막으로 원점으로 다시 변환하여 피벗 포인트를 중심으로 회전 할 수 있습니다. 제 견본에서 어깨에 충분히 쉽게 그렇게합니다. 그러나 나는 또한 팔꿈치 주위에 회전을 추가하는 방법을 알아낼 수 없습니다. ,인간을위한 OpenGL 회전

  1. 가 어깨에 번역, 원점으로 변환, 회전, 어깨에 번역 총대 번역, 회전, 원산지
  2. 로 번역 :

    가 나는 팔꿈치 주위의 팔뚝의 회전에 대해 다음 시도했습니다 회전, 팔뚝 번역, 회전, 어깨 번역, 원산지 번역

나를 위해 일하지 마십시오. 어떤 제안? 나는이 하나에 정말로 붙어있다.

답변

3

일부 골격 애니메이션을 할 때 비슷한 문제가 발생했습니다. 이를 위해 재귀를 사용하는 것이 매우 유용합니다. 또한 뼈를 계층 적으로 구조화하십시오 (예 : 어깨가 손의 부모 인 팔뚝의 부모 등). 다음과 같이 코드를 작성할 수 있다는함으로써 :

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; 

website 골격 애니메이션을위한 훌륭한 자원이다.

0

두 번째 접근 방식이 효과적입니다. 나는 당신의 인체 모델을 정말로 모른다. 어떤 유사한 작업은 내가 수행 한 컴퓨터 비전 과정의 첫 번째 과제 인 이었습니다.

도움이되는 점은 공통적 인 로컬 좌표계를 공유하는 부분을 만들기 위해 장면 그래프를 사용하는 것입니다. 그런 다음 트래버스하고 올바르게 회전 할 수 있습니다. 번역하지 않고 사용하는 것이 좋습니다. glPushMatrix() 및 glPopMatrix()

이렇게하면 로컬 좌표계에서 생각하고 다른 모든 요소에 영향을 줄 수 있습니다.