跳转至

模板测试

【目的】利用本次绘制的物体,产生一个区域,在下次绘制中利用这个区域做一些效果

【步骤】

  1. 模板缓冲更新:用于创建出一个模板区域,在下一帧再做使用
  2. 模板测试:用上一帧的模板缓冲,做一些操作

【模板缓冲区】与颜色缓冲区、深度缓冲区类似,模板缓冲区可以为屏幕上的每个像素保存一个无符号整数值(8位二进制,即256十进制)

【模板掩码函数】

  1. glStencilMask(0xFF); 每一位都可以被修改,即启用模板缓冲区的写入
  2. glStencilMask(0x00); 每一位都不可以被修改,即禁用模板缓冲写入

【模板测试的函数】什么情况通过模板测试,通过模板测试的像素才会被显示出来

  1. 掩码值mask和参考值ref值先做与操作
  2. 再把当前模板中的值stencil与掩码值mask做与操作
  3. 参考func中的方法是否可以通过

示例:绘制物体轮廓

  1. 开启并设置模板测试条件:只是通过测试,即本次绘制的所有片段都会通过测试并更新模板值
  2. 绘制物体并更新模板值
  3. 禁用模板缓冲写入
  4. 修改模板测试条件:没有模板值得片段才通过测试,这意味着这次绘制会丢掉之前绘制的区域(并不影响上次绘制,只会影响接下来的绘制)

参考文章

  1. 模板测试 - LearnOpenGL CN (learnopengl-cn.github.io)