1uniform sampler2D u_Tex0;
2varying vec2 v_TexCoord;
3varying vec2 v_TexCoord2;
4uniform float u_Time;
5uniform vec2 u_Resolution;
6uniform mat3 u_TextureMatrix;
7uniform vec2 u_MapCoords;
8const float PI = 3.1415926535897932;
9
10// speed
11const float speed = 0.03;
12const float speed_x = 0.03;
13const float speed_y = 0.03;
14
15// geometry
16const float intensity = 20.;
17const int steps = 2;
18const float frequency = 3.0;
19const int angle = 20; // better when a prime
20
21// reflection and emboss
22const float delta = 350.;
23const float intence = 100.0;
24const float emboss = 0.2;
25
26//---------- crystals effect
27float col(vec2 coord)
28{
29 float delta_theta = 2.0 * PI / float(angle);
30 float col = 0.0;
31 float theta = 0.0;
32 for(int i = 0; i < steps; i++) {
33 vec2 adjc = coord;
34 theta = delta_theta*float(i);
35 adjc.x += cos(theta)*u_Time*speed + u_Time * speed_x;
36 adjc.y -= sin(theta)*u_Time*speed - u_Time * speed_y;
37 col = col + cos( (adjc.x*cos(theta) - adjc.y*sin(theta))*frequency)*intensity;
38 }
39 return cos(col);
40}
41
42void main(void)
43{
44 vec2 p = v_TexCoord, c1 = p, c2 = p;
45 float cc1 = col(v_TexCoord2);
46
47 c2.x += u_Resolution.x/delta;
48 float dx = emboss*(cc1-col(c2))/delta;
49
50 c2.x = p.x;
51 c2.y += u_Resolution.y/delta;
52 float dy = emboss*(cc1-col(c2))/delta;
53
54 c1.x += dx;
55 c1.y += dy;
56
57 float alpha = 1.+dot(dx,dy)*intence;
58 gl_FragColor = texture2D(u_Tex0,c1)*(alpha);
59}
60