@visactor/vrender-core
Version:
## Description
33 lines (26 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.registerDirectionalLight = exports.DirectionalLight = void 0;
const vutils_1 = require("@visactor/vutils"), color_string_1 = require("../color-string"), factory_1 = require("../factory");
class DirectionalLight {
constructor(dir, color, ambient = .8) {
this.dir = dir, this.color = color, this.colorRgb = color_string_1.ColorStore.Get(color, color_string_1.ColorType.Color1),
this.ambient = ambient;
const length = (0, vutils_1.sqrt)(dir[0] * dir[0] + dir[1] * dir[1] + dir[2] * dir[2]);
this.formatedDir = [ dir[0] / length, dir[1] / length, dir[2] / length ];
}
computeColor(normal, color) {
const lightDir = this.formatedDir, brightness = (0, vutils_1.min)((0, vutils_1.max)((normal[0] * lightDir[0] + normal[1] * lightDir[1] + normal[2] * lightDir[2]) * (1 - this.ambient / 2), 0) + this.ambient, 1);
let colorArray;
colorArray = (0, vutils_1.isString)(color) ? color_string_1.ColorStore.Get(color, color_string_1.ColorType.Color1) : color;
const lightColorArray = this.colorRgb;
return `rgb(${lightColorArray[0] * colorArray[0] * brightness}, ${lightColorArray[1] * colorArray[1] * brightness}, ${lightColorArray[2] * colorArray[2] * brightness})`;
}
}
exports.DirectionalLight = DirectionalLight;
const registerDirectionalLight = () => {
factory_1.Factory.registerPlugin("DirectionalLight", DirectionalLight);
};
exports.registerDirectionalLight = registerDirectionalLight;
//# sourceMappingURL=light.js.map