跳轉到內容

OpenGL 程式設計/基礎/3D 物件

來自華夏公益教科書,開放的書籍,面向開放的世界

OpenGL 是一個強大的圖形庫,允許您在 C++ 中建立 3D 圖形。在本教程中,我們將討論如何在 OpenGL 和 C++ 中繪製一個簡單的 3D 物件。在本教程中,我們將使用 GLUT 庫,它提供了一組用於建立簡單的 OpenGL 應用程式的工具。

先決條件

[編輯 | 編輯原始碼]

在我們開始之前,請確保您已安裝以下軟體

  • 一個 IDE,例如 Visual Studio 或 Code::Blocks
  • GLUT 庫
  • OpenGL 標頭檔案和庫

要開始,請在您的 IDE 中建立一個新的 C++ 專案,幷包含必要的 OpenGL 和 GLUT 標頭檔案。這是一個例子

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

接下來,我們將為 3D 物件定義一些變數

float angle = 0.0f; // rotation angle
float x = 0.0f; // x position
float y = 0.0f; // y position
float z = -5.0f; // z position

我們將使用這些變數來操縱物件的定位和方向。

繪製簡單的 3D 物件

[編輯 | 編輯原始碼]

讓我們從繪製一個簡單的立方體開始。我們將使用 glutSolidCube 函式來建立立方體,並使用 glTranslatefglRotatef 來定位和定向它。

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    
    // Position and rotate the cube
    glTranslatef(x, y, z);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);
    
    // Draw the cube
    glutSolidCube(1.0);
    
    glutSwapBuffers();
}

glClear 函式清除顏色和深度緩衝區,glMatrixModeglLoadIdentity 分別設定當前矩陣模式和載入單位矩陣。glTranslatefglRotatef 函式用於定位和定向立方體,glutSolidCube 函式用於繪製立方體。最後,glutSwapBuffers 用於交換前後臺緩衝區。我們還需要在 main 函式中設定視窗和 OpenGL 上下文

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(640, 480);
    glutCreateWindow("Simple 3D Object");
    
    glEnable(GL_DEPTH_TEST);
    
    glutDisplayFunc(display);
    glutIdleFunc(idle);
    
    glutMainLoop();
    
    return 0;
}

glutInit 函式初始化 GLUT,glutInitDisplayMode 設定顯示模式。glutInitWindowSize 設定視窗大小,glutCreateWindow 建立視窗。glEnable(GL_DEPTH_TEST) 啟用深度測試。最後,glutDisplayFuncglutIdleFunc 分別設定顯示和空閒函式,glutMainLoop 進入 GLUT 事件處理迴圈。

在本教程中,我們學習瞭如何在 OpenGL 和 C++ 中繪製簡單的 3D 物件。我們使用 GLUT 庫來設定視窗和 OpenGL 上下文,並使用 glTranslatefglRotatef 來定位和定向立方體。我們還討論瞭如何啟用深度測試,以確保物件根據其位置正確渲染。

華夏公益教科書