3

我正在尝试编写一个着色器来为文本添加边框。它编译并运行正常,但边框呈颗粒状且有锯齿。有什么建议可以让它变得更好吗?

着色器

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

此外,当我缩小文本时,我遇到了一个问题,这张图片可以很好地解释这一点。请问有什么解决这个问题的建议吗?

着色器

边缘检测也可以更好。到目前为止,我利用了我用于输入的抗锯齿纹理具有边缘的事实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);
    }
}
4

2 回答 2

4

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

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

或类似的变体:

total.a = abs(0.5 - alpha); (两边混合)

混合时可能更有意义。

于 2012-06-20T18:34:42.707 回答
0

在代码中,我看到如果 alphagl_FragColor = u_borderColor是. 首先将您的总数更改为其他一些对比色,然后您的代码适用于图像。但是文本有不同的弯曲,这使得它变得颗粒状,所以需要改变它的渲染,没有代码就不能说。如果我错了请建议谢谢(0,0,0,0)>0 <1

于 2012-06-21T01:08:25.183 回答