我正在制作一个2d游戏,在屏幕上绘制大量重叠的四边形。前面的东西并不重要。
如果我画出每个四边形,z值从0开始向上,并设置glDepthFunc(GL_LESS),我会得到很好的速度提升,正如你所期望的那样。
这是为了避免绘制完全隐藏或部分隐藏在其他四边形后面的四边形。
所以我用这样的东西画四边形:
float small = (float(1)/1000000);
for (int iii = 0; iii < 100000; iii++) {
freeSpace = bullets[iii]->draw(opengl, freeSpace, iii*small);
}
然而,由于我不使用z值来表示实际深度,所以我似乎可以继续:
for (int iii = 0; iii < 100000; iii++) {
freeSpace = bullets[iii]->draw(opengl, freeSpace, 0.0f);
}
或者只将0.0f的z值编码到着色器中。(第三个参数是z值,并且最终在着色器中被设置为gl_position而没有改变。)
奇怪的是,第二种方法(每次都将z值设置为0.0f)的帧速率几乎不到前者的一半。
为什么会这样?它们都使用glDepthFunc(GL_LESS)和
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 100000*(2*3));
还是一样。我认为,如果每次将z设置为0.0f会更快。为什么不是?