@openhps/core
Version:
Open Hybrid Positioning System - Core component
63 lines (57 loc) • 1.81 kB
JavaScript
;
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;