2013-07-24 8 views
5

Momentan spiele ich mit Cocos2D. Ich möchte in der Lage sein, die gesamte Szene zu verwischen, wenn ein Benachrichtigungs-Overlay angezeigt wird.Cocos2d Unschärfe mit Shadern

Ich dachte, ich könnte dies mit Shadern (ich bin ein ziemlich OpenGL noob). Von dem, was ich gefunden habe, ist, dass es "fsh" Dateien gibt, die einen Algorithmus für den Shader enthalten. Ich habe einen für "gausian blurring" gefunden, aber wie kann ich einen solchen Shader zu einem CCScene von Cocos2D hinzufügen?

Ich kann nicht scheinen, dies herauszufinden.

Antwort

5

Ich habe gerade angefangen ein bisschen mit Shadern zu spielen. Im Internet gibt es viel Material zum Lesen und Ausprobieren. Ich werde Sie in die Richtung einiger URLs weisen, die ich nützlich fand, um zu verstehen, wie/was sie tun .. das könnte Sie beginnen.

Einfache Tutorial einen Graustufen- Effekt mit Shadern (Cocos2D)

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

Coding Experimente Blogpost zu erreichen: große Shader-Effekt suchen. Dies ist der Shader-I unten Cocos2D teilen ...

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

mit denen Sie sicher auf Ihrem Weg sind. Fühlen Sie sich frei, die Shader unten auch zu benutzen, wenn Sie sie nützlich finden, diese wurden von der zweiten URL genommen.

Vertexshader

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

Fragment-Shader

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