PyOpenGL非常慢

时间:2015-10-03 10:23:02

标签: python performance opengl

我是OpenGL的新手,想要学习使用它来进行一些我想用3d图形重写的2D游戏。因此,我开始阅读关于如何与Pythhon一起使用并安装PyOpenGL的内容。

我的问题是我的节目显示一个120-fps限制的简单立方体只能以25 fps运行。我发现所有的性能损失都在于OpenGL部分,但我无法弄清楚到底在哪里。

我的问题是: - 使用Python运行缓慢的OpenGL是正常的吗? - 我的旧笔记本是问题的一部分吗?

以下是我用于显示多维数据集的代码:

def draw(self):
    glBegin(GL_QUADS)#info for OGL: treat following code as surface drawing code
    for surface in self.surfaces:
        x = 0
        for vertex in surface:
            x+=1
            glColor3fv(self.colors[x])
            glVertex3fv(self.verticles[vertex])
    glEnd()

    glBegin(GL_LINES) #info for OGL: treat following code as line drawing code
    for edge in self.edges:
        for vertex in edge:
            glVertex3fv(self.verticles[vertex]) #pass each verticle in the verticles list to glVertex3fv, which creates edges
    glEnd() #info for OGL:no more code incoming

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

不,OpenGL运行缓慢是不正常的。这里的缓慢来自于使用立即模式(glBegin(),glEnd())。基本上,每个帧都会逐个调用这些python命令,并且卡必须立即生成输出。这在C中很慢,更不用说逐行解释的Python了。

你想要的是事先准备顶点缓冲区(通常称为VBO),然后在渲染时将它们提交给批处理渲染。

看看这个wikibook的现代OpenGL(> = 2.0)方法:https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Introduction。它是在C / C ++中,但您可以按照函数调用和原则进行操作。