我正在编写一个3D应用程序,它可以绘制一个3D场景,并希望将一些包含文本的UI元素覆盖到这个3D场景中。为此,我使用Python以及PySide和PyOpenGL库。我在ubuntulinux上使用NVIDIA卡(专用驱动程序)。在
我的paintGL函数看起来像这样:
def paintGL(self):
# Various clears...
self.draw_3d_scene()
self.draw_ui()
在draw_3d_scene
方法中,我使用自定义着色器来显示我的三维对象(主要是球体)。着色器和顶点缓冲区对象是在代码的不同部分初始化的,如果重要的话,在调用initializeGL之后。在
在draw_ui
中,我试图用这种方式绘制文本:
如果我以这种方式运行程序,我得到的是三维场景,而不是文本。如果我注释了shader/vertexbuffer初始化代码(当然还有3d场景绘图),我就可以正确地获得文本。如果我离开shader/vertexbuffer初始化代码并移除绘图部分,则无法获得文本。在
我希望使用glUseProgram(0)将使我返回到固定管道,并让我正确地绘制文本。在
有人知道我做错了什么吗?在
编辑1:
我正在尝试更好地隔离程序,我想我找到了解决方案(我仍然不明白为什么这会干扰renderText):
似乎与glBindBuffer有关。当我使用顶点缓冲时,我忘了解开它们。现在如果我使用:
glBindBuffer(GL_ARRAY_BUFFER, 0)
绑定缓冲区后,我终于可以看到显示的文本
目前没有回答
相关问题 更多 >
编程相关推荐