.[ ČeskéHry.cz ].
Převod hsl-hsv

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Goblin



Založen: 10. 05. 2014
Příspěvky: 23

PříspěvekZaslal: 30. listopad 2017, 16:16:52    Předmět: Převod hsl-hsv Odpovědět s citátem

Visí někde vzorec, který by vysvětlil fungování hsl míchání barev tak, abych je mohl jednoduše zadáním hodnot převést na hsv (přinejhorším rgb)? Opravdu jsem to googlil, ale skripty které jsem našel to dělají buď obráceně, nebo naprosto neintuitivně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 1. prosinec 2017, 13:00:38    Předmět: Odpovědět s citátem

https://www.wolframalpha.com/input/?i=HSL+0.09,+0.95,+0.85&lk=3
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 2. prosinec 2017, 15:29:35    Předmět: Re: Převod hsl-hsv Odpovědět s citátem

No třeba na wikipedii visí: https://en.wikipedia.org/wiki/HSL_and_HSV

pokud stačí HSL=>RGB a RGB=>HSV:
(předpokládám H ve stupních a S/L/R/G/B 0..1)

kód:

vec3 HSLtoRGB(float h, float s, float l)
{
   h = clamp<float>(h, 0, 360);
   s = clamp<float>(s, 0, 1);
   l = clamp<float>(l, 0, 1);

   int ih = (int)(h / 60.0f);
   int hi = ih % 6;

   float f = (float)fmod(h/60.0f, 2.0f);

   float C = (1.0f - (float)fabs(2*l - 1))*s;
   float X = C * (1.0f - (float)fabs(f - 1.0f));

   float r1 = 0, g1 = 0, b1 = 0;

   switch (hi)
   {
   case 0:
      r1 = C; g1 = X;
      break;

   case 1:
      r1 = X; g1 = C;
      break;

   case 2:
      g1 = C; b1 = X;
      break;

   case 3:
      g1 = X; b1 = C;
      break;

   case 4:
      r1 = X; b1 = C;
      break;

   case 5:
      r1 = C; b1 = X;
      break;
   }

   float m = l - 0.5f*C;
   return vec3(r1 + m, g1 + m, b1 + m);
}

vec3 RGBToHSV(float fr, float fg, float fb)
{
   float h, s, v;

   float maxc = max(fr, max(fg, fb));
   float minc = min(fr, min(fg, fb));
   float d = maxc - minc;

   if (maxc == minc)
      h = 0;
   else if (maxc == fr)
      h = (float)fmod(60.0f * ((fg - fb) / d), 360.0f);
   else if (maxc == fg)
      h = 60.0f * ((fb - fr) / d) + 120.0f;
   else if (maxc == fb)
      h = 60.0f * ((fr - fg) / d) + 240.0f;

   if (h < 0)
      h += 360.0f;

   v = maxc;
   s = !maxc ? 0.0f : 1.0f - (minc/maxc);

   return vec3(h, s, v);
}


U Wolframu mi přijde divné, že nemá stejnou hue pro HSL a HSV, podle Wiki by měla být stejná.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 4. prosinec 2017, 08:46:19    Předmět: Odpovědět s citátem

Ještě koukni na Easy RGB: http://www.easyrgb.com/en/math.php. Vždycky jsem tam všechno našel.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 5. prosinec 2017, 15:22:23    Předmět: Odpovědět s citátem

Na vejšce jsem dělal zápočťák na Javu, takový prográmek, který interaktivně ukazuje vztahy mezi barevnými systémy RGB, HSL a HSV.

https://github.com/uiii/Colos

V dokumentaci je vidět screenshot: https://github.com/uiii/Colos/blob/master/doc/user_guide/user_guide.pdf
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna