2
0

ColorConverter.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import {
  2. MathUtils
  3. } from '../../../build/three.module.js';
  4. var ColorConverter = {
  5. setHSV: function ( color, h, s, v ) {
  6. // https://gist.github.com/xpansive/1337890#file-index-js
  7. h = MathUtils.euclideanModulo( h, 1 );
  8. s = MathUtils.clamp( s, 0, 1 );
  9. v = MathUtils.clamp( v, 0, 1 );
  10. return color.setHSL( h, ( s * v ) / ( ( h = ( 2 - s ) * v ) < 1 ? h : ( 2 - h ) ), h * 0.5 );
  11. },
  12. getHSV: function () {
  13. var hsl = {};
  14. return function getHSV( color, target ) {
  15. if ( target === undefined ) {
  16. console.warn( 'THREE.ColorConverter: .getHSV() target is now required' );
  17. target = { h: 0, s: 0, l: 0 };
  18. }
  19. color.getHSL( hsl );
  20. // based on https://gist.github.com/xpansive/1337890#file-index-js
  21. hsl.s *= ( hsl.l < 0.5 ) ? hsl.l : ( 1 - hsl.l );
  22. target.h = hsl.h;
  23. target.s = 2 * hsl.s / ( hsl.l + hsl.s );
  24. target.v = hsl.l + hsl.s;
  25. return target;
  26. };
  27. }(),
  28. // where c, m, y, k is between 0 and 1
  29. setCMYK: function ( color, c, m, y, k ) {
  30. var r = ( 1 - c ) * ( 1 - k );
  31. var g = ( 1 - m ) * ( 1 - k );
  32. var b = ( 1 - y ) * ( 1 - k );
  33. return color.setRGB( r, g, b );
  34. },
  35. getCMYK: function ( color, target ) {
  36. if ( target === undefined ) {
  37. console.warn( 'THREE.ColorConverter: .getCMYK() target is now required' );
  38. target = { c: 0, m: 0, y: 0, k: 0 };
  39. }
  40. var r = color.r;
  41. var g = color.g;
  42. var b = color.b;
  43. var k = 1 - Math.max( r, g, b );
  44. var c = ( 1 - r - k ) / ( 1 - k );
  45. var m = ( 1 - g - k ) / ( 1 - k );
  46. var y = ( 1 - b - k ) / ( 1 - k );
  47. target.c = c;
  48. target.m = m;
  49. target.y = y;
  50. target.k = k;
  51. return target;
  52. }
  53. };
  54. export { ColorConverter };