我编写了这个函数,用于使用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对象,而不是文本!问题出在哪里?
发布于 2012-10-12 06:37:31
很多OpenGL程序员(包括我自己)都会被这个问题困扰。
虽然glRasterPos看起来像是像素坐标,但它们实际上是在使用之前通过模型视图和投影矩阵进行转换的。如果你试图在3D空间中定位文本,这是很有用的,当你想要某种覆盖控制台或HUD时,就不那么有用了。
解决这一问题的旧方法是同时推送投影和模型视图矩阵,将两者都设置为标识、绘制文本、弹出两者。
Mesa3D的Brian Paul认为这很愚蠢,并添加了一个新的调用glWindowPos,它在窗口中获取实际的像素坐标。它成为了OpenGL 1.4左右的标准。用glWindowPos替换你的glRasterPos,看看这是否能解决这个问题。
发布于 2012-10-12 14:24:46
我已经通过像这样切换投影解决了这个问题:
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
发布于 2019-11-04 22:02:24
使用gultStrokeCharacter更好,字符可以旋转和缩放,因为它绘制线条来形成字符。
https://stackoverflow.com/questions/12837747
复制相似问题