我是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
非常感谢任何帮助。
答案 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 ++中,但您可以按照函数调用和原则进行操作。