|
@@ -113,7 +113,8 @@ GLTFExporter.prototype = {
|
|
embedImages: true,
|
|
embedImages: true,
|
|
animations: [],
|
|
animations: [],
|
|
forceIndices: false,
|
|
forceIndices: false,
|
|
- forcePowerOfTwoTextures: false
|
|
|
|
|
|
+ forcePowerOfTwoTextures: false,
|
|
|
|
+ includeCustomExtensions: false
|
|
};
|
|
};
|
|
|
|
|
|
options = Object.assign( {}, DEFAULT_OPTIONS, options );
|
|
options = Object.assign( {}, DEFAULT_OPTIONS, options );
|
|
@@ -373,21 +374,50 @@ GLTFExporter.prototype = {
|
|
* Serializes a userData.
|
|
* Serializes a userData.
|
|
*
|
|
*
|
|
* @param {Object3D|Material} object
|
|
* @param {Object3D|Material} object
|
|
- * @returns {Object}
|
|
|
|
|
|
+ * @param {Object} gltfProperty
|
|
*/
|
|
*/
|
|
- function serializeUserData( object ) {
|
|
|
|
|
|
+ function serializeUserData( object, gltfProperty ) {
|
|
|
|
+
|
|
|
|
+ if ( Object.keys( object.userData ).length === 0 ) {
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
try {
|
|
try {
|
|
|
|
|
|
- return JSON.parse( JSON.stringify( object.userData ) );
|
|
|
|
|
|
+ var json = JSON.parse( JSON.stringify( object.userData ) );
|
|
|
|
+
|
|
|
|
+ if ( options.includeCustomExtensions && json.gltfExtensions ) {
|
|
|
|
+
|
|
|
|
+ if ( gltfProperty.extensions === undefined ) {
|
|
|
|
+
|
|
|
|
+ gltfProperty.extensions = {};
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for ( var extensionName in json.gltfExtensions ) {
|
|
|
|
+
|
|
|
|
+ gltfProperty.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];
|
|
|
|
+ extensionsUsed[ extensionName ] = true;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ delete json.gltfExtensions;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ( Object.keys( json ).length > 0 ) {
|
|
|
|
+
|
|
|
|
+ gltfProperty.extras = json;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
} catch ( error ) {
|
|
} catch ( error ) {
|
|
|
|
|
|
console.warn( 'THREE.GLTFExporter: userData of \'' + object.name + '\' ' +
|
|
console.warn( 'THREE.GLTFExporter: userData of \'' + object.name + '\' ' +
|
|
'won\'t be serialized because of JSON.stringify error - ' + error.message );
|
|
'won\'t be serialized because of JSON.stringify error - ' + error.message );
|
|
|
|
|
|
- return {};
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
@@ -1058,11 +1088,7 @@ GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( Object.keys( material.userData ).length > 0 ) {
|
|
|
|
-
|
|
|
|
- gltfMaterial.extras = serializeUserData( material );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ serializeUserData( material, gltfMaterial );
|
|
|
|
|
|
outputJSON.materials.push( gltfMaterial );
|
|
outputJSON.materials.push( gltfMaterial );
|
|
|
|
|
|
@@ -1309,8 +1335,6 @@ GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- var extras = ( Object.keys( geometry.userData ).length > 0 ) ? serializeUserData( geometry ) : undefined;
|
|
|
|
-
|
|
|
|
var forceIndices = options.forceIndices;
|
|
var forceIndices = options.forceIndices;
|
|
var isMultiMaterial = Array.isArray( mesh.material );
|
|
var isMultiMaterial = Array.isArray( mesh.material );
|
|
|
|
|
|
@@ -1352,7 +1376,7 @@ GLTFExporter.prototype = {
|
|
attributes: attributes,
|
|
attributes: attributes,
|
|
};
|
|
};
|
|
|
|
|
|
- if ( extras ) primitive.extras = extras;
|
|
|
|
|
|
+ serializeUserData( geometry, primitive );
|
|
|
|
|
|
if ( targets.length > 0 ) primitive.targets = targets;
|
|
if ( targets.length > 0 ) primitive.targets = targets;
|
|
|
|
|
|
@@ -1732,11 +1756,7 @@ GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( object.userData && Object.keys( object.userData ).length > 0 ) {
|
|
|
|
-
|
|
|
|
- gltfNode.extras = serializeUserData( object );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ serializeUserData( object, gltfNode );
|
|
|
|
|
|
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
|
|
|
|
@@ -1877,6 +1897,8 @@ GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ serializeUserData( scene, gltfScene );
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|