From 178c4a3782aea07e66d39cbcb5cd770c92c3c6cb Mon Sep 17 00:00:00 2001 From: Luca Conte Date: Thu, 8 May 2025 14:24:14 +0200 Subject: [PATCH] u06-1 --- src/shaders/fragment.glsl | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/shaders/fragment.glsl b/src/shaders/fragment.glsl index 2b87f44..e5ac8a7 100644 --- a/src/shaders/fragment.glsl +++ b/src/shaders/fragment.glsl @@ -1,4 +1,28 @@ #version 330 core + +float pi = 3.14159; +vec3 hsvToRgb(vec3 hsl) { + while (hsl.x > 1) { + hsl.x -= 1; + } + int hi = int(floor(hsl.x * 6)); + float f = hsl.x * 6 - hi; + + float p = hsl.z * (1 - hsl.y); + float q = hsl.z * (1 - hsl.y * f); + float t = hsl.z * (1 - hsl.y * (1 - f)); + + switch (hi) { + case 0: return vec3(hsl.z, t, p); + case 1: return vec3(q, hsl.z, p); + case 2: return vec3(p, hsl.z, t); + case 3: return vec3(p, q, hsl.z); + case 4: return vec3(t, p, hsl.z); + case 5: return vec3(hsl.z, p, q); + default: return vec3(0); + } +} + in float fragValue; flat in int pattern; void main() { @@ -6,15 +30,15 @@ void main() { vec4 fragColor2 = vec4(0.0, 1.0, 0.0, 1.0); switch (pattern) { case 0: - gl_FragColor = mix(fragColor1, fragColor2, fragValue); + gl_FragColor = vec4(hsvToRgb(vec3(fragValue, 1, 1)), 1); break; case 1: - gl_FragColor = mix(fragColor1, fragColor2, step(0.5, fragValue)); + gl_FragColor = vec4(hsvToRgb(vec3(0, fragValue, 1)), 1); break; case 2: - gl_FragColor = mix(fragColor1, fragColor2, smoothstep(0.4, 0.6, fragValue)); + gl_FragColor = vec4(hsvToRgb(vec3(0, 1, fragValue)), 1); break; case 3: