繁体   English   中英

OpenGL ES2剪贴蒙版

[英]Opengl ES2 clipping mask

我正在寻找一种使用纹理遮罩整个视口的方法。 就我而言,我想使用黑白方格图案(或任意两种颜色),并且只显示场景中黑色的部分。

最好的方法是使用剪贴蒙版,片段着色器或Alpha混合。 我在这篇文章上看到过: 如何在OpenGL-ES 2.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);

接下来绘制方格纹理。 此处的关键步骤(需要丢弃的地方)是将片段着色器设置为仅绘制棋盘格为黑色的片段(或根据需要将其翻转为白色)。 reject关键字会跳过任何不符合您的条件的像素的渲染。

//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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM