opengl - thread - setpreserveeglcontextonpause



旋轉前後的OpenGL翻譯 (1)

現在,我的問題是針對肘部。 為什麼在旋轉之前和之後在x軸上都有向前平移?

如果您想要想像矩陣運算如何改變模型,那麼您需要以相反的順序“讀取”操作。 這是因為矩陣堆棧的當前矩陣乘以由新操作指定的矩陣,並且矩陣以列主要順序(固定功能流水線)存儲。

從肘部立方體開始

glutWireCube(1.0f);

縮放肘部

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();

將它移到右邊

glTranslatef(1.0f, 0.0f, 0.0f);

旋轉肘部

glRotatef(45.0f, 0.0f, 0.0f, 1.0f);

將旋轉的彎頭向右移動

glTranslatef(1.0f, 0.0f, 0.0f);

畫出肩膀立方體

glutWireCube(1.0f);

縮放肩膀

glPushMatrix();
glScalef(2.0f, 0.4f, 1.0f);
glutWireCube(1.0f);
glPopMatrix();

將手臂(肘部和肩部)向右移動

glTranslatef(1.0f, 0.0f, 0.0f);

轉動手臂

glRotatef(-15.0f, 0.0f, 0.0f, 1.0f);

將手臂移動到最終位置(向左)

glTranslatef(-1.0f, 0.0f, 0.0f);

以下是關於如何繪製機器人的手臂和肩膀並通過一些用戶輸入旋轉它們的代碼(摘自 http://www.glprogramming.com/red/chapter03.html ):

glPushMatrix();
    glTranslatef (-1.0, 0.0, 0.0);
    glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();

    glTranslatef (1.0, 0.0, 0.0);
    glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();
glPopMatrix();  

glutSwapBuffers();

我理解用於繪製肩部並旋轉它的代碼。 對於肩部:首先我們將它沿著x軸向後平移一個單位,這樣當我們進行旋轉時,它會沿著原點作為樞軸旋轉。 然後我們將它翻譯回來(在x軸上前進一個單位)。 此轉換將應用於已縮放的多維數據集。

現在,我的問題是針對肘部。 為什麼在旋轉之前和之後在x軸上都有向前平移?