【发布时间】:2011-07-25 09:40:45
【问题描述】:
我正在寻找一种方法来提高我的粒子系统性能,因为它在 FPS 方面的成本非常高。 这是因为我打电话:
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
我为我的应用程序中的每个粒子(可能在 1000 到 5000 个粒子之间)调用此方法。请注意,当增加到超过 1000 个粒子时,我的应用程序开始在 FPS 中下降。我用的是VBO:s,但是调用这个方法的时候性能太贵了。
有什么想法可以让粒子系统更高效吗?
编辑:这是我的粒子系统绘制事物的方式:
glBindTexture(GL_TEXTURE_2D, textureObject);
glBindBuffer(GL_ARRAY_BUFFER, vboVertexBuffer[0]);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vboTextureBuffer[0]);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndexBuffer[0]);
Vector3f partPos;
for (int i = 0; i < m_numParticles; i++) {
partPos = m_particleList[i].m_pos;
glTranslatef(partPos.x, partPos.y, partPos.z);
glDrawElements(GL_TRIANGLE_STRIP, mNumberOfIndices,
GL_UNSIGNED_SHORT, 0);
gl.glTranslatef(-partPos.x, -partPos.y, -partPos.z);
}
【问题讨论】:
-
坐标等使用什么数据类型?如果您使用的不是 GL_FLOAT,那么您会看到(巨大的)性能下降。
-
@Rookie:我有浮点值。
-
我知道这篇文章有点老了,但对于任何想知道的人来说,这是我发现的一个很棒的教程。 (我不是本教程的作者)。 opengl-tutorial.org/intermediate-tutorials/billboards-particles/…