OpenGL-模板测试

OpenGL-模板测试


当片段着色器处理完一个片段之后,模板测试(Stencil Test)会开始执行 ,和深度测试一样,它也可能会 丢弃片段。接下来, 被保留的片段会进入深度测试 ,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,它叫做 模板缓冲(Stencil Buffer) ,我们可以在渲染的时候更新它来获得一些很有意思的效果。
Alt
一个模板缓冲中, (通常)每个模板值(Stencil Value)是8位的。所以每个像素/片段一共能有256种不同的模板值。我们可以将这些 模板值设置为我们想要的值,然后当某一个片段有某一个模板值的时候,我们就可以选择丢弃或是保留这个片段了。

应用 物体轮廓

Alt

通过使用GL_ALWAYS模板测试函数,我们 保证了箱子的每个片段都会将模板缓冲的模板值更新为1 。因为片段永远会通过模板测试,在绘制片段的地方,模板缓冲会被更新为参考值

现在模板缓冲在箱子被绘制的地方都更新为1了,我们将要 绘制放大 的箱子,但这次要 禁用模板缓冲的写入

glStencilFunc(GL_NOTEQUAL, 1, 0xFF);
glStencilMask(0x00); // 禁止模板缓冲的写入
glDisable(GL_DEPTH_TEST);
shaderSingleColor.use();
DrawTwoScaledUpContainers();

我们将模板函数设置为GL_NOTEQUAL,它会 保证我们只绘制箱子上模板值不为1的部分即只绘制箱子在之前绘制的箱子之外的部分。注意我们也禁用了深度测试,让放大的箱子,即边框,不会被地板所覆盖。

记得要在完成之后重新启用深度缓冲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值