Skip to content

Instantly share code, notes, and snippets.

@Tythos
Last active August 14, 2020 05:39
Show Gist options
  • Save Tythos/98d7e56ad657eea2cf9e67b89246c19d to your computer and use it in GitHub Desktop.
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
/* 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