2011-03-31 69 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

第二種方法應該工作。 我真的不知道你的人體模型。一些類似的任務是 是我參加計算機視覺課程的第一項任務。

一個有用的事情是使用場景圖來構建共享局部座標系的部件。 然後你可以遍歷它並正確旋轉。 ()和glPopMatrix()

這樣你就可以在局部座標系中思考並影響所有其他元素。