RedWoft

To be or not to be, it is a question.
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.0f0.0f), vec2(-5.0f0.0f), vec2(-4.0f0.0f), 
      vec2(
-3.0f0.0f), vec2(-2.0f0.0f), vec2(-1.0f0.0f), 
      vec2( 
0.0f0.0f),
      vec2( 
6.0f0.0f), vec2( 5.0f0.0f), vec2( 4.0f0.0f), 
      vec2( 
3.0f0.0f), vec2( 2.0f0.0f), vec2( 1.0f0.0f)
      
   );
   
float arySamplerWeight[SAMPLER_NUMBER] = float[SAMPLER_NUMBER]
   (   
      
0.002216f0.008764f0.026995f0.064759f0.120985f0.176033f,
      
0.199471f,
      
0.176033f0.120985f0.064759f0.026995f0.008764f0.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.002216f0.008764f0.026995f0.064759f0.120985f0.176033f,
      
0.199471f,
      
0.176033f0.120985f0.064759f0.026995f0.008764f0.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: 已模糊

posted on 2010-06-21 14:20  RedWoft  阅读(1048)  评论(0)    收藏  举报