#include #include #include "../lib/djstdlib/core.h" real32 hue_to_rgb(real32 p, real32 q, real32 t) { if (t < 0) { t += 1; } else if (t > 1) { t -= 1; } if (t < 1.0f / 6) return p + (q - p) * 6 * t; if (t < 1.0f / 2) return q; if (t < 2.0f / 3) return p + (q - p) * (2.0f / 3 - t) * 6; return p; }; glm::vec3 hsl_to_hex(real32 h, real32 s, real32 l) { h /= 360; s /= 100; l /= 100; real32 r, g, b; if (s == 0) { r = g = b = l; } else { real32 q = l < 0.5f ? l * (1 + s) : l + s - l * s; real32 p = 2 * l - q; r = hue_to_rgb(p, q, h + 1.0f / 3); g = hue_to_rgb(p, q, h); b = hue_to_rgb(p, q, h - 1.0f / 3); } return glm::vec3(r, g, b); } glm::vec3 color_from_index(int index) { real32 color_wheel_cycle = floorf(index / 6.0f); real32 darkness_cycle = floorf(index / 12.0f); real32 spacing = (360.0f / 6.0f); real32 offset = color_wheel_cycle == 0 ? 0 : spacing / (color_wheel_cycle + 2); real32 hue = spacing * (index % 6) + offset; real32 saturation = 100.0f; real32 lightness = 1.0f / (2 + darkness_cycle) * 100; return hsl_to_hex(hue, saturation, lightness); }