31 lines
964 B
GLSL
31 lines
964 B
GLSL
/**
|
|
* 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;
|
|
}
|