ソースを参照

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;