【问题标题】:How to change font size of bitmap characters in PyOpenGL?如何在 PyOpenGL 中更改位图字符的字体大小?
【发布时间】:2019-11-07 08:19:51
【问题描述】:

我正在使用 PyOpenGL 制作游戏,并且正在使用一些重叠的文本。如何更改OpenGL.GLUT中包含的字体的字体大小?

这就是我现在拥有的:

def blit_text(x,y,font,text,r,g,b):
    blending = False 
    if glIsEnabled(GL_BLEND):
        blending = True
    glColor3f(r,g,b)
    glWindowPos2f(x,y)
    for ch in text:
        glutBitmapCharacter(font,ctypes.c_int(ord(ch)))
    if not blending:
        glDisable(GL_BLEND)

blit_text(displayCenter[0] - 5,displayCenter[1] - 5,GLUT_BITMAP_TIMES_ROMAN_24,"*",0,1,0)

【问题讨论】:

    标签: python opengl pygame pyopengl opengl-compat


    【解决方案1】:

    很遗憾你不能。

    glutBitmapCharacter 使用glBitmap 以 1:1 像素比率将位图光栅化(和“blit”)到帧缓冲区。因此位图无法缩放,位置由glWindowPos分别设置glRasterPos

    如果您想绘制不同大小的文本,则必须选择不同的字体,参见glutBitmapCharacter

    当您使用glutStrokeCharacter 时,文本由线图元绘制。文字的粗细可以通过glLineWidth设置。文本的位置和大小可以取决于当前模型视图矩阵和投影矩阵。所以文字的位置可以通过glTranslate设置,大小可以通过glScale改变。文字甚至可以旋转glRotate

    例如:

    def blit_text(x,y,font,text,r,g,b):
    
        glColor3f(r,g,b)
        glLineWidth(5)
        glTranslatef(x, y, 0)
        glScalef(1, 1, 1)
        for ch in text:
            glutStrokeCharacter(font,ctypes.c_int(ord(ch)))
    
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0, windowWidth, 0, windowHeight, -1, 1)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    
    blit_text(10, 10, GLUT_STROKE_ROMAN, "**", 0, 1, 0)
    

    另见freeglut - 14. Font Rendering FunctionsglutBitmapStringglutStrokeString的用法。

    另见Immediate mode and legacy OpenGL

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 2020-02-12
      • 2011-09-06
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2016-08-18
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多