| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- import Node from '../core/Node.js';
 
- import Object3DNode from '../accessors/Object3DNode.js';
 
- import PositionNode from '../accessors/PositionNode.js';
 
- import ColorNode from '../inputs/ColorNode.js';
 
- import FloatNode from '../inputs/FloatNode.js';
 
- import OperatorNode from '../math/OperatorNode.js';
 
- import MathNode from '../math/MathNode.js';
 
- import { NodeUpdateType } from '../core/constants.js';
 
- import { getDistanceAttenuation } from '../functions/BSDFs.js';
 
- import { Color } from 'three';
 
- class LightNode extends Node {
 
- 	constructor( light = null ) {
 
- 		super( 'vec3' );
 
- 		this.updateType = NodeUpdateType.Object;
 
- 		this.light = light;
 
- 		this.colorNode = new ColorNode( new Color() );
 
- 		this.lightCutoffDistanceNode = new FloatNode( 0 );
 
- 		this.lightDecayExponentNode = new FloatNode( 0 );
 
- 	}
 
- 	update( /* frame */ ) {
 
- 		this.colorNode.value.copy( this.light.color ).multiplyScalar( this.light.intensity );
 
- 		this.lightCutoffDistanceNode.value = this.light.distance;
 
- 		this.lightDecayExponentNode.value = this.light.decay;
 
- 	}
 
- 	generate( builder ) {
 
- 		const lightPositionView = new Object3DNode( Object3DNode.VIEW_POSITION );
 
- 		const positionView = new PositionNode( PositionNode.VIEW );
 
- 		const lVector = new OperatorNode( '-', lightPositionView, positionView );
 
- 		const lightDirection = new MathNode( MathNode.NORMALIZE, lVector );
 
- 		const lightDistance = new MathNode( MathNode.LENGTH, lVector );
 
- 		const lightAttenuation = getDistanceAttenuation( {
 
- 			lightDistance,
 
- 			cutoffDistance: this.lightCutoffDistanceNode,
 
- 			decayExponent: this.lightDecayExponentNode
 
- 		} );
 
- 		const lightColor = new OperatorNode( '*', this.colorNode, lightAttenuation );
 
- 		lightPositionView.object3d = this.light;
 
- 		const lightingModelFunction = builder.context.lightingModel;
 
- 		if ( lightingModelFunction !== undefined ) {
 
- 			const directDiffuse = builder.context.directDiffuse;
 
- 			const directSpecular = builder.context.directSpecular;
 
- 			lightingModelFunction( {
 
- 				lightDirection,
 
- 				lightColor,
 
- 				directDiffuse,
 
- 				directSpecular
 
- 			}, builder );
 
- 		}
 
- 	}
 
- }
 
- export default LightNode;
 
 
  |