锦水大屏
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.2 KiB

2 years ago
import ContextNode from '../core/ContextNode.js';
import VarNode from '../core/VarNode.js';
import Vector3Node from '../inputs/Vector3Node.js';
import OperatorNode from '../math/OperatorNode.js';
import { PhysicalLightingModel } from '../functions/BSDFs.js';
class LightContextNode extends ContextNode {
constructor( node ) {
super( node );
}
getNodeType( /*builder*/ ) {
return 'vec3';
}
generate( builder ) {
const material = builder.material;
let lightingModel = null;
if ( material.isMeshStandardMaterial === true ) {
lightingModel = PhysicalLightingModel;
}
const directDiffuse = new VarNode( new Vector3Node(), 'DirectDiffuse', 'vec3' );
const directSpecular = new VarNode( new Vector3Node(), 'DirectSpecular', 'vec3' );
this.context.directDiffuse = directDiffuse;
this.context.directSpecular = directSpecular;
if ( lightingModel !== null ) {
this.context.lightingModel = lightingModel;
}
// add code
const type = this.getNodeType( builder );
super.generate( builder, type );
const totalLight = new OperatorNode( '+', directDiffuse, directSpecular );
return totalLight.build( builder, type );
}
}
export default LightContextNode;