2013-07-24 43 views
5

Hiện tại tôi đang đùa giỡn với Cocos2D. Tôi muốn có thể làm mờ toàn bộ cảnh khi có lớp phủ thông báo hiển thị.Cocos2d blur với shaders

Tôi nghĩ mình có thể làm điều này với các trình đổ bóng (tôi khá là OpenGL noob). Từ những gì tôi tìm thấy là có các tập tin "fsh" chứa một thuật toán cho trình đổ bóng. Tôi tìm thấy một cho "gausian blurring" nhưng làm thế nào tôi có thể thêm một shader như vậy cho một CCScene của Cocos2D?

Tôi không thể hình dung điều này.

Trả lời

5

Tôi vừa mới bắt đầu chơi một chút với bóng râm. Có rất nhiều tài liệu trên web để đọc và thử. Tôi sẽ chỉ cho bạn theo hướng của một số url tôi thấy hữu ích để có thể hiểu làm thế nào/những gì họ làm .. mà có thể giúp bạn bắt đầu.

đơn giản hướng dẫn để đạt được một hiệu ứng tông màu xám với shader (Cocos2D)

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

Mã hóa thí nghiệm blogpost: lớn đang tìm kiếm hiệu ứng đổ bóng. Đây là shader tôi chia sẻ cho Cocos2d dưới đây ...

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

Với những bạn chắc chắn trên con đường của bạn. Hãy sử dụng các trình đổ bóng bên dưới nếu bạn thấy chúng hữu ích, chúng được lấy từ url thứ hai.

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

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