Complete 3D metaverse platform with: - Three.js 3D rendering - Cannon.js physics engine - Pointer lock controls - Procedural cityscape - Floating islands - Portal system - Particle effects - WebXR/VR support ready - Multiplayer ready (Socket.io) Features: - First-person controls (WASD + mouse) - Jump and run mechanics - Chat system - Real-time HUD - Loading screen - Responsive design Built with Vite for fast builds and hot reload. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
67 lines
1.6 KiB
JavaScript
67 lines
1.6 KiB
JavaScript
import ContextNode from '../core/ContextNode.js';
|
|
import { addNodeClass } from '../core/Node.js';
|
|
import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js';
|
|
|
|
class LightingContextNode extends ContextNode {
|
|
|
|
constructor( node, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {
|
|
|
|
super( node );
|
|
|
|
this.lightingModel = lightingModel;
|
|
this.backdropNode = backdropNode;
|
|
this.backdropAlphaNode = backdropAlphaNode;
|
|
|
|
this._context = null;
|
|
|
|
}
|
|
|
|
getContext() {
|
|
|
|
const { backdropNode, backdropAlphaNode } = this;
|
|
|
|
const directDiffuse = vec3().temp( 'directDiffuse' ),
|
|
directSpecular = vec3().temp( 'directSpecular' ),
|
|
indirectDiffuse = vec3().temp( 'indirectDiffuse' ),
|
|
indirectSpecular = vec3().temp( 'indirectSpecular' );
|
|
|
|
const reflectedLight = {
|
|
directDiffuse,
|
|
directSpecular,
|
|
indirectDiffuse,
|
|
indirectSpecular
|
|
};
|
|
|
|
const context = {
|
|
radiance: vec3().temp( 'radiance' ),
|
|
irradiance: vec3().temp( 'irradiance' ),
|
|
iblIrradiance: vec3().temp( 'iblIrradiance' ),
|
|
ambientOcclusion: float( 1 ).temp( 'ambientOcclusion' ),
|
|
reflectedLight,
|
|
backdrop: backdropNode,
|
|
backdropAlpha : backdropAlphaNode
|
|
};
|
|
|
|
return context;
|
|
|
|
}
|
|
|
|
setup( builder ) {
|
|
|
|
this.context = this._context || ( this._context = this.getContext() );
|
|
this.context.lightingModel = this.lightingModel || builder.context.lightingModel;
|
|
|
|
return super.setup( builder );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default LightingContextNode;
|
|
|
|
export const lightingContext = nodeProxy( LightingContextNode );
|
|
|
|
addNodeElement( 'lightingContext', lightingContext );
|
|
|
|
addNodeClass( 'LightingContextNode', LightingContextNode );
|