GLSL边框着色器

时间:2012-06-20 16:15:09

标签: ios glsl opengl-es-2.0 shader

我正在尝试编写着色器以在文本周围添加边框。它编译并运行正常,但边框是颗粒状和别名。有什么建议让它更好吗?

Shader

这是我编写的第一个着色器所以对API没有太多了解。可以对任何示例代码进行评论吗?我不想只是复制并粘贴一个答案;我想了解它。

此外,当我将文本设置得更小时,我遇到了问题,最好用这张图片说明。有关解决这个问题的任何建议吗?

Shader

边缘检测也可能更好。到目前为止,我利用了用于输入的抗锯齿纹理具有0.0 < alpha < 1.0的边缘

的事实

到目前为止,我有这个:

#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform vec4 u_borderColor;
uniform float u_width;
uniform float u_height;

void main()
{
    mediump vec4 total = vec4(0.0);

    float alpha = texture2D(u_texture, v_texCoord).a; 
    //If somewhere between complete transparent and completely opaque
    if (alpha > 0.0 && alpha < 1.0)
    {
        total.rgb = u_borderColor.rgb;
        total.a *= u_borderColor.a;
        gl_FragColor = u_borderColor;
    }
    else
    {
        gl_FragColor = texture2D(u_texture, v_texCoord);
    }
}

2 个答案:

答案 0 :(得分:4)

为什么不将gl_FragColor的值设置为total? Alpha不再正确维护....

接下来,total.a = 1 - alpha; (从外到内)

或类似的变体:

total.a = abs(0.5 - alpha); (混合双方)

在混合时可能更有意义。

答案 1 :(得分:0)

在代码中,如果字母为gl_FragColor = u_borderColor,我会看到您的设置(0,0,0,0)与总数>0 <1相同。首先将您的总数更改为其他对比色,并将代码用于图像。但是文本有不同的弯曲,这使得它变得颗粒状,所以需要将它改变为没有代码就无法说出的渲染。 如果我错了,请建议 谢谢