123456789101112131415161718192021222324252627282930 |
- /**
- * Adjusts the hue of a color.
- *
- * @name czm_hue
- * @glslFunction
- *
- * @param {vec3} rgb The color.
- * @param {float} adjustment The amount to adjust the hue of the color in radians.
- *
- * @returns {float} The color with the hue adjusted.
- *
- * @example
- * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)
- */
- vec3 czm_hue(vec3 rgb, float adjustment)
- {
- const mat3 toYIQ = mat3(0.299, 0.587, 0.114,
- 0.595716, -0.274453, -0.321263,
- 0.211456, -0.522591, 0.311135);
- const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,
- 1.0, -0.2721, -0.6474,
- 1.0, -1.107, 1.7046);
-
- vec3 yiq = toYIQ * rgb;
- float hue = atan(yiq.z, yiq.y) + adjustment;
- float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);
-
- vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));
- return toRGB * color;
- }
|