我在2D游戏中渲染粒子。每个粒子是四边形(2个三角形)。如何使绘图尽可能快?所有粒子都具有相同的纹理,我只是改变它的位置。
现在我正在为每个粒子使用glVertexPointer和glDrawArrays。所以我每次都向GPU发送4个顶点。
还有其他方法可以更快吗?
我正在使用OpenGL ES 1.1(iPhone)
谢谢!
答案 0 :(得分:3)
你做的每个绘图调用(glDrawArrays)都很昂贵。每个粒子执行一次这样做是非常经常的。您可以通过一次绘制调用绘制所有粒子;只需设置一个包含纹理坐标的所有三角形顶点和另一个大数组的大数组,并调用glVertexPointer / glDrawArrays一次 - 这是glVertexPointer的强大功能:一次调用中相同类型的任意几何体。 :)
对于你正在做的事情,你还应该研究点精灵(GL_POINTS),它也可以作为微小的纹理四边形。它们只是2D,因此您无法将纹理映射到Z轴,但如果您的粒子只是一遍又一遍的相同纹理的2D四边形,则点精灵可能会完全符合您的要求。
答案 1 :(得分:0)
有一种方法可以在一个绘图程序中完成所有操作。我认为这是通过在每个四边形之后添加一个额外的顶点,这与前一个顶点相同,但我可能是错的。
编辑:稍微调查一下,看起来你需要两个;基本上是一个之后,一个之前。它确实增加了相当多的额外顶点,但我从经验中知道,它在iPhone上做了巨大的积极差异,在一次绘制操作中完成所有操作(我们从纹理中绘制文本,所以基本上是相同的事情)。
EDIT2:还要注意,我指的是使用GL_TRIANGLE_STRIP - 如果你使用的是GL_TRIANGLES,你就不需要额外的顶点......除了之外,无论如何你都要做额外的相同数量,因为每个第二个三角形重复2次。