我正在制作一个涉及在屏幕上绘制大量重叠四边形的 2d 游戏。什么在前面什么并不重要。
如果我用从 0 向上的 z 值绘制每个四边形并设置 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);
}
或者只是将 z 值 0.0f 编码到着色器中。(第三个参数是 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 会更快。为什么不是?