我正在寻找一种使用纹理遮盖整个视口的方法。在我的情况下,我想使用方格黑白图案(或任何2种颜色),只显示场景中黑色的部分。
最好的方法是使用剪裁蒙版,片段着色器或Alpha混合。我在SO上看过这篇文章:How to create Stencil buffer with texture (Image) in OpenGL-ES 2.0这似乎与我的需要相似,但我不完全理解如何处理discard关键字。它会适用于我的情况。
答案 0 :(得分:0)
假设您有黑色和白色方格纹格纹。首先,您需要设置模板测试以绘制蒙版:
glEnable(GL_STENCIL_TEST);
glDisable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glStencilFunc(GL_ALWAYS, 1, -1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
接下来画出方格纹理。这里的关键步骤(放弃的地方)是,您将片段着色器设置为仅绘制棋盘为黑色的片段(如果您愿意,可将其翻转为白色)。 discard关键字会跳过与您的条件不符的任何像素的渲染。
//in the fragment shader
if(sampleColor.r > 0.5) { discard; }
在此渲染步骤之后,您将拥有一个带有棋盘图像的模板缓冲区,其中一半缓冲区的模板值为0,另一半的模板值为1。
然后在模板缓冲区为== 1时启用模板测试时正常渲染。
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc(GL_EQUAL, 1, -1);