我正在尝试使用glutBitmapCharacter
渲染程序中的文本,但是字体输入未定义,并且连续出现错误,提示未定义GLUT_BITMAP_9_BY_15
。有人可以帮我解决这个问题吗?
代码:
def glut_print(self, x, y, text):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 1.0, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glColor3f(1, 1, 1)
glRasterPos2f(x, y)
for ch in text:
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ctypes.c_int(ord(ch)))
glutSwapBuffers()
答案 0 :(得分:1)
您必须通过The OpenGL Utility Toolkit (GLUT)初始化glutInit
。
如果您使用PyGame,则无法呼叫glutSwapBuffers
。使用 GLUT ,通过glutCreateWindow
创建一个窗口并通过glutSwapBuffers
进行显示更新,或者使用 PYGame 并通过{{3}更新显示} / pygame.display.flip()
。不能混合使用窗口工具包。
一个最小的应用程序,它会创建 PyGame 窗口并通过pygame.display.update()
绘制文本,如下所示:
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()
在上面的示例中,我使用glutBitmapCharacter
而不是glWindowPos
,因为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()