OpenGL程序纹理抗锯齿

问题描述

我使用一个简单的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,1.0);
    else
        gridColor = vec4(0);
    // Check for alpha transparency
    if(gridColor.a != 1)
        discard;

    fragColor = gridColor;
}

enter image description here

如您所见,线条不平滑,并且在地平线上开始“闪烁” 。 是否可以对其应用某种过滤/抗锯齿功能?我尝试增加样本数量(最多4个,因为更高的值会给我带来qt错误),但对着色器没有影响。

解决方法

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

#version 420 core

sample smooth in vec2 f_TexCoord;

限定符会导致每个样本的插值。