Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Goblin

Založen: 10. 05. 2014 Příspěvky: 23
|
Zaslal: 30. listopad 2017, 16:16:52 Předmět: Převod hsl-hsv |
|
|
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 |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 2. prosinec 2017, 15:29:35 Předmět: Re: Převod hsl-hsv |
|
|
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 |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
|
Návrat nahoru |
|
 |
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
|
Návrat nahoru |
|
 |
|