下面介绍的是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了、、~
效果图:
??
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|