Skip to content

Commit 2b858d6

Browse files
committed
bugfixes
1 parent 67964c0 commit 2b858d6

File tree

1 file changed

+20
-23
lines changed

1 file changed

+20
-23
lines changed

Source/Scene/Cesium3DTilesetTraversal.js

+20-23
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,6 @@ define([
301301

302302
BaseTraversal.prototype.getChildren = function(tile) {
303303
if (this.updateAndCheckChildren(tile)) {
304-
if (!childrenAreVisible(tile)) {
305-
++this.tileset._statistics.numberOfTilesCulledWithChildrenUnion;
306-
return emptyArray;
307-
}
308-
309304
var children = tile.children;
310305
var childrenLength = children.length;
311306
var allReady = true;
@@ -341,12 +336,12 @@ define([
341336
}
342337
}
343338

344-
if (tile.refine === Cesium3DTileRefine.ADD && tile.hasRenderableContent) {
339+
if (hasAdditiveContent(tile)) {
345340
tileset._desiredTiles.push(tile);
346341
}
347342

348343
// stop traversal when we've attained the desired level of error
349-
if (tile._screenSpaceError <= this.baseScreenSpaceError && tile.hasRenderableContent) {
344+
if (tile._screenSpaceError <= this.baseScreenSpaceError) {
350345
return false;
351346
}
352347

@@ -362,8 +357,12 @@ define([
362357
};
363358

364359
BaseTraversal.prototype.leafHandler = function(tile) {
365-
// additive tiles have already been pushed to tileset._desiredTiles
366-
if (tile.refine === Cesium3DTileRefine.REPLACE) {
360+
// if skipLODs is off, leaves of the base traversal get pushed to tileset._desiredTiles. additive tiles have already been pushed
361+
if (this.tileset.skipLODs || tile.refine === Cesium3DTileRefine.REPLACE) {
362+
if (tile.refine === Cesium3DTileRefine.REPLACE && !childrenAreVisible(tile)) {
363+
++this.tileset._statistics.numberOfTilesCulledWithChildrenUnion;
364+
return;
365+
}
367366
this.leaves.push(tile);
368367
}
369368
};
@@ -396,11 +395,6 @@ define([
396395

397396
InternalBaseTraversal.prototype.getChildren = function(tile) {
398397
if (this.updateAndCheckChildren(tile, this.baseScreenSpaceError)) {
399-
if (!childrenAreVisible(tile)) {
400-
++this.tileset._statistics.numberOfTilesCulledWithChildrenUnion;
401-
return emptyArray;
402-
}
403-
404398
var children = tile.children;
405399
var childrenLength = children.length;
406400
for (var i = 0; i < childrenLength; ++i) {
@@ -450,7 +444,7 @@ define([
450444

451445
SkipTraversal.prototype.leafHandler = function(tile) {
452446
// additive tiles have already been pushed
453-
if (tile.refine === Cesium3DTileRefine.REPLACE) {
447+
if (!hasAdditiveContent(tile)) {
454448
this.tileset._desiredTiles.push(tile);
455449
}
456450
};
@@ -481,7 +475,7 @@ define([
481475
var maximumScreenSpaceError = tileset._maximumScreenSpaceError;
482476

483477
if (!tile.hasTilesetContent) {
484-
if (tile.refine === Cesium3DTileRefine.ADD && tile.hasRenderableContent) {
478+
if (hasAdditiveContent(tile)) {
485479
tileset._desiredTiles.push(tile);
486480
}
487481

@@ -500,7 +494,7 @@ define([
500494
}
501495

502496
var childrenVisibility = updateChildren(tileset, tile, this.frameState);
503-
var showAdditive = tile.refine === Cesium3DTileRefine.ADD;
497+
var showAdditive = tile.refine === Cesium3DTileRefine.ADD && tile._screenSpaceError > maximumScreenSpaceError;
504498
var showReplacement = tile.refine === Cesium3DTileRefine.REPLACE && (childrenVisibility & Cesium3DTileChildrenVisibility.VISIBLE_IN_REQUEST_VOLUME) !== 0;
505499

506500
// at least one child is visible, but is not in request volume. the parent must be selected
@@ -509,11 +503,6 @@ define([
509503
}
510504

511505
if (showAdditive || showReplacement || tile.hasTilesetContent) {
512-
if (!childrenAreVisible(tile)) {
513-
++this.tileset._statistics.numberOfTilesCulledWithChildrenUnion;
514-
return emptyArray;
515-
}
516-
517506
var children = tile.children;
518507
var childrenLength = children.length;
519508
for (var i = 0; i < childrenLength; ++i) {
@@ -538,6 +527,10 @@ define([
538527

539528
InternalSkipTraversal.prototype.leafHandler = function(tile) {
540529
if (tile !== this.root) {
530+
if (tile.refine === Cesium3DTileRefine.REPLACE && !childrenAreVisible(tile)) {
531+
++this.tileset._statistics.numberOfTilesCulledWithChildrenUnion;
532+
return;
533+
}
541534
if (!tile.hasEmptyContent) {
542535
if (this.tileset.loadSiblings) {
543536
var parent = tile.parent;
@@ -551,7 +544,7 @@ define([
551544
}
552545
}
553546
this.queue.push(tile);
554-
} else if (tile.refine === Cesium3DTileRefine.REPLACE) {
547+
} else if (!hasAdditiveContent(tile)) {
555548
// additive tiles have already been pushed
556549
this.tileset._desiredTiles.push(tile);
557550
}
@@ -708,6 +701,10 @@ define([
708701
return tile.refine === Cesium3DTileRefine.ADD || tile.children.length === 0 || tile.childrenVisibility & Cesium3DTileChildrenVisibility.VISIBLE !== 0;
709702
}
710703

704+
function hasAdditiveContent(tile) {
705+
return tile.refine === Cesium3DTileRefine.ADD && tile.hasRenderableContent;
706+
}
707+
711708
function DFS(root, options) {
712709
var stack = options.stack;
713710

0 commit comments

Comments
 (0)