问题描述
我使用一个简单的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;
}
如您所见,线条不平滑,并且在地平线上开始“闪烁” 。 是否可以对其应用某种过滤/抗锯齿功能?我尝试增加样本数量(最多4个,因为更高的值会给我带来qt错误),但对着色器没有影响。
解决方法
至少切换到GLSL版本4.20,激活多重采样,并将Auxiliary Storage Qualifier sample
用于顶点着色器输出(和片段着色器输入):
#version 420 core
sample smooth in vec2 f_TexCoord;
限定符会导致每个样本的插值。