| @@ -31,6 +31,30 @@ float segdist(vec2 p1, vec2 p2, vec2 a) | |||||
| return distance(a, mix(p1, p2, t)); | return distance(a, mix(p1, p2, t)); | ||||
| } | } | ||||
| vec3 hsv2rgb(vec3 c) | |||||
| { | |||||
| vec3 tmp = abs(fract(c[0] + vec3(3.0, 2.0, 1.0) / 3.0) * 6.0 - 3.0); | |||||
| return c[2] * mix(vec3(1.0), clamp((tmp - 1.0), 0.0, 1.0), c[1]); | |||||
| } | |||||
| vec3 rgb2hsv(vec3 c) | |||||
| { | |||||
| vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); | |||||
| vec4 v1 = mix(vec4(c.bg, K.wz), | |||||
| vec4(c.gb, K.xy), | |||||
| step(c.b, c.g)); | |||||
| vec4 v3 = mix(vec4(v1.x, v1.yw, c.r), | |||||
| vec4(c.r, v1.yzx), | |||||
| step(v1.x, c.r)); | |||||
| float chroma = v3.r - min(v3.a, v3.g); | |||||
| float h = abs(v3.b + (v3.a - v3.g) / (6.0 * chroma + 1.0e-10)); | |||||
| float s = chroma / (v3.r + 1.0e-10); | |||||
| float v = v3.r; | |||||
| return vec3(h, s, v); | |||||
| } | |||||
| void main(void) | void main(void) | ||||
| { | { | ||||
| float width = 800.0; | float width = 800.0; | ||||
| @@ -75,7 +99,12 @@ void main(void) | |||||
| lum = pow(1.0 - lum, 1.0 / 2.4); | lum = pow(1.0 - lum, 1.0 / 2.4); | ||||
| /* Choose some funny colours */ | /* Choose some funny colours */ | ||||
| gl_FragColor = vec4(mix(p.x, 1.0, lum), lum, lum, 1.0); | |||||
| vec4 col = vec4(mix(p.x, 1.0, lum), lum, lum, 1.0); | |||||
| col.rgb = hsv2rgb(rgb2hsv(col.rgb) * vec3(1.0, 1.0, 0.5) + vec3(p.x, 0.5, 0.0)); | |||||
| col.rgb = hsv2rgb(rgb2hsv(col.rgb)); | |||||
| col.rgb = hsv2rgb(rgb2hsv(col.rgb)); | |||||
| col.rgb = hsv2rgb(rgb2hsv(col.rgb)); | |||||
| gl_FragColor = col; | |||||
| } | } | ||||
| [vert.hlsl] | [vert.hlsl] | ||||