我目前可以圍繞一個樞軸點旋轉,首先轉換爲樞軸點,然後執行旋轉並最終翻譯回原點。在我的例子中,我很容易做到這一點。但我無法弄清楚如何在前臂的肘部周圍增加旋轉。人類的opengl旋轉
我已經試過周圍的肘部,前臂旋轉如下:
- 翻譯前行,旋轉,平移原點,轉化爲前臂,旋轉,平移原點
- 翻譯承擔,旋轉,翻譯成前臂,旋轉,翻譯成肩,翻譯成原點
既不適合我。有什麼建議麼?我真的被困在這一個。
我目前可以圍繞一個樞軸點旋轉,首先轉換爲樞軸點,然後執行旋轉並最終翻譯回原點。在我的例子中,我很容易做到這一點。但我無法弄清楚如何在前臂的肘部周圍增加旋轉。人類的opengl旋轉
我已經試過周圍的肘部,前臂旋轉如下:
既不適合我。有什麼建議麼?我真的被困在這一個。
我在做一些骨骼動畫時遇到了類似的問題。爲此使用遞歸非常有幫助。此外,分層構建骨骼(例如,肩膀是手的父母的前臂的父母等)。通過這樣做,你可以按如下編寫代碼:
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是骨骼動畫一個很好的資源。
第二種方法應該工作。 我真的不知道你的人體模型。一些類似的任務是 是我參加計算機視覺課程的第一項任務。
一個有用的事情是使用場景圖來構建共享局部座標系的部件。 然後你可以遍歷它並正確旋轉。 ()和glPopMatrix()
這樣你就可以在局部座標系中思考並影響所有其他元素。