2013-07-24 17 views
5

Attualmente sto giocando con Cocos2D. Voglio essere in grado di sfocare l'intera scena quando viene visualizzata una sovrapposizione di notifica.Cocos2d sfocatura con shader

Pensavo di poterlo fare con gli shader (sono piuttosto un noob OpenGL). Da quello che ho trovato è che ci sono file "fsh" che contengono un algoritmo per lo shader. Ne ho trovato uno per "gausian blurring" ma come posso aggiungere uno shader ad un CCScene di Cocos2D?

Non riesco a capirlo.

risposta

5

Ho appena iniziato a suonare un po 'con gli shader. C'è molto materiale sul web da leggere e provare. Ti indicherò la direzione di alcuni URL che ho trovato utile per capire come/cosa fanno .. che potrebbe farti iniziare.

semplice tutorial per ottenere un effetto scala di grigi con shader (Cocos2d)

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

Coding esperimenti blogpost: grande ricerca effetto shader. Questo è lo shader condivido per Cocos2d qui sotto ...

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

con quelli che sono sicuramente sulla buona strada. Sentiti libero di usare gli shader qui sotto anche se li trovi utili, questi sono stati presi dal secondo URL.

vertex

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

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