UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

63 lines (57 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _AnalyticLightNode = _interopRequireDefault(require("./AnalyticLightNode.js")); var _Normal = require("../accessors/Normal.js"); var _UniformArrayNode = require("../accessors/UniformArrayNode.js"); var _Vector = require("../../math/Vector3.js"); var _getShIrradianceAt = _interopRequireDefault(require("../functions/material/getShIrradianceAt.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Module for representing light probes as nodes. * * @augments AnalyticLightNode */ class LightProbeNode extends _AnalyticLightNode.default { static get type() { return 'LightProbeNode'; } /** * Constructs a new light probe node. * * @param {?LightProbe} [light=null] - The light probe. */ constructor(light = null) { super(light); const array = []; for (let i = 0; i < 9; i++) array.push(new _Vector.Vector3()); /** * Light probe represented as a uniform of spherical harmonics. * * @type {UniformArrayNode} */ this.lightProbe = (0, _UniformArrayNode.uniformArray)(array); } /** * Overwritten to updated light probe specific uniforms. * * @param {NodeFrame} frame - A reference to the current node frame. */ update(frame) { const { light } = this; super.update(frame); // for (let i = 0; i < 9; i++) { this.lightProbe.array[i].copy(light.sh.coefficients[i]).multiplyScalar(light.intensity); } } setup(builder) { const irradiance = (0, _getShIrradianceAt.default)(_Normal.normalWorld, this.lightProbe); builder.context.irradiance.addAssign(irradiance); } } var _default = exports.default = LightProbeNode;