71 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import NodeLoader from './NodeLoader.js'; | ||
|  | import NodeMaterialLoader from './NodeMaterialLoader.js'; | ||
|  | import { ObjectLoader } from 'three'; | ||
|  | 
 | ||
|  | class NodeObjectLoader extends ObjectLoader { | ||
|  | 
 | ||
|  | 	constructor( manager ) { | ||
|  | 
 | ||
|  | 		super( manager ); | ||
|  | 
 | ||
|  | 		this._nodesJSON = null; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	parse( json, onLoad ) { | ||
|  | 
 | ||
|  | 		this._nodesJSON = json.nodes; | ||
|  | 
 | ||
|  | 		const data = super.parse( json, onLoad ); | ||
|  | 
 | ||
|  | 		this._nodesJSON = null; // dispose
 | ||
|  | 
 | ||
|  | 		return data; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	parseNodes( json, textures ) { | ||
|  | 
 | ||
|  | 		if ( json !== undefined ) { | ||
|  | 
 | ||
|  | 			const loader = new NodeLoader(); | ||
|  | 			loader.setTextures( textures ); | ||
|  | 
 | ||
|  | 			return loader.parseNodes( json ); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return {}; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	parseMaterials( json, textures ) { | ||
|  | 
 | ||
|  | 		const materials = {}; | ||
|  | 
 | ||
|  | 		if ( json !== undefined ) { | ||
|  | 
 | ||
|  | 			const nodes = this.parseNodes( this._nodesJSON, textures ); | ||
|  | 
 | ||
|  | 			const loader = new NodeMaterialLoader(); | ||
|  | 			loader.setTextures( textures ); | ||
|  | 			loader.setNodes( nodes ); | ||
|  | 
 | ||
|  | 			for ( let i = 0, l = json.length; i < l; i ++ ) { | ||
|  | 
 | ||
|  | 				const data = json[ i ]; | ||
|  | 
 | ||
|  | 				materials[ data.uuid ] = loader.parse( data ); | ||
|  | 
 | ||
|  | 			} | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return materials; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export default NodeObjectLoader; |