|
@@ -1906,11 +1906,7 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
|
|
|
|
- var gltfScene = {
|
|
|
-
|
|
|
- nodes: []
|
|
|
-
|
|
|
- };
|
|
|
+ var gltfScene = {};
|
|
|
|
|
|
if ( scene.name !== '' ) {
|
|
|
|
|
@@ -2022,70 +2018,70 @@ THREE.GLTFExporter.prototype = {
|
|
|
var extensionsUsedList = Object.keys( extensionsUsed );
|
|
|
if ( extensionsUsedList.length > 0 ) outputJSON.extensionsUsed = extensionsUsedList;
|
|
|
|
|
|
- if ( outputJSON.buffers && outputJSON.buffers.length > 0 ) {
|
|
|
+ // Update bytelength of the single buffer.
|
|
|
+ if ( outputJSON.buffers && outputJSON.buffers.length > 0 ) outputJSON.buffers[ 0 ].byteLength = blob.size;
|
|
|
|
|
|
- // Update bytelength of the single buffer.
|
|
|
- outputJSON.buffers[ 0 ].byteLength = blob.size;
|
|
|
+ if ( options.binary === true ) {
|
|
|
|
|
|
- var reader = new window.FileReader();
|
|
|
+ // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
|
|
|
|
|
|
- if ( options.binary === true ) {
|
|
|
+ var GLB_HEADER_BYTES = 12;
|
|
|
+ var GLB_HEADER_MAGIC = 0x46546C67;
|
|
|
+ var GLB_VERSION = 2;
|
|
|
|
|
|
- // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification
|
|
|
+ var GLB_CHUNK_PREFIX_BYTES = 8;
|
|
|
+ var GLB_CHUNK_TYPE_JSON = 0x4E4F534A;
|
|
|
+ var GLB_CHUNK_TYPE_BIN = 0x004E4942;
|
|
|
|
|
|
- var GLB_HEADER_BYTES = 12;
|
|
|
- var GLB_HEADER_MAGIC = 0x46546C67;
|
|
|
- var GLB_VERSION = 2;
|
|
|
+ var reader = new window.FileReader();
|
|
|
+ reader.readAsArrayBuffer( blob );
|
|
|
+ reader.onloadend = function () {
|
|
|
|
|
|
- var GLB_CHUNK_PREFIX_BYTES = 8;
|
|
|
- var GLB_CHUNK_TYPE_JSON = 0x4E4F534A;
|
|
|
- var GLB_CHUNK_TYPE_BIN = 0x004E4942;
|
|
|
+ // Binary chunk.
|
|
|
+ var binaryChunk = getPaddedArrayBuffer( reader.result );
|
|
|
+ var binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
|
|
|
+ binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
|
|
|
+ binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );
|
|
|
+
|
|
|
+ // JSON chunk.
|
|
|
+ var jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( outputJSON ) ), 0x20 );
|
|
|
+ var jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
|
|
|
+ jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
|
|
|
+ jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );
|
|
|
+
|
|
|
+ // GLB header.
|
|
|
+ var header = new ArrayBuffer( GLB_HEADER_BYTES );
|
|
|
+ var headerView = new DataView( header );
|
|
|
+ headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
|
|
|
+ headerView.setUint32( 4, GLB_VERSION, true );
|
|
|
+ var totalByteLength = GLB_HEADER_BYTES
|
|
|
+ + jsonChunkPrefix.byteLength + jsonChunk.byteLength
|
|
|
+ + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
|
|
|
+ headerView.setUint32( 8, totalByteLength, true );
|
|
|
+
|
|
|
+ var glbBlob = new Blob( [
|
|
|
+ header,
|
|
|
+ jsonChunkPrefix,
|
|
|
+ jsonChunk,
|
|
|
+ binaryChunkPrefix,
|
|
|
+ binaryChunk
|
|
|
+ ], { type: 'application/octet-stream' } );
|
|
|
+
|
|
|
+ var glbReader = new window.FileReader();
|
|
|
+ glbReader.readAsArrayBuffer( glbBlob );
|
|
|
+ glbReader.onloadend = function () {
|
|
|
+
|
|
|
+ onDone( glbReader.result );
|
|
|
|
|
|
- reader.readAsArrayBuffer( blob );
|
|
|
- reader.onloadend = function () {
|
|
|
+ };
|
|
|
|
|
|
- // Binary chunk.
|
|
|
- var binaryChunk = getPaddedArrayBuffer( reader.result );
|
|
|
- var binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
|
|
|
- binaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );
|
|
|
- binaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );
|
|
|
-
|
|
|
- // JSON chunk.
|
|
|
- var jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( outputJSON ) ), 0x20 );
|
|
|
- var jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );
|
|
|
- jsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );
|
|
|
- jsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );
|
|
|
-
|
|
|
- // GLB header.
|
|
|
- var header = new ArrayBuffer( GLB_HEADER_BYTES );
|
|
|
- var headerView = new DataView( header );
|
|
|
- headerView.setUint32( 0, GLB_HEADER_MAGIC, true );
|
|
|
- headerView.setUint32( 4, GLB_VERSION, true );
|
|
|
- var totalByteLength = GLB_HEADER_BYTES
|
|
|
- + jsonChunkPrefix.byteLength + jsonChunk.byteLength
|
|
|
- + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
|
|
|
- headerView.setUint32( 8, totalByteLength, true );
|
|
|
-
|
|
|
- var glbBlob = new Blob( [
|
|
|
- header,
|
|
|
- jsonChunkPrefix,
|
|
|
- jsonChunk,
|
|
|
- binaryChunkPrefix,
|
|
|
- binaryChunk
|
|
|
- ], { type: 'application/octet-stream' } );
|
|
|
-
|
|
|
- var glbReader = new window.FileReader();
|
|
|
- glbReader.readAsArrayBuffer( glbBlob );
|
|
|
- glbReader.onloadend = function () {
|
|
|
-
|
|
|
- onDone( glbReader.result );
|
|
|
-
|
|
|
- };
|
|
|
+ };
|
|
|
|
|
|
- };
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
+ if ( outputJSON.buffers && outputJSON.buffers.length > 0 ) {
|
|
|
|
|
|
+ var reader = new window.FileReader();
|
|
|
reader.readAsDataURL( blob );
|
|
|
reader.onloadend = function () {
|
|
|
|
|
@@ -2095,11 +2091,11 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
};
|
|
|
|
|
|
- }
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
+ onDone( outputJSON );
|
|
|
|
|
|
- onDone( outputJSON );
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|