RGBToHSB.js 970 B

1234567891011121314151617181920212223242526272829
  1. //This file is automatically rebuilt by the Cesium build process.
  2. export default "/**\n\
  3. * Converts an RGB color to HSB (hue, saturation, brightness)\n\
  4. * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\n\
  5. *\n\
  6. * @name czm_RGBToHSB\n\
  7. * @glslFunction\n\
  8. * \n\
  9. * @param {vec3} rgb The color in RGB.\n\
  10. *\n\
  11. * @returns {vec3} The color in HSB.\n\
  12. *\n\
  13. * @example\n\
  14. * vec3 hsb = czm_RGBToHSB(rgb);\n\
  15. * hsb.z *= 0.1;\n\
  16. * rgb = czm_HSBToRGB(hsb);\n\
  17. */\n\
  18. \n\
  19. const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\
  20. \n\
  21. vec3 czm_RGBToHSB(vec3 rgb)\n\
  22. {\n\
  23. vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));\n\
  24. vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\
  25. \n\
  26. float d = q.x - min(q.w, q.y);\n\
  27. return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);\n\
  28. }\n\
  29. ";