GLSLで虹を描いた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#ifdef GL_ES precision mediump float; #endif #define PI 3.14159265359 uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; vec3 colorA = vec3(0.149,0.141,0.912); vec3 colorB = vec3(0.818,1.000,0.971); float plot (vec2 st, float pct){ return smoothstep( pct-0.04, pct, st.y) - smoothstep( pct, pct+0.04, st.y); } void main() { vec2 st = gl_FragCoord.xy/u_resolution.xy; vec3 color = vec3(0.0); vec3 pct = vec3(st.y); pct.r = smoothstep(0.0,1.0, st.y); pct.g = smoothstep(0.0,1.0, st.y); pct.b = smoothstep(0.0,1.0, st.y); color = mix(colorA, colorB, pct); //Red pct = vec3(sin(st.x*PI)*0.9); color = mix(color,vec3(0.9020 ,0.000 ,0.07059),plot(st,pct.r)); //Orenge pct = vec3(sin(st.x*PI)*0.9)-vec3(0.04); color = mix(color,vec3(0.9529 ,0.5961 ,0.000),plot(st,pct.r)); //Yellow pct = vec3(sin(st.x*PI)*0.9)-vec3(0.08); color = mix(color,vec3(1.000 ,0.9451 ,0.000),plot(st,pct.r)); //Green pct = vec3(sin(st.x*PI)*0.9)-vec3(0.12); color = mix(color,vec3(0.000 ,0.6000 ,0.2667),plot(st,pct.r)); //Aqua pct = vec3(sin(st.x*PI)*0.9)-vec3(0.16); color = mix(color,vec3(0.000 ,0.4078 ,0.7176),plot(st,pct.r)); //Blue pct = vec3(sin(st.x*PI)*0.9)-vec3(0.2); color = mix(color,vec3(0.1137 ,0.1255 ,0.5333),plot(st,pct.r)); //Purple pct = vec3(sin(st.x*PI)*0.9)-vec3(0.24); color = mix(color,vec3(0.5725 ,0.02745 ,0.5137),plot(st,pct.r)); gl_FragColor = vec4(color,1.0); } |