使用着色器显示3d场景后,使用QGLWidget.renderText呈现文本

时间:2013-03-14 21:35:08

标签: python qt opengl pyside

我正在编写一个绘制3D场景的3D应用程序,并希望将包含文本的一些UI元素叠加到此3D场景中。为此,我使用Python和PySide和PyOpenGL库。我在ubuntu linux(专有驱动程序)上使用NVIDIA卡。

我的paintGL功能看起来非常像这样:

def paintGL(self):
    # Various clears...
    self.draw_3d_scene()
    self.draw_ui()

draw_3d_scene方法中,我使用自定义着色器显示我的3d对象(主要是球体)。着色器和顶点缓冲区对象在代码的不同部分初始化,如果重要,则在调用initializeGL之后。

draw_ui中,我尝试以这种方式绘制文本:

def draw_ui(self):
    glUseProgram(0)
    glColor3f(0.0, 0.0, 0.0) # Black text
    self.renderText(100, 100, "Hello, World")

如果我以这种方式运行程序,我会获得3D场景而不是文本。如果我同时评论着色器/顶点缓冲区初始化代码(当然还有三维场景绘图),我会正确地获取文本。如果我离开着色器/顶点缓冲区初始化代码并删除绘图部分,我就不会得到文本。

我预计使用glUseProgram(0)会将我还原回固定管道并让我正确地绘制文本。

有人知道我做错了什么吗?

编辑1:

我试图更好地隔离程序,我认为我找到了解决方案(我仍然不明白为什么会干扰renderText):

似乎与glBindBuffer有关。当我使用Vertex Buffers时,我忘了解开它们。现在,如果我使用:

glBindBuffer(GL_ARRAY_BUFFER, 0)

绑定缓冲区后,我终于可以看到显示的文本

0 个答案:

没有答案