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.
71 lines
1.1 KiB
71 lines
1.1 KiB
6 months ago
|
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;
|