我使用这个函数来渲染文本,但是第一个参数会报告错误。我不知道如何使用它
glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, "text to render") ctypes.ArgumentError: argument 2: <class 'TypeError'>: wrong type
k5ifujac1#
glutBitmapCharacter的第二个参数是一个整数,代表一个字符。你必须使用for-循环来写一个字符串,并使用ord转换每个字符:
glutBitmapCharacter
for
ord
for c in text: glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, ord(c))
当使用glutBitmapString时,参数必须是二进制格式的字符串(b"text to render")。例如:
glutBitmapString
b"text to render"
text = b"Hello World" glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, text)
或encdode字符串
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()
1条答案
按热度按时间k5ifujac1#
glutBitmapCharacter
的第二个参数是一个整数,代表一个字符。你必须使用for
-循环来写一个字符串,并使用ord
转换每个字符:当使用
glutBitmapString
时,参数必须是二进制格式的字符串(b"text to render"
)。例如:或
encdode
字符串最小示例: