模糊帧缓冲内容

时间:2015-06-18 09:15:20

标签: opengl-es opengl-es-2.0 blur

我可以模糊纹理而不是帧缓冲区吗?以下着色器模糊纹理:

#ifdef GL_ES
precision mediump float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

uniform vec2 resolution;
uniform float blurRadius;
uniform float sampleNum;

vec3 blur(vec2);

void main(void)
{
    vec3 col = blur(v_texCoord);
    gl_FragColor = vec4(col, 1.0) * v_fragmentColor;
}

vec3 blur(vec2 p)
{
    if (blurRadius > 0.0 && sampleNum > 1.0)
    {
        vec3 col = vec3(0);
        vec2 unit = 1.0 / resolution.xy;

        float r = blurRadius;
        float sampleStep = r / sampleNum;

        float count = 0.0;

        for(float x = -r; x < r; x += sampleStep)
        {
            for(float y = -r; y < r; y += sampleStep)
            {
                float weight = (r - abs(x)) * (r - abs(y));
                col += texture2D(CC_Texture0, p + vec2(x * unit.x, y * unit.y)).rgb * weight;
                count += weight;
            }
        }

        return col / count;
    }

    return texture2D(CC_Texture0, p).rgb;
}

如何模糊不是纹理像素,而是模糊已经绘制的帧缓冲区像素?

0 个答案:

没有答案