瀏覽代碼

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;