GLSL片段着色器:检测当前片段是否在多边形的边缘

时间:2015-01-01 15:14:44

标签: opengl fragment glsl shader edge-detection

我尝试编写一个通过减少多边形边缘的不透明度来进行抗锯齿处理的着色器。所以基本上,如果片段位于多边形的边缘,则将不透明度除以2。如何检测片段是否位于多边形的边缘?

1 个答案:

答案 0 :(得分:2)

您可以采用一种涉及几何着色器的方法,我已经概述了here。这个特定的答案是绘制线框覆盖,但原理实际上是相同的。如果在三角形内插入重心坐标,则可以告诉距离三角形边缘一定距离的所有碎片,并使用它来调整不透明度。

然而,您必须意识到,这样做会为您的渲染带来顺序依赖性。传统的基于样本的抗锯齿或美化模糊过滤器(如FXAA和MLAA / SMAA)无法通过改变混合行为来实现,并且不需要特殊的绘制顺序考虑。但是如果你想要混合柔化的不透明几何体的边缘,你需要像半透明几何体那样从前到后绘制(旧的GL_POLYGON_SMOOTH特征,它的功能与你的非常相似描述,有同样的限制)。