首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python在OpenGL中显示列表的效率

用Python在OpenGL中显示列表的效率
EN

Stack Overflow用户
提问于 2011-12-12 01:36:20
回答 1查看 541关注 0票数 1

我一直在使用Python自学PyOpenGL编程,现在正在使用它进行我的第一个项目。这个项目是一个音乐可视化器(与白浪没有不同),使用许多独立移动和独立着色的立方体。

我目前的方法是为一个立方体拥有一个显示列表,并使用glColor和glTranslatef调用它反复更改颜色和位置(伪代码):

代码语言:javascript
运行
复制
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还是学习顶点缓冲?

注意:我发现禁用错误检查会大大提高性能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-12 05:23:54

这就好像常识是错的。在绘制glTranslatef(-x,-y,-z)之后,手动还原转换( cube ),这样不仅会无缘无故地调用glPopMatrix两次,而且也没有用,因为您为它做了所有的工作。正确的代码如下所示:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8469034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档