From 66dad82dc63a5baa5c5d03b7d2620b0f3a613e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Mon, 14 Feb 2022 20:36:07 +0100 Subject: [PATCH] Added ColorHSV --- GlitchyEngine/src/Renderer/ColorHSV.bf | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 GlitchyEngine/src/Renderer/ColorHSV.bf diff --git a/GlitchyEngine/src/Renderer/ColorHSV.bf b/GlitchyEngine/src/Renderer/ColorHSV.bf new file mode 100644 index 0000000..0764a68 --- /dev/null +++ b/GlitchyEngine/src/Renderer/ColorHSV.bf @@ -0,0 +1,44 @@ +using GlitchyEngine.Math; +using System; + +namespace GlitchyEngine.Renderer +{ + struct ColorHSV + { + public float H; + public float S; + public float V; + + public this(float h, float s, float v) + { + H = h; + S = s; + V = v; + } + + public static explicit operator ColorRGB(ColorHSV hsv) + { + float c = hsv.V * hsv.S; + float x = c * (1.0f - Math.Abs((hsv.H / 60.0f) % 2.0f - 1.0f)); + + float m = hsv.V - c; + + ColorRGB rgb_ = ?; + + if (hsv.H < 60.0f) + rgb_ = ColorRGB(c, x, 0); + else if (hsv.H < 120.0f) + rgb_ = ColorRGB(x, c, 0); + else if (hsv.H < 180.0f) + rgb_ = ColorRGB(0, c, x); + else if (hsv.H < 240.0f) + rgb_ = ColorRGB(0, x, c); + else if (hsv.H < 300.0f) + rgb_ = ColorRGB(x, 0, c); + else if (hsv.H < 360.0f) + rgb_ = ColorRGB(c, 0, x); + + return .(rgb_.Red + m, rgb_.Green + m, rgb_.Blue + m); + } + } +} \ No newline at end of file