gpt4 book ai didi

python - 使用Python在OpenGL中显示列表的效率?

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:59 26 4
gpt4 key购买 nike

我一直在使用 Python 包装器 PyOpenGL 自学 OpenGL 编程,现在正在使用它开发我的第一个项目。这个项目是一个音乐可视化工具(与whitecap没有什么不同),使用许多独立移动和独立着色的立方体。

我当前的方法是为一个立方体提供一个显示列表,并使用 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 个立方体,这没关系,但我希望它更快,这样我的程序就可以移植到能力较差的计算机上,所以我的问题是:

What would be the most efficient way to render many identical but independent objects, and will I get much better performance than I am now using display lists? Should I be using C or learning vertex buffering?

注意:我发现禁用错误检查可以显着提高性能。

最佳答案

这就像常识是错误的。您在绘制立方体后手动恢复变换(glTranslatef(-x,-y,-z)),这样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

关于python - 使用Python在OpenGL中显示列表的效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com