下图是使用高斯模糊和未使用高斯模糊的效果图对比

正常图片

高斯模糊后

1、标准高斯模糊

原理:

每个像素周围对应的像素乘以对应的算子,然后除以算子的综合

算子为

1 2 1
2 4 2
1 2 1

fragment shader

varying vec2 M_coord;varying vec3 M_normal;varying vec3 M_WordPos;uniform sampler2D U_MainTexture;uniform sampler2D U_SubTexture;void main(){    // 1 2 1    // 2 4 2    // 1 2 1    int coreSize=3;    int halfCoreSize=coreSize/2;    float texelOffset=1/100.0;    vec4 color = vec4(1.0);    float nGaussionCore[9] = float[](1.0, 2.0, 1.0, 2.0, 4.0, 2.0, 6.0, 2.0, 1.0);    int index = 0;    for(int y=0;y

2、横向模糊

与高斯模糊类似 不过只是模糊横向分量

// 水平高斯模糊varying vec2 M_coord;varying vec3 M_normal;varying vec3 M_WordPos;uniform sampler2D U_MainTexture;uniform sampler2D U_SubTexture;void main(){    int coreSize=3;    int halfCoreSize=coreSize/2;    float texelOffset=1/100.0;    vec4 color = vec4(0.0);    float nGaussionCore[5] = float[](0.22, 0.19, 0.12, 0.08, 0.01);    color = texture2D(U_MainTexture, M_coord) * nGaussionCore[0];    for (int i=1; i<5; ++i)    {        color += texture2D(U_MainTexture, vec2(M_coord.x + i * texelOffset, M_coord.y))                 * nGaussionCore[i];        color += texture2D(U_MainTexture, vec2(M_coord.x + i * texelOffset, M_coord.y))                 * nGaussionCore[i];    }    gl_FragColor=color ;}

3、纵向模糊

与高斯模糊类似 不过只是模糊纵向分量

varying vec2 M_coord;varying vec3 M_normal;varying vec3 M_WordPos;uniform sampler2D U_MainTexture;uniform sampler2D U_SubTexture;void main(){    int coreSize=3;    int halfCoreSize=coreSize/2;    float texelOffset=1/100.0;    vec4 color = vec4(0.0);    float nGaussionCore[5] = float[](0.22, 0.19, 0.12, 0.08, 0.01);    color = texture2D(U_MainTexture, M_coord) * nGaussionCore[0];    for (int i=1; i<5; ++i)    {        color += texture2D(U_MainTexture, vec2(M_coord.x, i * texelOffset + M_coord.y))                 * nGaussionCore[i];        color += texture2D(U_MainTexture, vec2(M_coord.x, i * texelOffset + M_coord.y))                 * nGaussionCore[i];    }    gl_FragColor=color ;}