GLSL學習_高斯濾波

Dsp Tian發表於2017-08-27

使用RenderMonkey:

從自帶的sobel修改的。

vertex:

複製程式碼
uniform float height;

varying vec4 vTexCoords00;
varying vec4 vTexCoords01;
varying vec4 vTexCoords02;
varying vec4 vTexCoords10;
varying vec4 vTexCoords11;
varying vec4 vTexCoords12;
varying vec4 vTexCoords20;
varying vec4 vTexCoords21;
varying vec4 vTexCoords22;

void main(void)
{
   vec4 Pos = gl_Vertex;

   gl_Position = vec4(Pos.xy,0, 1);
   
   vec4 BaseTexCoord;
   BaseTexCoord.x = 0.5 * (1.0 - Pos.x);
   BaseTexCoord.y = 0.5 * (1.0 + Pos.y);
   BaseTexCoord.zw = vec2(0.0, 1.0);
   
   float vOffset = (1.0 / height);
   
   vTexCoords00 = BaseTexCoord + vec4(-vOffset, -vOffset, 0.0, 0.0);
   vTexCoords01 = BaseTexCoord + vec4( 0.0,     -vOffset, 0.0, 0.0);
   vTexCoords02 = BaseTexCoord + vec4( vOffset, -vOffset, 0.0, 0.0);

   vTexCoords10 = BaseTexCoord + vec4(-vOffset,  0.0, 0.0, 0.0);
   vTexCoords11 = BaseTexCoord;  
   vTexCoords12 = BaseTexCoord + vec4( vOffset,  0.0, 0.0, 0.0);
   
   vTexCoords20 = BaseTexCoord + vec4(-vOffset,  vOffset, 0.0, 0.0);
   vTexCoords21 = BaseTexCoord + vec4( 0.0,      vOffset, 0.0, 0.0);
   vTexCoords22 = BaseTexCoord + vec4( vOffset,  vOffset, 0.0, 0.0);

}
複製程式碼

Fragment:

複製程式碼
uniform sampler2D BaseMap;

varying vec4 vTexCoords00;
varying vec4 vTexCoords01;
varying vec4 vTexCoords02;

varying vec4 vTexCoords10;
varying vec4 vTexCoords11;
varying vec4 vTexCoords12;

varying vec4 vTexCoords20;
varying vec4 vTexCoords21;
varying vec4 vTexCoords22;

void main(void)
{
   
   vec4 s00; vec4 s01; vec4 s02;
   vec4 s10; vec4 s11; vec4 s12;  
   vec4 s20; vec4 s21; vec4 s22;
  
   s00 = texture2DProj(BaseMap, vTexCoords00);
   s01 = texture2DProj(BaseMap, vTexCoords01);
   s02 = texture2DProj(BaseMap, vTexCoords02);

   s10 = texture2DProj(BaseMap, vTexCoords10);
   s11=  texture2DProj(BaseMap, vTexCoords11);   
   s12 = texture2DProj(BaseMap, vTexCoords12);
   
   s20 = texture2DProj(BaseMap, vTexCoords20);
   s21 = texture2DProj(BaseMap, vTexCoords21);
   s22 = texture2DProj(BaseMap, vTexCoords22);

   vec4 re=s00*0.0625+s01*0.125+s02*0.0625+
           s10*0.1250+s11*0.250+s12*0.1250+
           s20*0.0625+s21*0.125+s22*0.0625;
     
   gl_FragColor = re;
}
複製程式碼

 

相關文章