下面介绍的是opengl 实现的径向模糊,可用于实现放射性效果。
#ifdef GL_ES
 precision mediump float;
 #endif
 uniform vec2 centerpos;
 uniform float GlowRange; 
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
 void main() 
 { 
  vec4 clraverge=vec4(0,0); 
  float range=GlowRange,count=0,x1,y1;
 vec2 cpos=centerpos; 
  for( float j = 1; j<=range ; j += 1 ) 
 {
  if(cpos.x-v_texCoord.x==0)
  {
  x1=v_texCoord.x;
  y1=v_texCoord.y+(cpos.y-v_texCoord.y)*j/(6*range);
  }
  else
  {
  float k=(cpos.y-v_texCoord.y)/(cpos.x-v_texCoord.x);
  x1=v_texCoord.x+(cpos.x-v_texCoord.x)*j/200;
  if((cpos.x-v_texCoord.x)*(cpos.x-x1)<0) x1=cpos.x;
  y1=cpos.y-cpos.x*k+k*x1;
  if(x1<0.0||y1<0.0||x1>1.0||y1>1) 
  {
  continue;
  }
  }
 clraverge+=texture2D( CC_Texture0,vec2(x1,y1) );
 count+=1;
 }
 clraverge/=count;
  gl_FragColor =clraverge;
 }
centerpos为径向中心点,GlowRange为径向范围。其基本思想是模糊沿着中心点向外一条直线上的点,采样值可以自己确定,效果 好就ok了、、~
效果图: