写入深度缓冲区而不在OpenGL中进行深度测试(非着色器)

时间:2010-12-12 11:42:43

标签: opengl

在OpenGL中,是否有可能绘制一系列不检查深度的多边形(因此它们将始终绘制在其前面绘制的其他多边形的前面,关于它们的z位置)

但同时,他们仍然写入深度缓冲区?

我认为这可以使用着色器,但是现在我无法访问它。

2 个答案:

答案 0 :(得分:17)

严格来说(来自man page):

  

如果禁用深度测试,则不会更新深度缓冲区。

但是......你可以启用深度测试,而没有任何片段未通过测试:

glDepthFunc(GL_ALWAYS);
glEnable(GL_DEPTH_TEST);

当然,你通过这样做得到最后的Z,而不是最接近视图。

答案 1 :(得分:4)

你只能用两次传球来达到目的。第一个是仅使用颜色掩码填充深度缓冲区:

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);

再次启用颜色书写,禁用深度测试并按顺序渲染多边形序列。