- 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 功能的簡短演示。本教程不詳細討論此庫。
廣告