提交 af5b9786 编写于 作者: M Mr.doob

Merge remote-tracking branch 'pksunkara/dev' into dev

......@@ -52,6 +52,61 @@ THREE.extend( THREE.Color.prototype, {
},
setHSL: function ( h, s, l ) {
// 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;
if ( l <= 0.5 ) {
p = l * ( 1.0 + s );
} else {
p = l + s - ( l * s );
}
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 );
}
return this;
},
setHSV: function ( h, s, v ) {
// based on MochiKit implementation by Bob Ippolito
......@@ -248,7 +303,68 @@ THREE.extend( THREE.Color.prototype, {
getStyle: function () {
return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';
return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';
},
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;
var max = Math.max( Math.max( r, g ), b );
var min = Math.min( Math.min( r, g ), b );
var hue, saturation;
var lightness = ( min + max ) / 2.0;
if ( min === max ) {
hue = 0;
saturation = 0;
} else {
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 );
}
hue /= 6;
if ( hue < 0 ) {
hue += 1;
}
if ( hue > 1 ) {
hue -= 1;
}
}
if ( hsl === undefined ) {
hsl = { h: 0, s: 0, l: 0 };
}
hsl.h = hue;
hsl.s = saturation;
hsl.l = lightness;
return hsl;
},
......
......@@ -157,13 +157,32 @@ test( "getHexString", function(){
});
test( "getStyle", function(){
var c = new THREE.Color('plum');
var c = new THREE.Color('plum');
var res = c.getStyle();
ok( res == 'rgb(221,160,221)', "style: " + res );
});
test( "getHSL", function () {
var c = new THREE.Color( 0x80ffff );
var hsl = c.getHSL();
ok( hsl.h == 0.5, "hue: " + hsl.h );
ok( hsl.s == 1.0, "saturation: " + hsl.s );
ok( (Math.round(parseFloat(hsl.l)*100)/100) == 0.75, "lightness: " + hsl.l );
});
test( "setHSL", function () {
var c = new THREE.Color();
c.setHSL(0.75, 1.0, 0.25);
var hsl = c.getHSL();
ok( hsl.h == 0.75, "hue: " + hsl.h );
ok( hsl.s == 1.00, "saturation: " + hsl.s );
ok( hsl.l == 0.25, "lightness: " + hsl.l );
});
test( "getHSV", function(){
var c = new THREE.Color('maroon');
var c = new THREE.Color('maroon');
var hsv = c.getHSV();
ok( hsv.h == 0, "hue: " + hsv.h );
......@@ -173,7 +192,7 @@ test( "getHSV", function(){
});
test( "setHSV", function(){
var c = new THREE.Color();
var c = new THREE.Color();
c.setHSV(0, 1, 1);
var hsv = c.getHSV();
ok( hsv.h == 0, "hue: " + hsv.h );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册