Bladeren bron

Add support for using the magic bytes to determine file type

Garrett Johnson 3 jaren geleden
bovenliggende
commit
b6afc0221d
2 gewijzigde bestanden met toevoegingen van 6 en 4 verwijderingen
  1. 5 3
      src/three/TilesRenderer.js
  2. 1 1
      src/utilities/readMagicBytes.js

+ 5 - 3
src/three/TilesRenderer.js

@@ -15,6 +15,7 @@ import {
 	LoadingManager
 } from 'three';
 import { raycastTraverse, raycastTraverseFirstHit } from './raycastTraverse.js';
+import { readMagicBytes } from '../utilities/readMagicBytes.js';
 
 const INITIAL_FRUSTUM_CULLED = Symbol( 'INITIAL_FRUSTUM_CULLED' );
 const tempMat = new Matrix4();
@@ -600,7 +601,8 @@ export class TilesRenderer extends TilesRendererBase {
 
 		}
 
-		switch ( extension ) {
+		const fileType = readMagicBytes( buffer ) || extension;
+		switch ( fileType ) {
 
 			case 'b3dm': {
 
@@ -671,7 +673,7 @@ export class TilesRenderer extends TilesRendererBase {
 				break;
 
 			default:
-				console.warn( `TilesRenderer: Content type "${ extension }" not supported.` );
+				console.warn( `TilesRenderer: Content type "${ fileType }" not supported.` );
 				promise = Promise.resolve( null );
 				break;
 
@@ -692,7 +694,7 @@ export class TilesRenderer extends TilesRendererBase {
 			// any transformations applied to it can be assumed to be applied after load
 			// (such as applying RTC_CENTER) meaning they should happen _after_ the z-up
 			// rotation fix which is why "multiply" happens here.
-			if ( extension === 'glb' || extension === 'gltf' ) {
+			if ( fileType === 'glb' || fileType === 'gltf' ) {
 
 				scene.matrix.multiply( tempMat );
 

+ 1 - 1
src/utilities/readMagicBytes.js

@@ -20,7 +20,7 @@ export function readMagicBytes( bufferOrDataView ) {
 	let magicBytes = '';
 	for ( let i = 0; i < 4; i ++ ) {
 
-	  res += String.fromCharCode( view.getUint8( i ) );
+		magicBytes += String.fromCharCode( view.getUint8( i ) );
 
 	}