Вам нужно инициализировать служебный инструментарий OpenGL (GLUT) с помощью glutInit
.
Если вы используете PyGame , то вы не сможете позвонить glutSwapBuffers
. Либо используйте GLUT , создайте окно с помощью glutCreateWindow
и обновите отображение с помощью glutSwapBuffers
, либо используйте PYGame и обновите отображение с помощью pygame.display.flip()
/ pygame.display.update()
. Невозможно смешать оконные наборы инструментов.
Минимальное приложение, которое создает PyGame окно и рисует текст по glutBitmapCharacter
, может выглядеть следующим образом:
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def glut_print(x, y, text):
glColor3f(1, 1, 1)
glWindowPos2f(x, y)
for ch in text:
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ctypes.c_int(ord(ch)))
# init pygame
pygame.init()
displaySize = (640, 480)
screen = pygame.display.set_mode(displaySize, DOUBLEBUF | OPENGL)
# init glut
glutInit()
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
glut_print(displaySize[0]/2, displaySize[1]/2, "test")
pygame.display.flip()
pygame.quit()
В приведенном выше примере я использовал glWindowPos
вместо glRasterPos
, потому что координаты glRasterPos
преобразуются текущим представлением модели и проекционная матрица.
То же самое при использовании glRasterPos
может выглядеть следующим образом:
def glut_print(x, y, text):
# save and "clear" projection matirx
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
# set orthographic projection
gluOrtho2D(0.0, displaySize[0], 0.0, displaySize[1])
# save and "clear" model view matrix
glMatrixMode(GL_MODELVIEW)
glPushMatrix()
glLoadIdentity()
glColor3f(1, 1, 1)
glRasterPos2f(x, y)
for ch in text:
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ctypes.c_int(ord(ch)))
# restore projection matrix
glMatrixMode(GL_PROJECTION)
glPopMatrix()
# restore model view matrix
glMatrixMode(GL_MODELVIEW)
glPopMatrix()