opengl 如何渲染文本

wb1gzix0  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(164)

我使用这个函数来渲染文本,但是第一个参数会报告错误。我不知道如何使用它

glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, "text to render")
  ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type
k5ifujac

k5ifujac1#

glutBitmapCharacter的第二个参数是一个整数,代表一个字符。你必须使用for-循环来写一个字符串,并使用ord转换每个字符:

for c in text:
    glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, ord(c))

当使用glutBitmapString时,参数必须是二进制格式的字符串(b"text to render")。例如:

text = b"Hello World"
glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, text)

encdode字符串

text = "Hello World"
glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, text.encode('ascii'))

最小示例:

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def text(x, y, color, text):
    glColor3fv(color)
    glWindowPos2f(x, y)

    #for c in text:
    #    glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, ord(c))

    glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, text.encode('ascii'))

def display():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    text(100, 100, (1, 0, 0), "Hello World!")
    glutSwapBuffers()
    glutPostRedisplay()

glutInit(sys.argv)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA)
glutInitWindowSize(400, 200)
glutCreateWindow(b"OpenGL Window")
glutDisplayFunc(display)
glutMainLoop()

相关问题