OpenGL 程序纹理抗锯齿

OpenGL procedural texture antialiasing

我使用简单的 GLSL 着色器制作了一个网格,将 纹理坐标 传递给 片段 着色器。它被应用到一个大比例平面上。

片段着色器:

#version 330 core

out vec4 fragColor;

smooth in vec2 f_TexCoord;

vec4 gridColor;

void main()
{
    if(fract(f_TexCoord.x / 0.0005f) < 0.025f || fract(f_TexCoord.y / 0.0005f) < 0.025f)
        gridColor = vec4(0.75, 0.75, 0.75, 1.0);
    else
        gridColor = vec4(0);
    // Check for alpha transparency
    if(gridColor.a != 1)
        discard;

    fragColor = gridColor;
}

如您所见,线条并不平滑,它们在 horizon 处开始 “闪烁”。 是否可以在其上应用某种 filtering/antialiasing ?我尝试增加样本数量(最多 4 个,因为更高的值会给我一个 qt 错误),但它对着色器没有影响。

切换到 GLSL 版本 4.20(至少),激活多重采样并使用 Auxiliary Storage Qualifier sample 作为顶点着色器输出(和片段着色器输入):

#version 420 core

sample smooth in vec2 f_TexCoord;

限定符导致 per-sample 插值。