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
JavaScript
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