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

2024-03-29 14:50:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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中,我试图用这种方式绘制文本:

^{pr2}$

如果我以这种方式运行程序,我得到的是三维场景,而不是文本。如果我注释了shader/vertexbuffer初始化代码(当然还有3d场景绘图),我就可以正确地获得文本。如果我离开shader/vertexbuffer初始化代码并移除绘图部分,则无法获得文本。在

我希望使用glUseProgram(0)将使我返回到固定管道,并让我正确地绘制文本。在

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

编辑1:

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

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

glBindBuffer(GL_ARRAY_BUFFER, 0)

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


Tags: 对象代码文本self程序ui方式场景