61 lines
1.6 KiB
Plaintext
61 lines
1.6 KiB
Plaintext
//径向模糊
|
||
|
||
CCEffect %{
|
||
techniques:
|
||
- passes:
|
||
- vert: vs
|
||
frag: fs
|
||
blendState:
|
||
targets:
|
||
- blend: true
|
||
rasterizerState:
|
||
cullMode: none
|
||
properties:
|
||
texture: { value: white }
|
||
u_point: { value: [0.5, 0.5] }
|
||
u_resolution: { value: [1280, 720] }
|
||
u_Strength: { value: 0.125 }
|
||
}%
|
||
|
||
CCProgram vs %{ // 顶点Shader模块开始
|
||
#include <cc-global>
|
||
precision highp float; //定义float高精度
|
||
in vec3 a_position; // 顶点Shader 从渲染管道里面获取的顶点信息,使用attribute来修饰;
|
||
in vec2 a_uv0; // 纹理坐标;
|
||
out vec2 uv0; // 传递给着色Shader,varying 来修饰,进行插值
|
||
void main () {
|
||
gl_Position = cc_matViewProj * vec4(a_position, 1);
|
||
uv0 = a_uv0;
|
||
}
|
||
}%
|
||
|
||
CCProgram fs %{
|
||
precision highp float;
|
||
in vec2 uv0;
|
||
uniform sampler2D texture;
|
||
uniform ARGS{
|
||
vec2 u_resolution;
|
||
vec2 u_point;
|
||
float u_Strength;
|
||
};
|
||
void mainImage( out vec4 fragColor, in vec2 fragCoord )
|
||
{
|
||
// const float u_Strength = 0.125;
|
||
const int Samples = 64; //multiple of 2
|
||
vec2 uv = fragCoord.xy;
|
||
vec2 dir = (fragCoord.xy-u_point.xy);
|
||
vec4 color = vec4(0.0,0.0,0.0,0.0);
|
||
for (int i = 0; i < Samples; i += 2) //operating at 2 samples for better performance
|
||
{
|
||
color += texture2D(texture,uv+float(i)/float(Samples)*dir*u_Strength);
|
||
color += texture2D(texture,uv+float(i+1)/float(Samples)*dir*u_Strength);
|
||
}
|
||
fragColor = color/float(Samples);
|
||
}
|
||
|
||
void main(void)
|
||
{
|
||
mainImage(gl_FragColor, uv0);
|
||
}
|
||
}%
|