大學時期修過一門 OpenGL 選修課,內容較為基礎,適合剛入門的同學參考。這裡整理了核心知識點,希望能幫助初學者快速上手。
推薦學習資源:NeHe OpenGL 教程(英文) 與 中文版,講解清晰且附有完整範例,優於市面上許多參考書。
glTranslatef(x, y, z):平移物體glRotatef(angle, x, y, z):繞指定向量 (x,y,z) 旋轉 angle 度glScalef(x, y, z):縮放物體,1.0 為原始大小glPushMatrix():儲存當前模型視圖矩陣glPopMatrix():恢復上一次儲存的矩陣gluLookAtgluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
注意:gluLookAt 並非 OpenGL 標準庫函數,實際上封裝了 glTranslatef 與 glRotatef,初學階段理解即可,實際專案建議自行實現視圖矩陣。
以下範例展示如何使用矩陣堆疊繪製兩個位置不同的正方形:
gluLookAt(-2.0f, 5.0f, 10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
glPushMatrix();
glTranslatef(0.0f, 0.0f, 3.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();
glColor3f(1.0f, 0.0f, 0.0f);
glPopMatrix();
glTranslatef(0.0f, 0.0f, -3.0f);
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();
等效於不使用 glPushMatrix/glPopMatrix,改用 glLoadIdentity() 重置矩陣後再次設定視點與平移。
呼叫 glLoadIdentity() 後,當前點移至螢幕中心:
glTranslatef(x, y, z) 沿三軸移動。例如 glTranslatef(-1.5f, 0.0f, -6.0f) 表示左移 1.5、不上下移動、向螢幕內移動 6.0。
