Learn高级OpenGL笔记10模板测试

模板测试

  • 物体轮廓

片段着色器处理完一个片段后,模板测试会执行,和深度测试一样,可能会丢弃片段。
被保留的片段进入深度测试,会丢弃更多的片段,模板测试是根据又一个缓冲来进行的,叫做模板缓冲。
一个模板缓冲中,每个模板值是8位的,可以将这些模板值设置为我们想要的值,然后当某一个片段有某一个模板值的时候,我们就可以选择丢弃或是保留这个片段了。
每个窗口库都需要为你配置一个模板缓冲。GLFW自动做了这件事,所以我们不需要告诉GLFW来创建一个,但其它的窗口库可能不会默认给你创建一个模板库,所以记得要查看库的文档。
模板缓冲首先会被清除为0,之后在模板缓冲中使用1填充了一个空心矩形。场景中的片段将会只在片段的模板值为1的时候会被渲染(其它的都被丢弃了)。
模板缓冲操作允许我们在渲染片段时候将模板缓冲设定为一个特定的值。通过渲染时候修改模板缓冲的内容,写入了模板缓冲。

物体轮廓

在绘制(需要添加轮廓的)物体之前,将模板函数设置为GL_ALWAYS,每当物体的片段被渲染时,将模板缓冲更新为1。
渲染物体。
禁用模板写入以及深度测试。
将每个物体缩放一点点。
使用一个不同的片段着色器,输出一个单独的(边框)颜色。
再次绘制物体,但只在它们片段的模板值不等于1时才绘制。
再次启用模板写入和深度测试。
除了物体轮廓之外,模板测试还有很多用途,比如在一个后视镜中绘制纹理,让它能够绘制到镜子形状中,或者使用一个叫做阴影体积(Shadow Volume)的模板缓冲技术渲染实时阴影。模板缓冲为我们已经很丰富的OpenGL工具箱又提供了一个很好的工具。

你可能感兴趣的:(opengl)