在GLSL中,顶点属性的透视正确插值是默认设置-可以通过使用非透视限定符对特定的顶点属性禁用它。除了在后处理着色器中,我从未见过禁用透视校正的正确插值-还有其他用例吗?另外,就性能而言,它甚至有所不同吗?

#1 楼

用例仅受您的想象力限制! noperspective表示该属性插值在整个三角形上,就像该三角形在屏幕表面上完全平坦一样。您可以使用以下方法进行抗锯齿的线框渲染:输出到最近边缘的屏幕空间距离,变化为noperspective并将其用作像素着色器中的覆盖率。

或者如果您要进行非真实感拍摄渲染并希望在屏幕空间中像半色调那样进行图案处理,可以在用于纹理化的UV上启用noperspective

是否会带来性能差异?可能,但是您可能不会注意到(功能较弱的图形硬件可能会引起例外)。大多数GPU由一系列并行执行的管道阶段组成,从某种意义上讲,您只需为最昂贵的阶段支付费用。如果光栅化对您来说是最有限的部分,那么您可能会看到与按像素跳过的划分有所不同。我想在渲染阴影贴图或深度预先通过时最有可能,但是这些插值属性最少。