我正在开发一个涉及绘制大量重叠四边形到屏幕的2D游戏。前后顺序并不重要。
如果我为每个四边形设置从0开始递增的z值,并设置glDepthFunc(GL_LESS),就可以获得相当不错的速度提升,这是可以预期的。 这样做是为了避免绘制那些完全或部分被其他四边形遮挡住的四边形。 因此,我使用类似以下方式绘制四边形:
如果我为每个四边形设置从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会更快。为什么不这样做呢?