
- Pygame 教程
- Pygame - 首頁
- Pygame - 概述
- Pygame - Hello World
- Pygame - 顯示模式
- Pygame - Locals 模組
- Pygame - 顏色物件
- Pygame - 事件物件
- Pygame - 鍵盤事件
- Pygame - 滑鼠事件
- Pygame - 繪製形狀
- Pygame - 載入影像
- Pygame - 在視窗中顯示文字
- Pygame - 移動影像
- Pygame - 使用數字鍵盤移動
- Pygame - 使用滑鼠移動
- Pygame - 移動矩形物件
- Pygame - 使用文字作為按鈕
- Pygame - 影像變換
- Pygame - 音效物件
- Pygame - 混音器通道
- Pygame - 播放音樂
- Pygame - 播放影片
- Pygame - 使用攝像頭模組
- Pygame - 載入游標
- Pygame - 訪問 CDROM
- Pygame - Sprite 模組
- Pygame - PyOpenGL
- Pygame - 錯誤和異常
- Pygame 有用資源
- Pygame - 快速指南
- Pygame - 有用資源
- Pygame - 討論
Pygame - PyOpenGL
OpenGL 是一種跨語言、跨平臺的 API,用於渲染 2D 和 3D 向量圖形。透過與圖形處理單元 (GPU) 互動,它實現了硬體加速渲染。PyOpenGL 庫是 Python 的 OpenGL 繫結。
我們需要使用 pip 工具安裝它:
pip3 install pyopengl
首先,我們將從 OpenGL.GL 和 OpenGL.GLU(實用程式函式)模組匯入函式。
OpenGL 透過定義頂點或節點來指定空間中的物件。頂點之間的線稱為邊。OpenGL 程式碼編寫在 glBegin 和 glEnd 之間。
在我們的示例中,我們將繪製一個具有以下頂點和邊的立方體:
verticies = ( (1, -1, -1), (1, 1, -1), (-1, 1, -1), (-1, -1, -1), (1, -1, 1), (1, 1, 1), (-1, -1, 1), (-1, 1, 1) ) edges = ( (0,1), (0,3), (0,4), (2,1), (2,3), (2,7), (6,3), (6,4), (6,7), (5,1), (5,4), (5,7) )
cube() 函式執行 OpenGL 繪製:
def Cube(): glBegin(GL_LINES) for edge in edges: for vertex in edge: glVertex3fv(verticies[vertex]) glEnd()
傳遞給 glBegin() 的 GL_LINES 屬性表示要繪製線。
我們需要在 set_mode() 函式中指定 OPENGL 和 DOUBLEBUF 標誌,該函式設定顯示。
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
然後呼叫 gluPerspective() 來確定透視。第一個引數是視野的角度。第二個值是縱橫比。接下來的兩個值是 znear 和 zfar,它們是近裁剪平面和遠裁剪平面。
gluPerspective(45, (display[0]/display[1]), 0.1, 50.0) glTranslatef(0.0,0.0, -5)
在 Pygame 事件迴圈中,首先旋轉當前矩陣,清除顏色緩衝區和深度緩衝區,然後呼叫 cube() 函式。最後,我們更新顯示視窗。
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() glRotatef(1, 3, 1, 1) glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) Cube() pygame.display.flip() pygame.time.wait(10)
示例
示例的完整程式碼如下:
import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import * verticies = ( (1, -1, -1), (1, 1, -1), (-1, 1, -1), (-1, -1, -1), (1, -1, 1), (1, 1, 1), (-1, -1, 1), (-1, 1, 1) ) edges = ( (0,1), (0,3), (0,4), (2,1), (2,3), (2,7), (6,3), (6,4), (6,7), (5,1), (5,4), (5,7) ) def Cube(): glBegin(GL_LINES) for edge in edges: for vertex in edge: glVertex3fv(verticies[vertex]) glEnd() def main(): pygame.init() display = (800,600) pygame.display.set_mode(display, DOUBLEBUF|OPENGL) gluPerspective(45, (display[0]/display[1]), 0.1, 50.0) glTranslatef(0.0,0.0, -5) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() glRotatef(1, 3, 1, 1) glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) Cube() pygame.display.flip() pygame.time.wait(10) main()
輸出
執行以上程式碼。您將在 Pygame 的視窗表面上看到一個旋轉的立方體。這是 PyOpenGL 功能的簡短演示。本教程不詳細討論此庫。

廣告