我已经用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物体;但不是文字! 问题出在哪里?
答案 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更好,由于可以画线以形成字符,因此可以旋转和缩放字符。