1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| /**
| * 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;
| }
|
|