2
0

ColorConverter.js 1.6 KB

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