首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

OpenGL 入門:視口與物體變換函數詳解

     編輯:C++ 入門

前言

大學時期修過一門 OpenGL 選修課,內容較為基礎,適合剛入門的同學參考。這裡整理了核心知識點,希望能幫助初學者快速上手。

推薦學習資源:NeHe OpenGL 教程(英文) 與 中文版,講解清晰且附有完整範例,優於市面上許多參考書。

核心變換函數

幾何變換

  • glTranslatef(x, y, z):平移物體
  • glRotatef(angle, x, y, z):繞指定向量 (x,y,z) 旋轉 angle 度
  • glScalef(x, y, z):縮放物體,1.0 為原始大小

矩陣堆疊操作

  • glPushMatrix():儲存當前模型視圖矩陣
  • glPopMatrix():恢復上一次儲存的矩陣

視點設定 gluLookAt

gluLookAt(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() 重置矩陣後再次設定視點與平移。

OpenGL 座標系統

呼叫 glLoadIdentity() 後,當前點移至螢幕中心:

  • X 軸:左負右正
  • Y 軸:下負上正
  • Z 軸:內負外正(垂直螢幕向外)

glTranslatef(x, y, z) 沿三軸移動。例如 glTranslatef(-1.5f, 0.0f, -6.0f) 表示左移 1.5、不上下移動、向螢幕內移動 6.0。

OpenGL 座標系統示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved