Last active
August 14, 2020 05:39
-
-
Save Tythos/98d7e56ad657eea2cf9e67b89246c19d to your computer and use it in GitHub Desktop.
Some useful color management and conversion utilities, specifically intended for use with THREE.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Collection of useful utilities for processing and transforming color values. | |
*/ | |
define(function(require, exports, module) { | |
let THREE = require("lib/three-v0.115.0"); | |
exports.hsv2rgb = function(hsv) { | |
/* Useful HSV-to-RGB conversion | |
*/ | |
let hue = hsv[0] * 360; | |
let sat = hsv[1]; | |
let val = hsv[2]; | |
let chr = val * sat; | |
let hue_ = hue / 60; | |
let rem = chr * (1 - Math.abs(hue_ % 2 - 1)); | |
let rgb = [0, 0, 0]; | |
if (0 <= hue_ && hue_ <= 1) { | |
rgb[0] = chr; | |
rgb[1] = rem; | |
} else if (1 <= hue_ && hue_ <= 2) { | |
rgb[0] = rem; | |
rgb[1] = chr; | |
} else if (2 <= hue_ && hue_ <= 3) { | |
rgb[1] = chr; | |
rgb[2] = rem; | |
} else if (3 <= hue_ && hue_ <= 4) { | |
rgb[1] = rem; | |
rgb[2] = chr; | |
} else if (4 <= hue_ && hue_ <= 5) { | |
rgb[2] = chr; | |
rgb[0] = rem; | |
} else if (5 <= hue_ && hue_ <= 6) { | |
rgb[2] = rem; | |
rgb[0] = chr; | |
} | |
let off = val - chr; | |
return [rgb[0] + off, rgb[1] + off, rgb[2] + off]; | |
}; | |
exports.parseColor = function(integer) { | |
/* Converts a 24-bit integer to a THREE.js color value | |
*/ | |
let b = integer % 256; | |
integer = (integer - b) / 256; | |
let g = integer % 256; | |
integer = (integer - g) / 256; | |
let r = integer; | |
return new THREE.Color(r / 255, g / 255, b / 255); | |
}; | |
exports.three2hex = function(rgb) { | |
/* Returns a hex string (with leading "#") conversion of the given | |
THREE.Color object | |
*/ | |
let r = Math.round(rgb.r * 255).toString(16); | |
let g = Math.round(rgb.g * 255).toString(16); | |
let b = Math.round(rgb.b * 255).toString(16); | |
return `#${r}${g}${b}`; | |
}; | |
Object.assign(exports, { | |
"__uni__": "com.github.tythos.rainbow", | |
"__semver__": "0.0.1", | |
"__author__": "code@tythos.net", | |
"__license__": "MIT" // SPDX Identifier | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment