最新代码
This commit is contained in:
		
							
								
								
									
										55
									
								
								public/sdk/three/jsm/nodes/lighting/HemisphereLightNode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								public/sdk/three/jsm/nodes/lighting/HemisphereLightNode.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| import AnalyticLightNode from './AnalyticLightNode.js'; | ||||
| import { addLightNode } from './LightsNode.js'; | ||||
| import { uniform } from '../core/UniformNode.js'; | ||||
| import { mix } from '../math/MathNode.js'; | ||||
| import { normalView } from '../accessors/NormalNode.js'; | ||||
| import { objectPosition } from '../accessors/Object3DNode.js'; | ||||
| import { addNodeClass } from '../core/Node.js'; | ||||
|  | ||||
| import { Color, HemisphereLight } from 'three'; | ||||
|  | ||||
| class HemisphereLightNode extends AnalyticLightNode { | ||||
|  | ||||
| 	constructor( light = null ) { | ||||
|  | ||||
| 		super( light ); | ||||
|  | ||||
| 		this.lightPositionNode = objectPosition( light ); | ||||
| 		this.lightDirectionNode = this.lightPositionNode.normalize(); | ||||
|  | ||||
| 		this.groundColorNode = uniform( new Color() ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	update( frame ) { | ||||
|  | ||||
| 		const { light } = this; | ||||
|  | ||||
| 		super.update( frame ); | ||||
|  | ||||
| 		this.lightPositionNode.object3d = light; | ||||
|  | ||||
| 		this.groundColorNode.value.copy( light.groundColor ).multiplyScalar( light.intensity ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	setup( builder ) { | ||||
|  | ||||
| 		const { colorNode, groundColorNode, lightDirectionNode } = this; | ||||
|  | ||||
| 		const dotNL = normalView.dot( lightDirectionNode ); | ||||
| 		const hemiDiffuseWeight = dotNL.mul( 0.5 ).add( 0.5 ); | ||||
|  | ||||
| 		const irradiance = mix( groundColorNode, colorNode, hemiDiffuseWeight ); | ||||
|  | ||||
| 		builder.context.irradiance.addAssign( irradiance ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| export default HemisphereLightNode; | ||||
|  | ||||
| addNodeClass( 'HemisphereLightNode', HemisphereLightNode ); | ||||
|  | ||||
| addLightNode( HemisphereLight, HemisphereLightNode ); | ||||
		Reference in New Issue
	
	Block a user