# RainbowScreenSaver.frag

May 31st, 2020 (edited)
250
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. //TODO: RGB -> square instead fix RGB -> triangle
2. #ifdef GL_ES
3. precision mediump float;
4. #endif
5.
6. const float PI = 3.14159;
7.
8. uniform vec2 u_resolution;
9. uniform vec2 u_mouse;
10. uniform float u_time;
11.
12. float diatance(vec2 p1, vec2 p2){
13.     return (
14.         sqrt(
15.             pow((p2.y - p1.y),2.0) + pow((p2.x - p1.x),2.0)
16.     ));
17. }
18.
19. //Translating Points at an angle w.r.t center point using polar form of a straight line
20. //Also **note :
21.
22. void main() {
23.     vec2 res = u_resolution.xy;
24.     vec2 st, center = vec2(res.x/2.0,res.y/2.0);
25.     center.x += res.x * 0.5 * sin(u_time*3.0);center.y += res.y * 0.5 * cos(u_time*3.0);    //--rotating the center
26.     float dist = distance (gl_FragCoord.xy,center);                                         //   in circlular path
27.     float angle = atan((gl_FragCoord.y - center.y) / (gl_FragCoord.x - center.x));
28.
29.     angle = (angle + u_time/2.0);   //--small increment to angle to show animation, negate addition to
30.                                     //  rotate counter Clockwise
31.     if((gl_FragCoord.x - center.x) < 0.0)   //--atan() does not return angles in 2nd and 3rd quadrant
32.         angle += PI;                        //  so we need to write seperate code to implement that logic
33.     else if((gl_FragCoord.y - center.y) < 0.0)
34.         angle += 2.0*PI;
35.
36.     st.x = (dist * cos(angle)) / res.x; //--New color intensity after adding change to angle
37.     st.y = (dist * sin(angle)) / res.y;
38.
39.     st.x*= 1.0+st.x;
40.     st.y*= 1.0+st.y;
41.
42.     vec3 color;
43.     color = vec3(   //--passing color intensities as a multiple of positive sin() R[0,1] as a function of time to animate
44.         (1.0 - (st.y - st.x)*1.0)* abs(sin(u_time/2.0)),
45.         (1.0 - (st.x - st.y)*1.0)* abs(sin(u_time/2.0 + 2.0*PI/3.0)),
46.         (1.0 - ((st.x + st.y)/2.0)) * abs(sin(u_time/2.0 + 4.0*PI/3.0))
47.     );
48.
49.     gl_FragColor = vec4(color,1.0);
50. }
RAW Paste Data