2013-07-24 3 views
5

В настоящее время я играю с Cocos2D. Я хочу, чтобы иметь возможность размыть всю сцену, когда отображается отображение наложения уведомлений.Размытие Cocos2d с шейдерами

Я думал, что смогу сделать это с помощью шейдеров (я довольно OpenGL noob). Из того, что я нашел, есть файлы fsh, которые содержат алгоритм для шейдера. Я нашел один для «gausian blurring», но как добавить такой шейдер в CCScene Cocos2D?

Я не могу понять это.

ответ

5

Я только немного начал играть с шейдерами. В Интернете есть много материала для чтения и тестирования. Я укажу вам в сторону некоторых URL-адресов, которые я нашел полезными, чтобы понять, как они работают, и что вы можете начать.

Простой учебник для достижения полутонового эффекта с шейдерами (cocos2d)

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

Coding эксперименты BlogPost: большой глядя шейдерный эффект. Это шейдер делюсь для 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); 
} 
Смежные вопросы