33 lines
1.3 KiB
GLSL
33 lines
1.3 KiB
GLSL
/**
|
|
* Apply a HSB color shift to an RGB color.
|
|
*
|
|
* @param {vec3} rgb The color in RGB space.
|
|
* @param {vec3} hsbShift The amount to shift each component. The xyz components correspond to hue, saturation, and brightness. Shifting the hue by +/- 1.0 corresponds to shifting the hue by a full cycle. Saturation and brightness are clamped between 0 and 1 after the adjustment
|
|
* @param {bool} ignoreBlackPixels If true, black pixels will be unchanged. This is necessary in some shaders such as atmosphere-related effects.
|
|
*
|
|
* @return {vec3} The RGB color after shifting in HSB space and clamping saturation and brightness to a valid range.
|
|
*/
|
|
vec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) {
|
|
// Convert rgb color to hsb
|
|
vec3 hsb = czm_RGBToHSB(rgb);
|
|
|
|
// Perform hsb shift
|
|
// Hue cycles around so no clamp is needed.
|
|
hsb.x += hsbShift.x; // hue
|
|
hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); // saturation
|
|
|
|
// brightness
|
|
//
|
|
// Some shaders such as atmosphere-related effects need to leave black
|
|
// pixels unchanged
|
|
if (ignoreBlackPixels) {
|
|
hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0;
|
|
} else {
|
|
hsb.z = hsb.z + hsbShift.z;
|
|
}
|
|
hsb.z = clamp(hsb.z, 0.0, 1.0);
|
|
|
|
// Convert shifted hsb back to rgb
|
|
return czm_HSBToRGB(hsb);
|
|
}
|