2013-07-24 70 views
5

目前我正在与Cocos2D玩弄。当有通知重叠显示时,我希望能够模糊整个场景。我认为我可以用着色器来做到这一点(我是一个OpenGL的noob)。从我发现的是,有“fsh”文件包含着色器的一个算法。我发现了一个“gausian blurring”,但我怎么能添加这样一个着色器CCScene的Cocos2D?Cocos2d模糊与着色器

我似乎无法弄清楚这一点。

回答

5

我刚刚开始自己​​玩一点着色器。网络上有很多资料可供阅读和试用。我会指出你的方向,我认为有用的一些网址可以帮助你理解他们的工作方式。这可能会让你开始。

简单的教程,实现与着色器的灰阶效果(cocos2d的)

http://www.shaderdev.com/2013/09/16/full-scene-shader-effects-how-to-create-a-grayscale-pause-screen-using-ccrendertexture/

编码实验的博文:非常好看的着色效果。这就是我下面cocos2D上共享着色器...

http://coding-experiments.blogspot.com/2010/06/frosted-glass.html

有了这些你一定对你的方式。如果您觉得它们有用,请随意使用下面的着色器,这些来自第二个网址。

顶点着色器

attribute vec4 a_position; 
attirbute vec4 a_color; 
attribute vec2 a_texCoord; 

uniform mat4 u_MVPMatrix; 
varying lowp vec2 v_fragmentColor; 
varying lowp vec2 v_texCoord; 

void main() 
{ 
    gl_Position = CC_MVPMatrix * a_position; 
    v_fragmentColor = a_color; 
    v_texCoord = a_texCoord; 
} 

片段着色器

varying lowp vec4 v_fragmentColor; 
varying lowp vec2 v_texCoord; 
uniform sampler2D u_texture; 

float rand(vec2 co) 
{ 
    return fract(sin(dot(co.xy ,vec2(92.,80.))) + 
       cos(dot(co.xy ,vec2(41.,62.))) * 5.1); 
} 

void main() 
{ 
    vec2 rnd = vec2(0.0); 
    rnd = vec2(rand(v_texCoord),rand(v_texCoord)); 
    glFragColor = texture2D(u_texture, v_texCoord+rnd*0.05); 
} 
相关问题