浏览代码

add branches for other file types

Garrett Johnson 5 年之前
父节点
当前提交
155aab1e7c
共有 3 个文件被更改,包括 28 次插入7 次删除
  1. 5 2
      src/base/TilesRendererBase.js
  2. 3 2
      src/three/DebugTilesRenderer.js
  3. 20 3
      src/three/TilesRenderer.js

+ 5 - 2
src/base/TilesRendererBase.js

@@ -113,7 +113,7 @@ export class TilesRendererBase {
 	}
 
 	// Overrideable
-	parseTile( buffer, tile ) {
+	parseTile( buffer, tile, extension ) {
 
 		return null;
 
@@ -374,7 +374,10 @@ export class TilesRendererBase {
 
 					}
 
-					return this.parseTile( buffer, tile );
+					const uri = tile.content.uri;
+					const extension = uri.split(/\./g).pop();
+
+					return this.parseTile( buffer, tile, extension );
 
 				} );
 

+ 3 - 2
src/three/DebugTilesRenderer.js

@@ -166,6 +166,7 @@ export class DebugTilesRenderer extends TilesRenderer {
 
 		}
 
+		// TODO: Support i3dm, pnts, cmpt here
 		const errorTarget = this.errorTarget;
 		const colorMode = this.colorMode;
 		const visibleTiles = this.visibleTiles;
@@ -301,10 +302,10 @@ export class DebugTilesRenderer extends TilesRenderer {
 
 	}
 
-	parseTile( buffer, tile ) {
+	parseTile( buffer, tile, extension ) {
 
 		return super
-			.parseTile( buffer, tile )
+			.parseTile( buffer, tile, extension )
 			.then( () => {
 
 				const cached = tile.cached;

+ 20 - 3
src/three/TilesRenderer.js

@@ -379,13 +379,14 @@ export class TilesRenderer extends TilesRendererBase {
 
 	}
 
-	parseTile( buffer, tile ) {
+	parseTile( buffer, tile, extension ) {
 
 		tile._loadIndex = tile._loadIndex || 0;
 		tile._loadIndex ++;
 
 		const loadIndex = tile._loadIndex;
 		const manager = new LoadingManager();
+		let promise = null;
 
 		if ( useImageBitmap ) {
 
@@ -410,7 +411,23 @@ export class TilesRenderer extends TilesRendererBase {
 
 		}
 
-		return new B3DMLoader( manager ).parse( buffer ).then( res => {
+		switch ( extension ) {
+
+			case 'b3dm':
+				promise = new B3DMLoader( manager ).parse( buffer );
+				break;
+
+			case 'pnts':
+			case 'cmpt':
+			case 'i3dm':
+			default:
+				console.warn( `TilesRenderer: Content type "${ extension }" not supported.` );
+				promise = Promise.resolve( null );
+				break;
+
+		}
+
+		return promise.then( res => {
 
 			if ( tile._loadIndex !== loadIndex ) {
 
@@ -422,7 +439,7 @@ export class TilesRenderer extends TilesRendererBase {
 			const cached = tile.cached;
 			const cachedTransform = cached.transform;
 
-			const scene = res.scene;
+			const scene = res ? res.scene : new Group();
 			switch ( upAxis.toLowerCase() ) {
 
 				case 'x':