Cocos2d模糊着色器

时间:2013-07-24 19:37:52

标签: ios opengl-es cocos2d-iphone shader blur

目前我正在玩Cocos2D。我希望能够在显示通知叠加层时模糊整个场景。

我以为我可以使用着色器(我是一个OpenGL noob)来做这件事。从我发现的是有“fsh”文件,其中包含着色器的算法。我发现了一个“gausian blurring”但是如何将这样的着色器添加到Cocos2D的CCScene中呢?

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

1 个答案:

答案 0 :(得分:5)

我自己刚刚开始使用着色器。网上有很多材料可供阅读和试用。我会指出你的方向,我发现有用的方法可以让你了解他们的工作方式。这可能会让你开始。

使用着色器(Cocos2D)实现灰度效果的简单教程

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

编码实验blogpost:很棒的着色效果。这是我在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);
}
相关问题