Нашел вот такой пример.
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) ##glRotatef умножает текущую матрицу на матрицу вращения. Параметры здесь: angle, x, y и z.
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) ##glClear, который, как и любая другая функция очистки. Мы указываем здесь пару констант, которые говорят OpenGL, что именно мы очищаем.
Cube()
pygame.display.flip() ##pygame.дисплей.флип (), который обновляет наш дисплей
pygame.time.wait(10) ##pygame.время.подождите (10)
main()
Всю математику преобразования 3d проецирования берёт на себя OpenGL. А вот на экран выводит уже пайгейм.