UNPKG

threepipe

Version:

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

81 lines 3.23 kB
var _a; export class GLTFObject3DExtrasExtension { } _a = GLTFObject3DExtrasExtension; GLTFObject3DExtrasExtension.WebGiObject3DExtrasExtension = 'WEBGI_object3d_extras'; /** * Also {@link Export} * @param _ */ GLTFObject3DExtrasExtension.Import = (_) => ({ name: '__' + _a.WebGiObject3DExtrasExtension, // __ is prefix so that the extension is added to userdata, and we can process later in afterRoot afterRoot: async (result) => { const scenes = result.scenes || (result.scene ? [result.scene] : []); scenes.forEach(s => { s.traverse((o) => { if (!o || !o.isObject3D) return; const ext = o.userData?.gltfExtensions?.[_a.WebGiObject3DExtrasExtension]; if (!ext) { if (o.isLight && !o.isAmbientLight) o.castShadow = true; return; } const hasShadowDef = ext.castShadow !== undefined || ext.receiveShadow !== undefined; if (ext.castShadow !== undefined) o.castShadow = ext.castShadow; if (ext.receiveShadow !== undefined) o.receiveShadow = ext.receiveShadow; if (ext.visible !== undefined) o.visible = ext.visible; if (ext.frustumCulled !== undefined) o.frustumCulled = ext.frustumCulled; if (ext.renderOrder !== undefined) o.renderOrder = ext.renderOrder; // if (ext.userData !== undefined) o.userData = ext.userData if (ext.layers !== undefined) o.layers.mask = ext.layers; if (hasShadowDef) { o.userData.__keepShadowDef = true; } delete o.userData.gltfExtensions[_a.WebGiObject3DExtrasExtension]; }); }); }, }); /** * Also {@link Import} * @param w * @constructor */ GLTFObject3DExtrasExtension.Export = (w) => ({ writeNode: (object, nodeDef) => { if (!object?.isObject3D) return; if (!nodeDef.extensions) nodeDef.extensions = {}; const dat = {}; // non-default stuff from ObjectLoader.js if (object.castShadow !== undefined) dat.castShadow = object.castShadow; if (object.receiveShadow !== undefined) dat.receiveShadow = object.receiveShadow; if (object.visible === false) dat.visible = false; if (object.frustumCulled === false) dat.frustumCulled = false; if (object.renderOrder !== 0) dat.renderOrder = object.renderOrder; if (object.layers.mask !== 1) dat.layers = object.layers.mask; if (object.matrixAutoUpdate === false) dat.matrixAutoUpdate = false; if (Object.keys(dat).length > 0) { nodeDef.extensions[_a.WebGiObject3DExtrasExtension] = dat; w.extensionsUsed[_a.WebGiObject3DExtrasExtension] = true; } }, }); // see GLTFDracoExportPlugin GLTFObject3DExtrasExtension.Textures = undefined; //# sourceMappingURL=GLTFObject3DExtrasExtension.js.map