渲染管道像素阶段“模板测试”

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了渲染管道像素阶段“模板测试”相关的知识,希望对你有一定的参考价值。

1. 模板测试(Stencil Test)

不管这个片元有没有通过测试,我们都可以根据模板测试和后面的深度测试结果来修改模板缓冲区:GPU会首先读取模板缓冲区中该片元位置的模板值,然后将该值和读取到的参考值进行比较,这个比较函数可以是由开发者指定的,例如小于时舍弃该片元,或者大于等于时舍弃该片元。如果这个片元没有通过这个测试,该片元就会被舍弃。也可以保持模板缓冲区不变,也可以在对应的位置+1等等。

  • 模板测试默认是不开启的,我们可以通过glEnable(GL_STENCIL_TEST)指令将其打开,
  • 实现平面镜效果、限制渲染的区域,比如平面阴影和物体轮廓等功能。

eg.

  • 可以通过glStencilMask来设置一个掩码,该掩码会将要写入缓存区的值进行AND操作,默认情况下掩码值有1,不影响输出。

  • glStencilFunc和glStencilOp函数来设置模板函数,控制在模板测试失败或成功时的行为。

1.1 使用模板缓冲

step1. 开启模板缓冲写入。
step2. 渲染物体,更新模板缓冲。
step3. 关闭模板缓冲写入。
step4. 渲染(其他)物体,这次基于模板缓冲内容丢弃特定片段。

需要注意的是,每次绘制都要清空模板缓冲(Stencil Buffer)

以上是关于渲染管道像素阶段“模板测试”的主要内容,如果未能解决你的问题,请参考以下文章

渲染管道像素阶段“混合”

渲染管道像素阶段“深度测试”

渲染管道像素阶段“深度测试”

渲染管道光栅阶段一“总览”

渲染管道光栅阶段一“总览”

渲染管道整体流程