【问题标题】:OpenGL procedural texture antialiasingOpenGL程序纹理抗锯齿
【发布时间】:2020-12-12 03:55:00
【问题描述】:

我使用简单的 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;
}

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

【问题讨论】:

  • 也许这篇关于filtering procedural textures的文章对你有帮助。
  • 我使用过类似的需要绘制网格线的应用程序。我最终在一次绘制调用中使用了几何线条。这是非常有效和准确的。

标签: opengl glsl shader fragment-shader pyopengl


【解决方案1】:

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

#version 420 core

sample smooth in vec2 f_TexCoord;

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

【讨论】:

  • 效果很好。不幸的是,仅适用于 420+ 版本。在其他情况下,着色器编译失败并出现以下错误:auxiliary storage qualifiers must come just before storage qualifiers。无论如何,非常感谢这个提示!
  • @Artem 谢谢(已修复 4.00 -> 4.20)。不客气。
猜你喜欢
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多