2013-07-24 35 views
5

現在、私はCocos2Dを使っています。私は、通知オーバーレイが表示されているときにシーン全体をぼかすことができるようにしたい。シェーダー付きのCocos2dブラー

私はシェーダでこれをできると思っていました(私はかなりOpenGL noobです)。私が見つけたことは、シェーダのためのアルゴリズムを含む "fsh"ファイルがあることです。私は "gausian blurring"の1つを見つけましたが、どのようにしてCocos2DのCCSceneにそのようなシェーダを追加できますか?

私はこれを理解できないようです。

答えて

5

私はちょうどシェイダーで少し演奏し始めました。読んで試してみるには、ウェブ上に多くの資料があります。私はあなたがどのように/彼らが何をしているかを理解するのに役立つと分かったいくつかのURLの方向にあなたを指摘します。偉大なシェーダ効果を探して:

簡単なチュートリアルでは、シェーダとグレースケール効果(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

を共有するシェーダです。あなたが有用であることがわかったら、以下のシェーダーを自由に使用してください。これらは、2番目の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); 
}