我一直在使用Python自学PyOpenGL编程,现在正在使用它进行我的第一个项目。这个项目是一个音乐可视化器(与白浪没有不同),使用许多独立移动和独立着色的立方体。
我目前的方法是为一个立方体拥有一个显示列表,并使用glColor和glTranslatef调用它反复更改颜色和位置(伪代码):
glPushMatrix()
glPushMatrix() #Why do I need to call this twice?
for x in xrange(...):
for z in xrange(...):
y = height[x,z] #numpy array
glTranslatef(x,y,z)
glColor((r,g,b))
glCallList(cube)
glTranslatef(-x,-y,-z)
glPopMatrix()
glPopMatrix()
以这种方式,在我开始注意到框架之前,我可以渲染大约10,000个立方体,这是可以的,但是我希望它更快,这样我的程序就可以移植到功能较差的计算机上,所以我的问题是:
--什么是呈现许多相同但独立的对象的最有效的方法?我会获得比现在使用显示列表更好的性能吗?,我应该使用C还是学习顶点缓冲?
注意:我发现禁用错误检查会大大提高性能。
发布于 2011-12-12 05:23:54
这就好像常识是错的。在绘制glTranslatef(-x,-y,-z)
之后,手动还原转换( cube
),这样不仅会无缘无故地调用glPopMatrix
两次,而且也没有用,因为您为它做了所有的工作。正确的代码如下所示:
for x in xrange(...):
for z in xrange(...):
y = height[x,z] #numpy array
glPushMatrix() #Remember the matrix
glTranslatef(x,y,z) #change the matrix
glColor((r,g,b))
glCallList(cube)
glPopMatrix() #Restore tha matrix as it was before glTranslate changed it
https://stackoverflow.com/questions/8469034
复制相似问题