2014-03-01 43 views
2

首先感谢我的英语,这不是我的母语,但我希望你能明白我想问什么。GLSL“zoom”like blur

所以基本上我想模糊它的中心周围的图像。 这里的场景的图像:(喜欢的东西的蓝色圆圈为中心)

enter image description here

模糊之类的东西,我希望这样的事情以后:

enter image description here

目前我矩形渲染300次,每次比前一次大1px。但是这种方法很慢...

那么有可能用GLSL着色器来实现这种效果吗? (我试过径向模糊,但结果并不是我想要的。)

解决! 我觉得这是不是最好的方式,但它的作品... 这里的片段着色器代码:

precision mediump float; 

uniform float lightRadius; 
uniform vec2 resolution; 

uniform sampler2D Texture; 
varying vec2 texCoord; 

void main() 
{ 
    vec2 step = vec2(1.0/resolution.x, 1.0/resolution.y); 

    vec2 cent = vec2(.5,.5); 
    vec2 dir = texCoord - cent; 
    dir = normalize(dir); 

    float dist = length(texCoord - cent); 

    bool s = false; 
    vec3 col = vec3(1,1,1); 
    for (float i=0.0; i< lightRadius.x;i+=1.0) 
    { 
     vec2 pix = cent + (dir * i) * step; 

     float dist2 = length(pix - cent); 

     if(dist2>dist) 
      break; 

     vec4 color = texture2D(Texture, pix); 

     if(color.a > 0.5) 
     { 
      s = true; 
      break; 
     } 
    } 

    if(s == true){ 
     gl_FragColor = vec4(0,0,0,1); 
    }else{ 
     gl_FragColor = vec4(1,1,1,0); 
    } 
} 

回答

1

如果要模糊周围的一些中心点的形象,那么你真的正在寻找一个径向模糊。

如果你想要某种“godray”效果,我可以建议阅读 - this article

我希望它有帮助。

+0

基于我设法制造的godray材料。谢谢。 – robot9706

+1

@ robot9706这可能更直接相关:http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html。它甚至有一个[“缩放”模糊图像](http://http.developer.nvidia.com/GPUGems3/elementLinks/27fig03.jpg)。 – jozxyqk