Materials.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import NodeMaterial from './NodeMaterial.js';
  2. import LineBasicNodeMaterial from './LineBasicNodeMaterial.js';
  3. import MeshNormalNodeMaterial from './MeshNormalNodeMaterial.js';
  4. import MeshBasicNodeMaterial from './MeshBasicNodeMaterial.js';
  5. import MeshPhongNodeMaterial from './MeshPhongNodeMaterial.js';
  6. import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
  7. import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
  8. import PointsNodeMaterial from './PointsNodeMaterial.js';
  9. import SpriteNodeMaterial from './SpriteNodeMaterial.js';
  10. export {
  11. NodeMaterial,
  12. LineBasicNodeMaterial,
  13. MeshNormalNodeMaterial,
  14. MeshBasicNodeMaterial,
  15. MeshPhongNodeMaterial,
  16. MeshStandardNodeMaterial,
  17. MeshPhysicalNodeMaterial,
  18. PointsNodeMaterial,
  19. SpriteNodeMaterial
  20. };
  21. NodeMaterial.fromMaterial = function ( material ) {
  22. const materialLib = {
  23. NodeMaterial,
  24. LineBasicNodeMaterial,
  25. MeshNormalNodeMaterial,
  26. MeshBasicNodeMaterial,
  27. MeshPhongNodeMaterial,
  28. MeshStandardNodeMaterial,
  29. MeshPhysicalNodeMaterial,
  30. PointsNodeMaterial,
  31. SpriteNodeMaterial
  32. };
  33. const type = material.type.replace( 'Material', 'NodeMaterial' );
  34. if ( materialLib[ type ] === undefined ) {
  35. if ( material.isNodeMaterial !== true ) {
  36. throw new Error( `NodeMaterial: Material "${ material.type }" is not compatible.` );
  37. }
  38. return material; // is already a node material
  39. }
  40. const nodeMaterial = new materialLib[ type ]();
  41. for ( const key in material ) {
  42. nodeMaterial[ key ] = material[ key ];
  43. }
  44. return nodeMaterial;
  45. };