2

我有一些使用 pyglet 库创建批处理的代码。满载时,整个东西包含大约 10 000 个四边形。现在,当我运行渲染整个场景的脚本(它是一个完全静态的场景)时,我得到了 3FPS。在我用于场景渲染器的原型中,我将使用一些缓慢而草率的 Python 代码构建地图,而对于完全相同的场景,这些代码恰好也以 3FPS 运行。由于 pyglet 中的批次是使用 C++ 管理的,因此我有一种令人不安的感觉,即我遗漏了一些明显导致批次以 3FPS 绘制的东西。

这是我的场景初始化代码:

glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 10000.)
glMatrixMode(GL_MODELVIEW)
glClearColor(94.0/255.0, 161.0/255.0, 255.0/255.0, 0.5)
glClearDepth(1.0)
glShadeModel(GL_FLAT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)  
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

这是运行每一帧以渲染场景的代码:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0, 0, -1*self.mapZoomLevel)
glRotatef(self.mapPitch/5, 1, 0, 0)
glRotatef(self.mapRotation, 0, 0, 1)
glTranslatef(self.mapX, self.mapY, 0)
self.mapPrimitive.batch.draw()
4

2 回答 2

1

如果您使用的是 CPython,则有一个快捷方式。Pypy 已经支持 pyglet 有一段时间了(http://pypy.org/compat.html)。切换到 Pypy,你可以轻松获得性能提升,并且基本上不需要更改你的代码。希望对你有所帮助。

于 2013-04-05T02:31:19.200 回答
0

如果场景是静态的,则应该使用显示列表轻松修复。一些供应商通过在内部将显示列表转换为 VBO 和 glMultiDrawElements() 来优化显示列表,因此一些糟糕的 10k 四边形应该没有问题。它就像四行代码。

于 2012-02-13T12:11:53.970 回答