Gaussian Blur-GLSL
/* @desc: Horizontal Blur */
#version 130
uniform int g_iViewPortSize;
uniform float g_fDistribRange;
uniform sampler2D g_SourceMap;
in vec2 g_vec2FragTexCoord;
out vec4 g_vec3FragColor;
// @desc: The entry of fragment shader.
void main(void)
{
#define SAMPLER_NUMBER 13
vec2 arySamplerDistribution[SAMPLER_NUMBER] = vec2[SAMPLER_NUMBER]
(
vec2(-6.0f, 0.0f), vec2(-5.0f, 0.0f), vec2(-4.0f, 0.0f),
vec2(-3.0f, 0.0f), vec2(-2.0f, 0.0f), vec2(-1.0f, 0.0f),
vec2( 0.0f, 0.0f),
vec2( 6.0f, 0.0f), vec2( 5.0f, 0.0f), vec2( 4.0f, 0.0f),
vec2( 3.0f, 0.0f), vec2( 2.0f, 0.0f), vec2( 1.0f, 0.0f)
);
float arySamplerWeight[SAMPLER_NUMBER] = float[SAMPLER_NUMBER]
(
0.002216f, 0.008764f, 0.026995f, 0.064759f, 0.120985f, 0.176033f,
0.199471f,
0.176033f, 0.120985f, 0.064759f, 0.026995f, 0.008764f, 0.002216f
);
vec4 vec4Result = vec4(0.0f);
for (int i = 0; i < SAMPLER_NUMBER; ++i)
{
vec4Result += texture2D(g_SourceMap, g_vec2FragTexCoord + arySamplerDistribution[i]/g_iViewPortSize*g_fDistribRange)*arySamplerWeight[i];
}
g_vec3FragColor = vec4Result;
}
/* @desc: Vertical Blur */
#version 130
uniform int g_iViewPortSize;
uniform float g_fDistribRange;
uniform sampler2D g_SourceMap;
in vec2 g_vec2FragTexCoord;
out vec4 g_vec3FragColor;
// @desc: The entry of fragment shader.
void main(void)
{
#define SAMPLER_NUMBER 13
vec2 arySamplerDistribution[SAMPLER_NUMBER] = vec2[SAMPLER_NUMBER]
(
vec2(0.0f, -6.0f), vec2(0.0f, -5.0f), vec2(0.0f, -4.0f),
vec2(0.0f, -3.0f), vec2(0.0f, -2.0f), vec2(0.0f, -1.0f),
vec2(0.0f, 0.0f),
vec2(0.0f, 6.0f), vec2(0.0f, 5.0f), vec2(0.0f, 4.0f),
vec2(0.0f, 3.0f), vec2(0.0f, 2.0f), vec2(0.0f, 1.0f)
);
float arySamplerWeight[SAMPLER_NUMBER] = float[SAMPLER_NUMBER]
(
0.002216f, 0.008764f, 0.026995f, 0.064759f, 0.120985f, 0.176033f,
0.199471f,
0.176033f, 0.120985f, 0.064759f, 0.026995f, 0.008764f, 0.002216f
);
vec4 vec4Result = vec4(0.0f);
for (int i = 0; i < SAMPLER_NUMBER; ++i)
{
vec4Result += texture2D(g_SourceMap, g_vec2FragTexCoord + arySamplerDistribution[i]/g_iViewPortSize*g_fDistribRange)*arySamplerWeight[i];
}
g_vec3FragColor = vec4Result;
}
#version 130
uniform int g_iViewPortSize;
uniform float g_fDistribRange;
uniform sampler2D g_SourceMap;
in vec2 g_vec2FragTexCoord;
out vec4 g_vec3FragColor;
// @desc: The entry of fragment shader.
void main(void)
{
#define SAMPLER_NUMBER 13
vec2 arySamplerDistribution[SAMPLER_NUMBER] = vec2[SAMPLER_NUMBER]
(
vec2(-6.0f, 0.0f), vec2(-5.0f, 0.0f), vec2(-4.0f, 0.0f),
vec2(-3.0f, 0.0f), vec2(-2.0f, 0.0f), vec2(-1.0f, 0.0f),
vec2( 0.0f, 0.0f),
vec2( 6.0f, 0.0f), vec2( 5.0f, 0.0f), vec2( 4.0f, 0.0f),
vec2( 3.0f, 0.0f), vec2( 2.0f, 0.0f), vec2( 1.0f, 0.0f)
);
float arySamplerWeight[SAMPLER_NUMBER] = float[SAMPLER_NUMBER]
(
0.002216f, 0.008764f, 0.026995f, 0.064759f, 0.120985f, 0.176033f,
0.199471f,
0.176033f, 0.120985f, 0.064759f, 0.026995f, 0.008764f, 0.002216f
);
vec4 vec4Result = vec4(0.0f);
for (int i = 0; i < SAMPLER_NUMBER; ++i)
{
vec4Result += texture2D(g_SourceMap, g_vec2FragTexCoord + arySamplerDistribution[i]/g_iViewPortSize*g_fDistribRange)*arySamplerWeight[i];
}
g_vec3FragColor = vec4Result;
}
/* @desc: Vertical Blur */
#version 130
uniform int g_iViewPortSize;
uniform float g_fDistribRange;
uniform sampler2D g_SourceMap;
in vec2 g_vec2FragTexCoord;
out vec4 g_vec3FragColor;
// @desc: The entry of fragment shader.
void main(void)
{
#define SAMPLER_NUMBER 13
vec2 arySamplerDistribution[SAMPLER_NUMBER] = vec2[SAMPLER_NUMBER]
(
vec2(0.0f, -6.0f), vec2(0.0f, -5.0f), vec2(0.0f, -4.0f),
vec2(0.0f, -3.0f), vec2(0.0f, -2.0f), vec2(0.0f, -1.0f),
vec2(0.0f, 0.0f),
vec2(0.0f, 6.0f), vec2(0.0f, 5.0f), vec2(0.0f, 4.0f),
vec2(0.0f, 3.0f), vec2(0.0f, 2.0f), vec2(0.0f, 1.0f)
);
float arySamplerWeight[SAMPLER_NUMBER] = float[SAMPLER_NUMBER]
(
0.002216f, 0.008764f, 0.026995f, 0.064759f, 0.120985f, 0.176033f,
0.199471f,
0.176033f, 0.120985f, 0.064759f, 0.026995f, 0.008764f, 0.002216f
);
vec4 vec4Result = vec4(0.0f);
for (int i = 0; i < SAMPLER_NUMBER; ++i)
{
vec4Result += texture2D(g_SourceMap, g_vec2FragTexCoord + arySamplerDistribution[i]/g_iViewPortSize*g_fDistribRange)*arySamplerWeight[i];
}
g_vec3FragColor = vec4Result;
}

图1: 未模糊

图2: 已模糊
浙公网安备 33010602011771号