mirror of
https://github.com/jiawanlong/Cesium-Examples.git
synced 2025-07-06 16:31:03 +00:00
78 lines
1.9 KiB
JavaScript
78 lines
1.9 KiB
JavaScript
// @TODO: Is this needed? Can it be moved in MaterialNode?
|
|
|
|
import MaterialNode from './MaterialNode.js';
|
|
import { materialReference } from './MaterialReferenceNode.js';
|
|
import { normalView } from './NormalNode.js';
|
|
import { normalMap } from '../display/NormalMapNode.js';
|
|
import { bumpMap } from '../display/BumpMapNode.js';
|
|
import { addNodeClass } from '../core/Node.js';
|
|
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
|
|
class ExtendedMaterialNode extends MaterialNode {
|
|
|
|
constructor( scope ) {
|
|
|
|
super( scope );
|
|
|
|
}
|
|
|
|
getNodeType( builder ) {
|
|
|
|
const scope = this.scope;
|
|
let type = null;
|
|
|
|
if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
|
|
type = 'vec3';
|
|
|
|
}
|
|
|
|
return type || super.getNodeType( builder );
|
|
|
|
}
|
|
|
|
construct( builder ) {
|
|
|
|
const material = builder.material;
|
|
const scope = this.scope;
|
|
|
|
let node = null;
|
|
|
|
if ( scope === ExtendedMaterialNode.NORMAL ) {
|
|
|
|
if ( material.normalMap ) {
|
|
|
|
node = normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) );
|
|
|
|
} else if ( material.bumpMap ) {
|
|
|
|
node = bumpMap( material.bumpMap, materialReference( 'bumpScale', 'float' ) );
|
|
|
|
} else {
|
|
|
|
node = normalView;
|
|
|
|
}
|
|
|
|
} else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
|
|
node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
|
|
|
|
}
|
|
|
|
return node || super.construct( builder );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ExtendedMaterialNode.NORMAL = 'normal';
|
|
ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
|
|
|
|
export default ExtendedMaterialNode;
|
|
|
|
export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
|
|
export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
|
|
|
|
addNodeClass( ExtendedMaterialNode );
|