在OpenGl / GLES中用颜色填充png时如何给出平滑的边缘

时间:2014-03-05 07:09:00

标签: opengl opengl-es fragment shader

Right one is the orginal and left one is sampled by fragment shader

这是我的片段着色器

 #ifdef GL_ES
                 #define LOWP lowp
                 precision mediump float;
                 #else
                 #define LOWP  
                 #endif
                 varying LOWP vec4 v_color;
                 varying vec2 v_texCoords;
                 uniform sampler2D u_texture;
                 void main()
                 {
                        vec4 final_color = v_color * texture2D(u_texture, v_texCoords);
                   if (final_color.w != 0.0){
                                final_color = v_color;
                   }

                   gl_FragColor = final_color;
                 }

2 个答案:

答案 0 :(得分:2)

看起来原始图像是抗锯齿的。尝试使用v_color的颜色和纹理中的alpha:

gl_FragColor.xyz = v_color.xyz;
gl_FragColor.w = texture2D(u_texture, v_texCoords).w;

答案 1 :(得分:0)

if (final_color.w >= 0.0){
    final_color.w = clamp(final_color.w, 0.0,1.0);
    final_color.xyz = v_color.xyz;
}

    gl_FragColor = final_color;

我发现我也可以使用它,但@ GuyRT的方式更有效