123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "pch.h"
- //////////////////////////////////////////////////////////////////////////////
- //
- // Color
- //
- //////////////////////////////////////////////////////////////////////////////
- float HueComponent(float hue)
- {
- hue = abs(mod(hue + 3, 6) - 3);
- if (hue > 2) {
- return 0;
- } else if (hue > 1) {
- return (2 - hue);
- } else {
- return 1;
- }
- }
- void Color::SetHSBA(float hue, float saturation, float brightness, float alpha)
- {
- hue = hue * 6;
- float white = (1 - saturation);
- m_r = brightness * (white + saturation * HueComponent(hue ));
- m_g = brightness * (white + saturation * HueComponent(hue - 2.0f));
- m_b = brightness * (white + saturation * HueComponent(hue + 2.0f));
- m_a = alpha;
- }
- void Color::GetHSB(float& h, float& s, float& b)
- {
- float c0 = m_r;
- float cm = m_g;
- float c1 = m_b;
- //
- // find the largest component
- //
- if (c0 > cm) {
- swap(c0, cm);
- }
- if (cm > c1) {
- swap(cm, c1);
- }
- if (c0 > cm) {
- swap(c0, cm);
- }
- //
- // solve for h, s, b
- //
- b = c1;
- s = (b - c0) / b;
- h = (cm + b * (s - 1)) / (b * s);
- //
- // shift the hue
- //
- if (c1 == m_b) {
- // blue is the largest component
-
- if (m_g == c0) {
- h = -2 + h;
- } else {
- h = -2 - h;
- }
- } else if (c1 == m_g) {
- // green is the largest component
- if (m_r == c0) {
- h = 2 + h;
- } else {
- h = 2 - h;
- }
- } else {
- // red is the larget component
- if (m_b == c0) {
- h = h;
- } else {
- h = -h;
- }
- }
- h = h / 6.0f;
- }
- const Color Color::s_colorWhite(1, 1, 1);
- const Color Color::s_colorRed(1, 0, 0);
- const Color Color::s_colorGreen(0, 1, 0);
- const Color Color::s_colorBlue(0, 0, 1);
- const Color Color::s_colorYellow(1, 1, 0);
- const Color Color::s_colorMagenta(1, 0, 1);
- const Color Color::s_colorCyan(0, 1, 1);
- const Color Color::s_colorBlack(0, 0, 0);
- const Color Color::s_colorGray(0.5f, 0.5f, 0.5f);
|