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

1. 模板测试(Stencil Test)

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

在这里插入图片描述

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

eg.

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

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

1.1 使用模板缓冲

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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/thefist11cc/article/details/124162555