Cocos2d中使用着色器实现模糊效果

5

目前我正在使用Cocos2D进行开发。当有通知覆盖显示时,我想要能够模糊整个场景。

我认为可以通过着色器实现这一点(我是OpenGL新手)。我发现有一些“fsh”文件包含了着色器的算法。我找到了一个用于“高斯模糊”的文件,但我应该如何将这样的着色器添加到Cocos2D的CCScene中呢?

我似乎无法弄清楚这个问题。

1个回答

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

如果您使用这些内容,那么您一定已经开始着手处理了。如果您发现以下着色器有用的话,可以自由使用它们,这些着色器来自第二个url。

顶点着色器

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接