Browse Source

Add working path to b3dm loader, pass it through to GLTFLoader

Garrett Johnson 4 years ago
parent
commit
98464663fd

+ 14 - 1
src/base/B3DMLoaderBase.js

@@ -8,6 +8,7 @@ export class B3DMLoaderBase {
 	constructor() {
 
 		this.fetchOptions = {};
+		this.workingPath = '';
 
 	}
 
@@ -24,7 +25,19 @@ export class B3DMLoaderBase {
 				return res.arrayBuffer();
 
 			} )
-			.then( buffer => this.parse( buffer ) );
+			.then( buffer => {
+
+				if ( this.workingPath === '' ) {
+
+					const splits = url.split( /\\\//g );
+					splits.pop();
+					this.workingPath = splits.join( '/' );
+
+				}
+
+				this.parse( buffer );
+
+			} );
 
 	}
 

+ 1 - 1
src/three/B3DMLoader.js

@@ -19,7 +19,7 @@ export class B3DMLoader extends B3DMLoaderBase {
 
 			const manager = this.manager;
 			const loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );
-			loader.parse( gltfBuffer, null, model => {
+			loader.parse( gltfBuffer, this.workingPath, model => {
 
 				const { batchTable, featureTable } = b3dm;
 				const { scene } = model;

+ 4 - 1
src/three/CMPTLoader.js

@@ -27,7 +27,10 @@ export class CMPTLoader extends CMPTLoaderBase {
 				case 'b3dm': {
 
 					const slicedBuffer = buffer.slice();
-					const promise = new B3DMLoader( manager ).parse( slicedBuffer.buffer );
+					const loader = new B3DMLoader( manager );
+					loader.workingPath = this.workingPath;
+
+					const promise = loader.parse( slicedBuffer.buffer );
 					promises.push( promise );
 					break;
 

+ 1 - 1
src/three/I3DMLoader.js

@@ -36,7 +36,7 @@ export class I3DMLoader extends I3DMLoaderBase {
 
 					const manager = this.manager;
 					const loader = manager.getHandler( 'path.gltf' ) || new GLTFLoader( manager );
-					loader.parse( gltfBuffer, null, model => {
+					loader.parse( gltfBuffer, this.workingPath, model => {
 
 						const INSTANCES_LENGTH = featureTable.getData( 'INSTANCES_LENGTH' );
 						const POSITION = featureTable.getData( 'POSITION', INSTANCES_LENGTH, 'FLOAT', 'VEC3' );

+ 3 - 1
src/three/TilesRenderer.js

@@ -522,7 +522,9 @@ export class TilesRenderer extends TilesRendererBase {
 		switch ( extension ) {
 
 			case 'b3dm':
-				promise = new B3DMLoader( manager )
+				const loader = new B3DMLoader( manager );
+				loader.workingPath = workingPath;
+				promise = loader
 					.parse( buffer )
 					.then( res => res.scene );
 				break;