Python 为什么我的OpenGL程序无法加载GLUT位图字体?

Python 为什么我的OpenGL程序无法加载GLUT位图字体?,python,opengl,glut,pyopengl,opengl-compat,Python,Opengl,Glut,Pyopengl,Opengl Compat,我想在OpenGL中的3D环境的HUD上显示一些简单的文本。 所有来源都说我应该使用GLUT中包含的位图字体,但是,我的程序似乎无法找到/加载字体 我已经包含了所有正确的库,并仔细检查了fonts.py文件是否确实位于…\Python37\…\OpenGL\GLUT\目录中,但是当我键入GLUT\u BITMAP\u TIMES\u ROMAN\u 24(或任何其他位图字体)时,它会在我的代码中突出显示为错误 这是我调用以显示文本的函数: def文本(self、x、y、r、g、b、text):

我想在OpenGL中的3D环境的HUD上显示一些简单的文本。 所有来源都说我应该使用GLUT中包含的位图字体,但是,我的程序似乎无法找到/加载字体

我已经包含了所有正确的库,并仔细检查了fonts.py文件是否确实位于…\Python37\…\OpenGL\GLUT\目录中,但是当我键入
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
(或任何其他位图字体)时,它会在我的代码中突出显示为错误

这是我调用以显示文本的函数:

def文本(self、x、y、r、g、b、text):
GL3F(r、g、b)
glRasterPos2f(x,y)
对于范围内的i(len(text)):
glutBitmapCharacter(GLUT\u位图\u乘以\u罗马\u 24,文本[i])
这就是我调用函数的方式:

epoch\u str=“epoch:{0}”。格式(self.epoch)
self.text(x,y,1.0,1.0,1.0,epoch_str)
如前所述,
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
在我的IDE(PyCharm)中突出显示为错误,如果我尝试运行它,会出现以下错误:

C:\Users\mickp\AppData\Local\Programs\Python\Python37\Python.exe C:/Users/mickp/PycharmProjects/Test/U\Matrix.py
回溯(最近一次呼叫最后一次):
文件“C:\Users\mickp\AppData\Local\Programs\Python\Python37\lib\site packages\OpenGL\GLUT\special.py”,第130行,在safeCall中
返回函数(*args,**已命名)
文件“C:/Users/mickp/PycharmProjects/Test/U_Matrix.py”,第142行,在渲染中
self.text(x,y,1.0,1.0,1.0,epoch_str)
文件“C:/Users/mickp/PycharmProjects/Test/U_Matrix.py”,第79行,文本
glutBitmapCharacter(GLUT\u位图\u乘以\u罗马\u 24,文本[i])
ctypes.ArgumentError:参数2::错误类型
带(),{}的GLUT Display回调失败:返回None参数2::类型错误
进程已完成,退出代码为1
我真的不明白问题出在哪里

编辑:上述错误已修复,这是一个单独的问题。
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
的根本问题仍然存在。见:

编辑2:完整代码(不太长):

编辑3:删除了完整代码(太长)。添加以下内容修复了我的问题:

#之前添加
glMatrixMode(GL_投影)
glPushMatrix()
glLoadIdentity()
gluOrtho2D(0.0,宽度,0.0,高度)
glMatrixMode(GLU模型视图)
glPushMatrix()
glLoadIdentity()
#这两条线在这里
epoch_str=“epoch:{0}”。格式(self.epoch)
self.text(x+10,y+10,0.0,1.0,0.0,epoch_str)
#添加在
glMatrixMode(GLU模型视图)
GLPOP矩阵()
glMatrixMode(GL_投影)
GLPOP矩阵()
glEnable(GL_纹理_2D)

文本实际上是隐藏的,因为我将其渲染到了一个对象后面的三维环境中,而不是在三维环境前面。

问题不是第一个参数
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
,而是第二个参数
text[I]
。要设置的参数必须是表示字符的整数值(
int
) 必须通过以下方式将字符转换为普通数字(
int
):

glutBitmapCharacter(GLUT\u位图\u乘以罗马24,ord(文本[i]))

对于文本中的c:
glutBitmapCharacter(GLUT_位图_TIMES_ROMAN_24,ord(c))

如果文本未出现在屏幕上,则重置投影和模型视图矩阵,并出于调试原因在位置(0,0)处绘制文本:

glMatrixMode(GL_投影)
glPushMatrix()
glLoadIdentity()
glMatrixMode(GLU模型视图)
glPushMatrix()
glLoadIdentity()
self.text(0.0,0.0,1.0,1.0,1.0,epoch_str)
glMatrixMode(GL_投影)
GLPOP矩阵()
glMatrixMode(GLU模型视图)
GLPOP矩阵()

另请参见

问题不是第一个参数
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
,而是第二个参数
text[i]
。要设置的参数必须是表示字符的整数值(
int
) 必须通过以下方式将字符转换为普通数字(
int
):

glutBitmapCharacter(GLUT\u位图\u乘以罗马24,ord(文本[i]))

对于文本中的c:
glutBitmapCharacter(GLUT_位图_TIMES_ROMAN_24,ord(c))

如果文本未出现在屏幕上,则重置投影和模型视图矩阵,并出于调试原因在位置(0,0)处绘制文本:

glMatrixMode(GL_投影)
glPushMatrix()
glLoadIdentity()
glMatrixMode(GLU模型视图)
glPushMatrix()
glLoadIdentity()
self.text(0.0,0.0,1.0,1.0,1.0,epoch_str)
glMatrixMode(GL_投影)
GLPOP矩阵()
glMatrixMode(GLU模型视图)
GLPOP矩阵()

另请参见

谢谢。这修复了它抛出的错误,但不幸的是原来的问题仍然存在。该程序现在编译并运行时没有错误,但我想要显示的文本完全丢失,
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
仍然在IDE中突出显示为错误。@Mick\u 17可能,但我无法修复此问题,因为看不到您的其余代码<代码>过多位图时间罗马24不再是问题。当然,我测试了代码,它对我来说很好。矩阵设置是什么?尝试
x=0
y=0
x=0
y=0
不起作用:(我想添加一个完整的代码,如果你想看一看……MICKY17到很多代码。试试这个答案的代码,测试你的功能。好,我已经解决了这个问题,谢谢你的帮助!我试过你的代码,它在3D环境中间显示文本,而不渲染3D对象。所以我认为它一直在那里,只是嗨。dden.谢谢。这修复了它抛出的错误,但不幸的是原始问题仍然存在。程序现在编译和运行时没有错误,但我想要显示的文本完全丢失,并且
GLUT\u BITMAP\u TIMES\u ROMAN\u 24
仍然在IDE中突出显示为错误。@Mick\u 17可能,但我无法修复,因为我可以我看不到你剩下的鳕鱼