用glut和python打印文本

时间:2012-10-11 10:42:45

标签: python opengl glut

我已经用python和python opengl

编写了这个函数来打印一些文本
def glut_print( x,  y,  font,  text, r,  g , b , a):

    blending = False 
    if glIsEnabled(GL_BLEND) :
        blending = True

    #glEnable(GL_BLEND)
    glColor3f(1,1,1)
    glRasterPos2f(x,y)
    for ch in text :
        glutBitmapCharacter( font , ctypes.c_int( ord(ch) ) )


    if not blending :
        glDisable(GL_BLEND) 

渲染功能:

def Draw():
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )

    glut_print( 10 , 10 , GLUT_BITMAP_9_BY_15 , "Hallo World" , 1.0 , 1.0 , 1.0 , 1.0 )
    # draw my scene ......
    glutSwapBuffers()

结果没有写任何东西,我正在查看我的几何和3D物体;但不是文字! 问题出在哪里?

3 个答案:

答案 0 :(得分:2)

很多OpenGL程序员都被这个(包括我自己)抓住了。

尽管glRasterPos看起来像是需要像素坐标,但实际上它们在使用之前会被模型视图和投影矩阵转换。如果您尝试在3D空间中定位文本,则非常有用,当您需要某种覆盖控制台或HUD时,这种方法不太有用。

解决这个问题的旧方法是推送投影和模型视图矩阵,将其设置为标识,绘制文本,弹出两者。

Mesa3D的Brian Paul认为这很愚蠢,并添加了一个新的调用glWindowPos,它在窗口中获取实际的像素坐标。它成为OpenGL 1.4左右的标准。用glWindowPos替换你的glRasterPos,看看是否能解决问题。

答案 1 :(得分:0)

我通过切换投影解决了这个问题:

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 1.0, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)

glut_print( 10 , 10 , GLUT_BITMAP_9_BY_15 , "Hallo World" , 1.0 , 1.0 , 1.0 , 1.0 )

在打印之后,我回到常见的3D模型。

@ Hug ......我也试试glWindowPos

答案 2 :(得分:0)

使用gultStrokeCharacter更好,由于可以画线以形成字符,因此可以旋转和缩放字符。