OpenGL延迟着色
OpenGL延迟着色简介
看来我们对延迟着色技术的实现是正确的,但是如果您仔细观察,我们会注意到上一课最后列出的许多缺点。首先,由于背面的夹持,当相机进入光源区域时,光线消失了。第二个问题与光范围的限制有关。事实是,由于我们使用光源周围的球体来选择要进行计算的像素,并且该球体在光栅化器之前投影到屏幕空间中,因此屏幕空间中被球体覆盖的每个像素都将用于计算中,即使它很远(并且很可能是光源不可用的)。
称为模板缓冲区(模板缓冲区或模板缓冲区)的OpenGL功能将在这种情况下为我们提供帮助。模板缓冲区与颜色和深度缓冲区并排交互并交换分辨率(对于颜色缓冲区中的每个像素,模板缓冲区中都有一个像素)。模板缓冲区中的像素类型是整数,通常为1个字节。模板缓冲与现实世界中的纸模完成相同的工作。模版通常用于通过将字母或其他元素切成纸来打印字母或其他元素。在OpenGL中,模板缓冲区用于约束要为其调用片段着色器的像素。
模板缓冲区是使用模板测试附加的,模板测试是我们首次使用的一个像素功能。以与深度测试类似的方式,模版测试可用于在调用像素着色器之前丢弃像素。它通过将当前像素与参考值进行比较来工作。我们可以使用以下几种功能:
永远过去
总是失败
大于/小于
大于或等于/小于或等于
掠夺
不相等
根据模板测试和深度测试的结果,我们可以对模板中记录的值进行操作。提供以下操作:
保持价值不变
将模具中的值替换为0
增加/减少值
反转值中的位
在以下情况下,可以配置各种操作:
模具测试失败
深度测试失败
深度测试成功
此外