inline vec3 HslToRgb(vec3 In) { float v1, v2; vec3 Out; if(In.s == 0) { Out.r = In.l; Out.g = In.l; Out.b = In.l; } else { if(In.l < 0.5f) v2 = In.l * (1 + In.s); else v2 = (In.l+In.s) - (In.s*In.l); v1 = 2 * In.l - v2; Out.r = HueToRgb(v1, v2, In.h + (1.0f/3.0f)); Out.g = HueToRgb(v1, v2, In.h); Out.b = HueToRgb(v1, v2, In.h - (1.0f/3.0f)); } return Out; }
/** Auxilliary function for TestCaseID tbrdrcol-DrawColorCubeBackgroundNow This method converts a HSL colour to TRgb format. */ TRgb ColorConverter::HslToRgb(THsl aHsl) { TInt r, g, b; TInt m1, m2; const TInt hue = aHsl.Hue(); const TInt sat = aHsl.Saturation(); const TInt lum = aHsl.Lumen(); if (sat==0) { r=g=b=lum; } else { if (lum<=(255/2)) { m2=lum*(255+sat)/255; } else { m2=lum+sat-(lum*sat/255); } m1=2*lum-m2; r = HueToRgb(m1, m2, hue+255/3 ); g = HueToRgb(m1, m2, hue ); b = HueToRgb(m1, m2, hue-255/3 ); } return TRgb(r, g, b); }
inline vec3 HslToRgb(vec3 HSL) { if(HSL.s == 0.0f) return vec3(HSL.l, HSL.l, HSL.l); else { float v2 = HSL.l < 0.5f ? HSL.l * (1.0f + HSL.s) : (HSL.l+HSL.s) - (HSL.s*HSL.l); float v1 = 2.0f * HSL.l - v2; return vec3(HueToRgb(v1, v2, HSL.h + (1.0f/3.0f)), HueToRgb(v1, v2, HSL.h), HueToRgb(v1, v2, HSL.h - (1.0f/3.0f))); } }