Explorar o código

Simplified setHSL and getHSL.

Mr.doob %!s(int64=12) %!d(string=hai) anos
pai
achega
7bb329b9e7
Modificáronse 1 ficheiros con 26 adicións e 63 borrados
  1. 26 63
      src/math/Color.js

+ 26 - 63
src/math/Color.js

@@ -56,50 +56,29 @@ THREE.extend( THREE.Color.prototype, {
 
 		// h,s,l ranges are in 0.0 - 1.0
 
-		var f = function ( v1, v2, vh ) {
-			var r;
-
-			if ( vh < 0 ) {
-				vh += 1;
-			}
-
-			if ( vh > 1 ) {
-				vh -= 1;
-			}
-
-			if ( vh < 1.0/6 ) {
-				r = v1 + ( v2 - v1 ) * 6 * vh;
-			} else if ( vh < 1.0/2 ) {
-				r = v2;
-			} else if ( vh < 2.0/3 ) {
-				r = v1 + ( v2 - v1 ) * 6 * ( 2.0/3 - vh );
-			} else {
-				r = v1;
-			}
-
-			return r;
-
-		};
-
 		if ( s === 0 ) {
 
 			this.r = this.g = this.b = l;
 
 		} else {
 
-			var p, q;
+			var hue2rgb = function ( p, q, t ) {
 
-			if ( l <= 0.5 ) {
-				p = l * ( 1.0 + s );
-			} else {
-				p = l + s - ( l * s );
-			}
+				if ( t < 0 ) t += 1;
+				if ( t > 1 ) t -= 1;
+				if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;
+				if ( t < 1 / 2 ) return q;
+				if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );
+				return p;
 
-			q = ( 2.0 * l ) - p;
+			};
 
-			this.r = f( q, p, h + 1.0/3 );
-			this.g = f( q, p, h );
-			this.b = f( q, p, h - 1.0/3 );
+			var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );
+			var q = ( 2 * l ) - p;
+
+			this.r = hue2rgb( q, p, h + 1 / 3 );
+			this.g = hue2rgb( q, p, h );
+			this.b = hue2rgb( q, p, h - 1 / 3 );
 
 		}
 
@@ -307,16 +286,16 @@ THREE.extend( THREE.Color.prototype, {
 
 	},
 
-	getHSL: function (hsl) {
+	getHSL: function ( hsl ) {
 
 		// h,s,l ranges are in 0.0 - 1.0
 
-		var r = this.r;
-		var g = this.g;
-		var b = this.b;
+		if ( hsl === undefined ) hsl = { h: 0, s: 0, l: 0 };
 
-		var max = Math.max( Math.max( r, g ), b );
-		var min = Math.min( Math.min( r, g ), b );
+		var r = this.r, g = this.g, b = this.b;
+
+		var max = Math.max( r, g, b );
+		var min = Math.min( r, g, b );
 
 		var hue, saturation;
 		var lightness = ( min + max ) / 2.0;
@@ -330,34 +309,18 @@ THREE.extend( THREE.Color.prototype, {
 
 			var delta = max - min;
 
-			if ( lightness <= 0.5 ) {
-				saturation = delta / ( max + min );
-			} else {
-				saturation = delta / ( 2 - max - min );
-			}
-
-			if ( r == max ) {
-				hue = ( g - b ) / delta;
-			} else if ( g == max ) {
-				hue = 2 + ( ( b - r ) / delta );
-			} else {
-				hue = 4 + ( ( r - g ) / delta );
-			}
+			saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );
 
-			hue /= 6;
+			switch ( max ) {
 
-			if ( hue < 0 ) {
-				hue += 1;
-			}
+				case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;
+				case g: hue = ( b - r ) / delta + 2; break;
+				case b: hue = ( r - g ) / delta + 4; break;
 
-			if ( hue > 1 ) {
-				hue -= 1;
 			}
 
-		}
+			hue /= 6;
 
-		if ( hsl === undefined ) {
-			hsl = { h: 0, s: 0, l: 0 };
 		}
 
 		hsl.h = hue;