清除内容重叠的像素

时间:2013-04-28 00:02:39

标签: c++ opengl gpgpu

我在OpenGL中将一个四网格渲染到一个离屏帧缓冲区,可能有重叠的四边形(更多的碎片变成一个帧缓冲像素)。所有四边形都位于y = 0的平面上。 我想知道是否有一种简单的方法可以将颜色(例如黑色)设置为具有重叠四边形的像素(最好不需要额外的着色器传递,使用简单的OpenGL功能)。

1 个答案:

答案 0 :(得分:1)

您可以使用模板缓冲区来计算每个像素的“过度绘制”,例如

glClear(GL_STENCIL_BUFFER_BIT)<
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_INCR, GL_INCR);
glStencilFunc(GL_ALWAYS, 0, 0xffffff);

这将简单地将模板缓冲区清除为0,并为之后绘制的每个片段(以及您生成的所有片段,但未通过深度测试)增加它。绘制完所有四边形后,可以绘制另一个具有所需颜色的全屏四边形,但模板测试设置为

glStencilFunc(GL_GREATER, 1, 0xffffff);

仅影响具有多个四边形的像素。 这仍然需要某种“额外通过”,但模板测试非常有效。