3D-Demo/jsm/nodes/materials/Materials.js

63 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

2022-10-14 16:50:42 +08:00
import NodeMaterial from './NodeMaterial.js';
import LineBasicNodeMaterial from './LineBasicNodeMaterial.js';
import MeshBasicNodeMaterial from './MeshBasicNodeMaterial.js';
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
import PointsNodeMaterial from './PointsNodeMaterial.js';
import { Material } from 'three';
export {
NodeMaterial,
LineBasicNodeMaterial,
MeshBasicNodeMaterial,
MeshStandardNodeMaterial,
PointsNodeMaterial
};
const materialLib = {
NodeMaterial,
LineBasicNodeMaterial,
MeshBasicNodeMaterial,
MeshStandardNodeMaterial,
PointsNodeMaterial
};
const fromTypeFunction = Material.fromType;
Material.fromType = function ( type ) {
if ( materialLib[ type ] !== undefined ) {
return new materialLib[ type ]();
}
return fromTypeFunction.call( this, type );
};
NodeMaterial.fromMaterial = function ( material ) {
const type = material.type.replace( 'Material', 'NodeMaterial' );
if ( materialLib[ type ] === undefined ) {
return material; // is already a node material or cannot be converted
}
const nodeMaterial = new materialLib[ type ]( material );
for ( let key in material ) {
if ( nodeMaterial[ key ] === undefined ) {
nodeMaterial[ key ] = material[ key ]; // currently this is needed only for material.alphaTest
}
}
return nodeMaterial;
};