UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

39 lines (33 loc) 1.73 kB
import {SimpleJSONLoader} from './SimpleJSONLoader' import {ThreeViewer} from '../../viewer' import {getEmptyMeta, SerializationMetaType, ThreeSerialization} from '../../utils/serialization' import {IMaterial} from '../../core' export class JSONMaterialLoader extends SimpleJSONLoader { viewer?: ThreeViewer async loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<any> { if (!this.viewer) throw 'Viewer not set in JSONMaterialLoader.' const json = await super.loadAsync(url, onProgress) as any return await JSONMaterialLoader.DeserializeMaterialJSON(json, this.viewer) } static async DeserializeMaterialJSON(json: any, viewer: ThreeViewer, meta?: SerializationMetaType, obj?: IMaterial|IMaterial[]) { meta = meta || getEmptyMeta() const json2 = {...json} if (json.images) { if (Array.isArray(json.images)) meta.images = Object.fromEntries(json.images.map((i: any) => [i.uuid, i])) else meta.images = json.images delete json2.images } if (json.textures) { if (Array.isArray(json.textures)) meta.textures = Object.fromEntries(json.textures.map((t: any) => [t.uuid, t])) else meta.textures = json.textures delete json2.textures } if (json.materials) { if (Array.isArray(json.materials)) meta.materials = Object.fromEntries(json.materials.map((m: any) => [m.uuid, m])) else meta.materials = json.materials delete json2.materials } const resources = await viewer.loadConfigResources(meta) return ThreeSerialization.Deserialize(json2, obj || undefined, resources) } }