Преглед изворни кода

Merge pull request #39 from NASA-AMMOS/active-tiles

Fix active tiles
Garrett Johnson пре 5 година
родитељ
комит
2c61568f4a
4 измењених фајлова са 22 додато и 7 уклоњено
  1. 6 3
      example/index.js
  2. 1 0
      src/base/TilesRendererBase.js
  3. 13 4
      src/base/traverseFunctions.js
  4. 2 0
      src/three/DebugTilesRenderer.js

+ 6 - 3
example/index.js

@@ -40,6 +40,7 @@ let params = {
 	'errorThreshold': 60,
 	'maxDepth': 15,
 	'loadSiblings': true,
+	'displayActiveTiles': false,
 
 	'up': '+Y',
 	'displayBoxBounds': false,
@@ -156,9 +157,9 @@ function init() {
 
 	onWindowResize();
 	window.addEventListener( 'resize', onWindowResize, false );
-	window.addEventListener( 'mousemove', onMouseMove, false );
-	window.addEventListener( 'mousedown', onMouseDown, false );
-	window.addEventListener( 'mouseup', onMouseUp, false );
+	renderer.domElement.addEventListener( 'mousemove', onMouseMove, false );
+	renderer.domElement.addEventListener( 'mousedown', onMouseDown, false );
+	renderer.domElement.addEventListener( 'mouseup', onMouseUp, false );
 
 	// GUI
 	const gui = new dat.GUI();
@@ -167,6 +168,7 @@ function init() {
 	const tileOptions = gui.addFolder( 'Tiles Options' );
 	tileOptions.add( params, 'orthographic' );
 	tileOptions.add( params, 'loadSiblings' );
+	tileOptions.add( params, 'displayActiveTiles' );
 	tileOptions.add( params, 'errorTarget' ).min( 0 ).max( 50 );
 	tileOptions.add( params, 'errorThreshold' ).min( 0 ).max( 1000 );
 	tileOptions.add( params, 'maxDepth' ).min( 1 ).max( 100 );
@@ -312,6 +314,7 @@ function animate() {
 	tiles.errorTarget = params.errorTarget;
 	tiles.errorThreshold = params.errorThreshold;
 	tiles.loadSiblings = params.loadSiblings;
+	tiles.displayActiveTiles = params.displayActiveTiles;
 	tiles.maxDepth = params.maxDepth;
 	tiles.camera = params.orthographic ? orthoCamera : camera;
 	tiles.displayBoxBounds = params.displayBoxBounds;

+ 1 - 0
src/base/TilesRendererBase.js

@@ -57,6 +57,7 @@ export class TilesRendererBase {
 		this.errorTarget = 6.0;
 		this.errorThreshold = Infinity;
 		this.loadSiblings = true;
+		this.displayActiveTiles = false;
 		this.maxDepth = Infinity;
 
 	}

+ 13 - 4
src/base/traverseFunctions.js

@@ -141,7 +141,8 @@ export function determineFrustumSet( tile, renderer ) {
 
 		for ( let i = 0, l = children.length; i < l; i ++ ) {
 
-			recursivelyMarkUsed( tile, frameCount, lruCache );
+			const c = children[ i ];
+			recursivelyMarkUsed( c, frameCount, lruCache );
 
 		}
 
@@ -323,7 +324,15 @@ export function toggleTiles( tile, renderer ) {
 
 			// enable visibility if active due to shadows
 			setActive = tile.__active;
-			setVisible = tile.__visible;
+			if ( renderer.displayActiveTiles ) {
+
+				setVisible = tile.__active || tile.__visible;
+
+			} else {
+
+				setVisible = tile.__visible;
+
+			}
 
 		}
 
@@ -332,13 +341,13 @@ export function toggleTiles( tile, renderer ) {
 
 			if ( tile.__wasSetActive !== setActive ) {
 
-				renderer.setTileVisible( tile, setActive );
+				renderer.setTileActive( tile, setActive );
 
 			}
 
 			if ( tile.__wasSetVisible !== setVisible ) {
 
-				renderer.setTileActive( tile, setVisible );
+				renderer.setTileVisible( tile, setVisible );
 
 			}
 

+ 2 - 0
src/three/DebugTilesRenderer.js

@@ -228,6 +228,8 @@ export class DebugTilesRenderer extends TilesRenderer {
 						}
 						case DISTANCE: {
 
+							// We don't update the distance if the geometric error is 0.0 so
+							// it will always be black.
 							const val = Math.min( tile.cached.distance / maxDistance, 1 );
 							c.material.color.setRGB( val, val, val );
 							break;