首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用glut和python打印文本

使用glut和python打印文本
EN

Stack Overflow用户
提问于 2012-10-11 18:42:45
回答 3查看 7.7K关注 0票数 3

我编写了这个函数,用于使用python和python opengl打印一些文本

代码语言:javascript
复制
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) 

和渲染函数:

代码语言:javascript
复制
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对象,而不是文本!问题出在哪里?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-12 06:37:31

很多OpenGL程序员(包括我自己)都会被这个问题困扰。

虽然glRasterPos看起来像是像素坐标,但它们实际上是在使用之前通过模型视图和投影矩阵进行转换的。如果你试图在3D空间中定位文本,这是很有用的,当你想要某种覆盖控制台或HUD时,就不那么有用了。

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-12 14:24:46

我已经通过像这样切换投影解决了这个问题:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2019-11-04 22:02:24

使用gultStrokeCharacter更好,字符可以旋转和缩放,因为它绘制线条来形成字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12837747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档