void hsv_to_rgb(t_env *e, double p, double q, double t) { double hh; double ff; int i; hh = e->h / 60; i = floor(hh); ff = hh - i; p = e->v * (1.0 - e->s); q = e->v * (1.0 - (e->s * ff)); t = e->v * (e->s * (1.0 - ff)); p *= 250; q *= 250; t *= 250; (i == 0) ? hsv0(e, p, t) : 1; (i == 1) ? hsv1(e, p, q) : 1; (i == 2) ? hsv2(e, p, t) : 1; (i == 3) ? hsv3(e, p, q) : 1; (i == 4) ? hsv4(e, p, t) : 1; if (i == 5) { e->r = e->v; e->g = p; e->b = q; } }
void Hsv::hsv2rgb(osg::Vec4& rgb, const osg::Vec4& hsv) { osg::Vec3 hsv3(hsv[0], hsv[1], hsv[2]); osg::Vec3 rgb3; hsv2rgb(rgb3, hsv3); // Copy to output rgb[RED] = rgb3[RED]; rgb[GREEN] = rgb3[GREEN]; rgb[BLUE] = rgb3[BLUE]; // Just pass alpha rgb[ALPHA] = hsv[ALPHA]; }