first commit
This commit is contained in:
		
							
								
								
									
										69
									
								
								public/sdk/three/jsm/nodes/lighting/PointLightNode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								public/sdk/three/jsm/nodes/lighting/PointLightNode.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | ||||
| import AnalyticLightNode from './AnalyticLightNode.js'; | ||||
| import { addLightNode } from './LightsNode.js'; | ||||
| import { getDistanceAttenuation } from './LightUtils.js'; | ||||
| import { uniform } from '../core/UniformNode.js'; | ||||
| import { objectViewPosition } from '../accessors/Object3DNode.js'; | ||||
| import { positionView } from '../accessors/PositionNode.js'; | ||||
| import { addNodeClass } from '../core/Node.js'; | ||||
|  | ||||
| import { PointLight } from 'three'; | ||||
|  | ||||
| class PointLightNode extends AnalyticLightNode { | ||||
|  | ||||
| 	constructor( light = null ) { | ||||
|  | ||||
| 		super( light ); | ||||
|  | ||||
| 		this.cutoffDistanceNode = uniform( 0 ); | ||||
| 		this.decayExponentNode = uniform( 0 ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	update( frame ) { | ||||
|  | ||||
| 		const { light } = this; | ||||
|  | ||||
| 		super.update( frame ); | ||||
|  | ||||
| 		this.cutoffDistanceNode.value = light.distance; | ||||
| 		this.decayExponentNode.value = light.decay; | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	setup( builder ) { | ||||
|  | ||||
| 		const { colorNode, cutoffDistanceNode, decayExponentNode, light } = this; | ||||
|  | ||||
| 		const lightingModel = builder.context.lightingModel; | ||||
|  | ||||
| 		const lVector = objectViewPosition( light ).sub( positionView ); // @TODO: Add it into LightNode | ||||
|  | ||||
| 		const lightDirection = lVector.normalize(); | ||||
| 		const lightDistance = lVector.length(); | ||||
|  | ||||
| 		const lightAttenuation = getDistanceAttenuation( { | ||||
| 			lightDistance, | ||||
| 			cutoffDistance: cutoffDistanceNode, | ||||
| 			decayExponent: decayExponentNode | ||||
| 		} ); | ||||
|  | ||||
| 		const lightColor = colorNode.mul( lightAttenuation ); | ||||
|  | ||||
| 		const reflectedLight = builder.context.reflectedLight; | ||||
|  | ||||
| 		lightingModel.direct( { | ||||
| 			lightDirection, | ||||
| 			lightColor, | ||||
| 			reflectedLight, | ||||
| 			shadowMask: this.shadowMaskNode | ||||
| 		}, builder.stack, builder ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| export default PointLightNode; | ||||
|  | ||||
| addNodeClass( 'PointLightNode', PointLightNode ); | ||||
|  | ||||
| addLightNode( PointLight, PointLightNode ); | ||||
		Reference in New Issue
	
	Block a user