소스 검색

Merge pull request #114 from NASA-AMMOS/on-load-tileset-cb

Add load tileset callback
Garrett Johnson 5 년 전
부모
커밋
4cddb4910c
3개의 변경된 파일51개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      CHANGELOG.md
  2. 33 0
      README.md
  3. 17 0
      src/three/TilesRenderer.js

+ 1 - 0
CHANGELOG.md

@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
 ### Added
 
 - `manager` field to `TilesRenderer` to enable support for DRACO decompression.
+- `TilesRenderer.onLoadTileSet` callback function.
 
 ### Fixed
 

+ 33 - 0
README.md

@@ -142,6 +142,31 @@ tilesRenderer.manager.addHandler( /\.gltf$/, {
 } );
 ```
 
+## Render On Change
+
+The tile set and model load callbacks can be used to detect when the data has changed and a new render is necessary.
+
+```js
+let needsRerender = true;
+const tilesRenderer = new TilesRenderer( './path/to/tileset.json' );
+tilesRenderer.onLoadTileSet = () => needsRerender = true;
+tilesRenderer.onLoadModel = () => needsRerender = true;
+
+function renderLoop() {
+
+	requestAnimationFrame( renderLoop );
+	if ( needsRerender ) {
+	
+		needsRerender = false;
+		tilesRenderer.upadate();
+		renderer.render( camera, scene );
+	
+	}
+
+}
+renderLoop();
+```
+
 # API
 
 ## TilesRenderer
@@ -317,6 +342,14 @@ forEachLoadedModel( callback : ( scene : Object3D, tile : object ) => void ) : v
 
 Fires the callback for every loaded scene in the hierarchy with the associatd tile as the second argument. This can be used to update the materials of all loaded meshes in the tile set.
 
+### .onLoadTileSet
+
+```js
+onLoadTileSet = null : ( tileSet : Object ) => void
+```
+
+Callback that is called whenever a tileset is loaded.
+
 ### .onLoadModel
 
 ```js

+ 17 - 0
src/three/TilesRenderer.js

@@ -82,6 +82,7 @@ export class TilesRenderer extends TilesRendererBase {
 		this.visibleTiles = new Set();
 		this._autoDisableRendererCulling = true;
 
+		this.onLoadTileSet = null;
 		this.onLoadModel = null;
 		this.onDisposeModel = null;
 
@@ -255,6 +256,22 @@ export class TilesRenderer extends TilesRendererBase {
 	}
 
 	/* Overriden */
+	loadTileSet( url ) {
+
+		const pr = super.loadTileSet( url );
+		pr.then(() => {
+
+			if ( this.onLoadTileSet ) {
+
+				this.onLoadTileSet( this.tileSets[ url ] );
+
+			}
+
+		});
+		return pr;
+
+	}
+
 	update() {
 
 		const group = this.group;