@loaders.gl/tiles 4.4.5 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +14 -3
- package/README.md +110 -1
- package/dist/dist.dev.js +6588 -2057
- package/dist/dist.min.js +1 -1
- package/dist/image-set.d.ts +94 -0
- package/dist/image-set.d.ts.map +1 -0
- package/dist/image-set.js +243 -0
- package/dist/image-set.js.map +1 -0
- package/dist/index.cjs +6872 -2160
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +33 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -8
- package/dist/index.js.map +1 -1
- package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
- package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tile.js +70 -0
- package/dist/point-cloud/point-cloud-tile.js.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.js +510 -0
- package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
- package/dist/point-cloud/types.d.ts +64 -0
- package/dist/point-cloud/types.d.ts.map +1 -0
- package/dist/point-cloud/types.js +5 -0
- package/dist/point-cloud/types.js.map +1 -0
- package/dist/raster-set.d.ts +113 -0
- package/dist/raster-set.d.ts.map +1 -0
- package/dist/raster-set.js +274 -0
- package/dist/raster-set.js.map +1 -0
- package/dist/tileset-2d/adapter.d.ts +38 -0
- package/dist/tileset-2d/adapter.d.ts.map +1 -0
- package/dist/tileset-2d/adapter.js +5 -0
- package/dist/tileset-2d/adapter.js.map +1 -0
- package/dist/tileset-2d/index.d.ts +7 -0
- package/dist/tileset-2d/index.d.ts.map +1 -0
- package/dist/tileset-2d/index.js +6 -0
- package/dist/tileset-2d/index.js.map +1 -0
- package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
- package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
- package/dist/tileset-2d/tile-2d-header.js +181 -0
- package/dist/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist/tileset-2d/tileset-2d.d.ts +201 -0
- package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d/tileset-2d.js +532 -0
- package/dist/tileset-2d/tileset-2d.js.map +1 -0
- package/dist/tileset-2d/types.d.ts +44 -0
- package/dist/tileset-2d/types.d.ts.map +1 -0
- package/dist/tileset-2d/types.js +5 -0
- package/dist/tileset-2d/types.js.map +1 -0
- package/dist/tileset-2d.d.ts +2 -0
- package/dist/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d.js +5 -0
- package/dist/tileset-2d.js.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +133 -29
- package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tile-3d.js +282 -77
- package/dist/tileset-3d/common/tile-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts +317 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.js +807 -0
- package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts +29 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-cache.js +12 -4
- package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
- package/dist/tileset-3d/common/tileset-source.d.ts +204 -0
- package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-source.js +17 -0
- package/dist/tileset-3d/common/tileset-source.js.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +15 -2
- package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +30 -3
- package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +111 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +340 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +189 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +510 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +43 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +119 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +3 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +5 -2
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +17 -23
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
- package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +3 -0
- package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
- package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +1 -0
- package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts +86 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/frame-state.js +84 -9
- package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +72 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js +257 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +134 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +179 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
- package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
- package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/zoom.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/doubly-linked-list.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list.js +1 -0
- package/dist/utils/doubly-linked-list.js.map +1 -1
- package/dist/utils/managed-array.d.ts.map +1 -1
- package/dist/utils/managed-array.js +1 -0
- package/dist/utils/managed-array.js.map +1 -1
- package/package.json +7 -6
- package/src/image-set.ts +328 -0
- package/src/index.ts +99 -9
- package/src/point-cloud/point-cloud-tile.ts +80 -0
- package/src/point-cloud/point-cloud-tileset.ts +713 -0
- package/src/point-cloud/types.ts +82 -0
- package/src/raster-set.ts +412 -0
- package/src/tileset-2d/adapter.ts +47 -0
- package/src/tileset-2d/index.ts +33 -0
- package/src/tileset-2d/tile-2d-header.ts +224 -0
- package/src/tileset-2d/tileset-2d.ts +716 -0
- package/src/tileset-2d/types.ts +39 -0
- package/src/tileset-2d.ts +5 -0
- package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
- package/src/{tileset → tileset-3d/common}/tile-3d.ts +348 -93
- package/src/tileset-3d/common/tileset-3d.ts +1087 -0
- package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
- package/src/tileset-3d/common/tileset-source.ts +255 -0
- package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +32 -4
- package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +534 -0
- package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +632 -0
- package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +140 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +6 -2
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +19 -24
- package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
- package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +2 -0
- package/src/tileset-3d/helpers/frame-state.ts +311 -0
- package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
- package/src/tileset-3d/helpers/tiles-3d-lod.ts +370 -0
- package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
- package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
- package/src/types.ts +13 -0
- package/src/utils/doubly-linked-list.ts +2 -0
- package/src/utils/managed-array.ts +2 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +0 -7
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +0 -53
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.d.ts +0 -28
- package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.js +0 -113
- package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.d.ts.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.d.ts.map +0 -1
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.d.ts +0 -284
- package/dist/tileset/tileset-3d.d.ts.map +0 -1
- package/dist/tileset/tileset-3d.js +0 -814
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.d.ts +0 -19
- package/dist/tileset/tileset-cache.d.ts.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/tileset-traverser.js.map +0 -1
- package/src/tileset/format-3d-tiles/tileset-3d-traverser.ts +0 -63
- package/src/tileset/helpers/frame-state.ts +0 -183
- package/src/tileset/helpers/tiles-3d-lod.ts +0 -149
- package/src/tileset/tileset-3d.ts +0 -1037
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
- /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
6
6
|
import { Vector3, Matrix4 } from '@math.gl/core';
|
|
7
7
|
import { CullingVolume } from '@math.gl/culling';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { getProjectedRadius } from "./helpers/i3s-lod.js";
|
|
13
|
-
import { get3dTilesOptions } from "./helpers/3d-tiles-options.js";
|
|
8
|
+
import { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from "../../constants.js";
|
|
9
|
+
import { createBoundingVolume, getCartographicBounds } from "../helpers/bounding-volume.js";
|
|
10
|
+
import { getTiles3DScreenSpaceError } from "../helpers/tiles-3d-lod.js";
|
|
11
|
+
import { getProjectedRadius } from "../helpers/i3s-lod.js";
|
|
14
12
|
import { TilesetTraverser } from "./tileset-traverser.js";
|
|
13
|
+
import { calculateFoveatedFactor, calculateTileRequestPriority, isFoveatedRequestDelayActive, isFoveatedRequestDeferred, isProgressiveResolutionPriority } from "../helpers/tiles-3d-request-priority.js";
|
|
15
14
|
const scratchVector = new Vector3();
|
|
16
15
|
function defined(x) {
|
|
17
16
|
return x !== undefined && x !== null;
|
|
@@ -33,8 +32,16 @@ export class Tile3D {
|
|
|
33
32
|
contentUrl;
|
|
34
33
|
/** Different refinement algorithms used by I3S and 3D tiles */
|
|
35
34
|
lodMetricType = 'geometricError';
|
|
36
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* The world-space geometric error, in meters, introduced if this tile is rendered and its
|
|
37
|
+
* children are not. For I3S this stores the format's unscaled screen-threshold metric instead.
|
|
38
|
+
*/
|
|
37
39
|
lodMetricValue = 0;
|
|
40
|
+
/**
|
|
41
|
+
* The source LOD metric before applying the tile's computed transform. Keeping the source value
|
|
42
|
+
* separate ensures transform updates never compound an already-scaled geometric error.
|
|
43
|
+
*/
|
|
44
|
+
_unscaledLodMetricValue = 0;
|
|
38
45
|
/** @todo math.gl is not exporting BoundingVolume base type? */
|
|
39
46
|
boundingVolume = null;
|
|
40
47
|
/**
|
|
@@ -46,6 +53,8 @@ export class Tile3D {
|
|
|
46
53
|
gpuMemoryUsageInBytes = 0;
|
|
47
54
|
/** The tile's children - an array of Tile3D objects. */
|
|
48
55
|
children = [];
|
|
56
|
+
/** Current lifecycle state for a lazy implicit subtree rooted at this tile. */
|
|
57
|
+
childrenState = 'ready';
|
|
49
58
|
depth = 0;
|
|
50
59
|
viewportIds = [];
|
|
51
60
|
transform = new Matrix4();
|
|
@@ -64,10 +73,20 @@ export class Tile3D {
|
|
|
64
73
|
// TODO Cesium 3d tiles specific
|
|
65
74
|
_expireDate = null;
|
|
66
75
|
_expiredContent = null;
|
|
76
|
+
/** In-flight source request shared by repeated traversal frames. */
|
|
77
|
+
_childrenPromise = null;
|
|
67
78
|
_boundingBox = undefined;
|
|
68
79
|
/** updated every frame for tree traversal and rendering optimizations: */
|
|
69
80
|
_distanceToCamera = 0;
|
|
70
81
|
_screenSpaceError = 0;
|
|
82
|
+
/** SSE calculated at the reduced viewport height used to prioritize coarse coverage. */
|
|
83
|
+
_screenSpaceErrorProgressiveResolution = 0;
|
|
84
|
+
/** Whether this tile should be promoted into the progressive-resolution request pass. */
|
|
85
|
+
_priorityProgressiveResolution = false;
|
|
86
|
+
/** Angular distance from the camera view axis used to prioritize center tiles. */
|
|
87
|
+
_foveatedFactor = 0;
|
|
88
|
+
/** Whether this peripheral request is currently inside the camera-motion deferral window. */
|
|
89
|
+
priorityDeferred = false;
|
|
71
90
|
_visibilityPlaneMask;
|
|
72
91
|
_visible = undefined;
|
|
73
92
|
_contentBoundingVolume;
|
|
@@ -116,8 +135,10 @@ export class Tile3D {
|
|
|
116
135
|
this.refine = this._getRefine(header.refine);
|
|
117
136
|
this.type = header.type;
|
|
118
137
|
this.contentUrl = header.contentUrl;
|
|
138
|
+
this.childrenState = header.implicitSubtree ? 'unloaded' : 'ready';
|
|
119
139
|
this._initializeLodMetric(header);
|
|
120
140
|
this._initializeTransforms(header);
|
|
141
|
+
this._updateLodMetricScale();
|
|
121
142
|
this._initializeBoundingVolumes(header);
|
|
122
143
|
this._initializeContent(header);
|
|
123
144
|
this._initializeRenderingState(header);
|
|
@@ -144,7 +165,18 @@ export class Tile3D {
|
|
|
144
165
|
}
|
|
145
166
|
/** Returns true if tile has children */
|
|
146
167
|
get hasChildren() {
|
|
147
|
-
return this.children.length > 0 ||
|
|
168
|
+
return (this.children.length > 0 ||
|
|
169
|
+
(this.header.children && this.header.children.length > 0) ||
|
|
170
|
+
Boolean(this.header.implicitSubtree && this.childrenState !== 'ready'));
|
|
171
|
+
}
|
|
172
|
+
/** Returns whether traversal may request an unresolved lazy child-header group. */
|
|
173
|
+
get hasUnloadedChildren() {
|
|
174
|
+
return Boolean(this.header.implicitSubtree &&
|
|
175
|
+
(this.childrenState === 'unloaded' || this.childrenState === 'failed'));
|
|
176
|
+
}
|
|
177
|
+
/** Returns whether a lazy child-header request is currently in flight. */
|
|
178
|
+
get childrenLoading() {
|
|
179
|
+
return this.childrenState === 'loading';
|
|
148
180
|
}
|
|
149
181
|
/**
|
|
150
182
|
* Determines if the tile's content is ready. This is automatically `true` for
|
|
@@ -205,13 +237,23 @@ export class Tile3D {
|
|
|
205
237
|
}
|
|
206
238
|
return this._boundingBox;
|
|
207
239
|
}
|
|
208
|
-
/**
|
|
209
|
-
|
|
240
|
+
/**
|
|
241
|
+
* Gets the tile's screen-space error for normal refinement or a reduced-height priority pass.
|
|
242
|
+
*
|
|
243
|
+
* I3S already supplies a screen-oriented LOD metric and intentionally ignores the optional 3D
|
|
244
|
+
* Tiles progressive-resolution height fraction.
|
|
245
|
+
*
|
|
246
|
+
* @param frameState - Current camera and viewport measurements.
|
|
247
|
+
* @param useParentLodMetric - Whether to substitute the parent LOD metric.
|
|
248
|
+
* @param viewportHeightFraction - Fraction of viewport height represented by the priority pass.
|
|
249
|
+
* @returns Screen-space LOD error for the current tileset format.
|
|
250
|
+
*/
|
|
251
|
+
getScreenSpaceError(frameState, useParentLodMetric, viewportHeightFraction = 1) {
|
|
210
252
|
switch (this.tileset.type) {
|
|
211
253
|
case TILESET_TYPE.I3S:
|
|
212
254
|
return getProjectedRadius(this, frameState);
|
|
213
255
|
case TILESET_TYPE.TILES3D:
|
|
214
|
-
return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric);
|
|
256
|
+
return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric, viewportHeightFraction);
|
|
215
257
|
default:
|
|
216
258
|
// eslint-disable-next-line
|
|
217
259
|
throw new Error('Unsupported tileset type');
|
|
@@ -230,12 +272,34 @@ export class Tile3D {
|
|
|
230
272
|
_getGpuMemoryUsageInBytes() {
|
|
231
273
|
return this.content.gpuMemoryUsageInBytes || this.content.byteLength || 0;
|
|
232
274
|
}
|
|
233
|
-
|
|
234
|
-
*
|
|
235
|
-
*
|
|
275
|
+
/**
|
|
276
|
+
* Returns scheduler priority for render-content requests.
|
|
277
|
+
*
|
|
278
|
+
* @returns Numeric priority, or a negative value when the queued request should be cancelled.
|
|
279
|
+
*/
|
|
280
|
+
_getPriority() {
|
|
281
|
+
return this._calculateRequestPriority(false);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Returns scheduler priority for lazy child-header requests.
|
|
285
|
+
*
|
|
286
|
+
* Contentless implicit placeholders intentionally retain `UNLOADED` content state, so metadata
|
|
287
|
+
* scheduling skips only that render-content cancellation check and preserves every visibility,
|
|
288
|
+
* recency, progressive, foveated, and motion-deferral rule.
|
|
289
|
+
*
|
|
290
|
+
* @returns Numeric priority, or a negative value when the queued request should be cancelled.
|
|
291
|
+
*/
|
|
292
|
+
_getChildrenPriority() {
|
|
293
|
+
return this._calculateRequestPriority(true);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Calculates the common scheduler priority for content or hierarchy metadata.
|
|
297
|
+
*
|
|
298
|
+
* @param allowUnloadedContent - Whether an empty placeholder may request child metadata.
|
|
299
|
+
* @returns Numeric priority, or a negative value when the queued request should be cancelled.
|
|
236
300
|
*/
|
|
237
301
|
// eslint-disable-next-line complexity
|
|
238
|
-
|
|
302
|
+
_calculateRequestPriority(allowUnloadedContent) {
|
|
239
303
|
const traverser = this.tileset._traverser;
|
|
240
304
|
const { skipLevelOfDetail } = traverser.options;
|
|
241
305
|
/*
|
|
@@ -253,7 +317,13 @@ export class Tile3D {
|
|
|
253
317
|
if (this.tileset._frameNumber - this._touchedFrame >= 1) {
|
|
254
318
|
return -1;
|
|
255
319
|
}
|
|
256
|
-
|
|
320
|
+
// RequestScheduler re-evaluates this callback before a queued request receives a slot. A
|
|
321
|
+
// negative priority cancels work that became deferred after it was queued; the scheduled
|
|
322
|
+
// follow-up traversal submits it again after the motion delay expires.
|
|
323
|
+
if (this.priorityDeferred) {
|
|
324
|
+
return -1;
|
|
325
|
+
}
|
|
326
|
+
if (!allowUnloadedContent && this.contentState === TILE_CONTENT_STATE.UNLOADED) {
|
|
257
327
|
return -1;
|
|
258
328
|
}
|
|
259
329
|
// Based on the priority function `getPriorityReverseScreenSpaceError` in CesiumJS. Scheduling priority is based on the parent's screen space error when possible.
|
|
@@ -263,8 +333,15 @@ export class Tile3D {
|
|
|
263
333
|
? parent._screenSpaceError
|
|
264
334
|
: this._screenSpaceError;
|
|
265
335
|
const rootScreenSpaceError = traverser.root ? traverser.root._screenSpaceError : 0.0;
|
|
266
|
-
// Map higher SSE to lower values (e.g. root tile is highest priority)
|
|
267
|
-
|
|
336
|
+
// Map higher SSE to lower values (e.g. root tile is highest priority), then combine the
|
|
337
|
+
// existing order with independent progressive and foveated priority bands.
|
|
338
|
+
const reverseScreenSpaceError = Math.max(rootScreenSpaceError - screenSpaceError, 0);
|
|
339
|
+
return calculateTileRequestPriority({
|
|
340
|
+
priorityProgressiveResolution: this._priorityProgressiveResolution,
|
|
341
|
+
foveatedFactor: this._foveatedFactor,
|
|
342
|
+
reverseScreenSpaceError,
|
|
343
|
+
rootScreenSpaceError
|
|
344
|
+
});
|
|
268
345
|
}
|
|
269
346
|
/**
|
|
270
347
|
* Requests the tile's content.
|
|
@@ -273,10 +350,10 @@ export class Tile3D {
|
|
|
273
350
|
// eslint-disable-next-line max-statements, complexity
|
|
274
351
|
async loadContent() {
|
|
275
352
|
if (this.hasEmptyContent) {
|
|
276
|
-
return false;
|
|
353
|
+
return { loaded: false };
|
|
277
354
|
}
|
|
278
355
|
if (this.content) {
|
|
279
|
-
return true;
|
|
356
|
+
return { loaded: true };
|
|
280
357
|
}
|
|
281
358
|
const expired = this.contentExpired;
|
|
282
359
|
if (expired) {
|
|
@@ -287,34 +364,16 @@ export class Tile3D {
|
|
|
287
364
|
if (!requestToken) {
|
|
288
365
|
// cancelled
|
|
289
366
|
this.contentState = TILE_CONTENT_STATE.UNLOADED;
|
|
290
|
-
return false;
|
|
367
|
+
return { loaded: false };
|
|
291
368
|
}
|
|
292
369
|
try {
|
|
293
|
-
const
|
|
294
|
-
// The content can be a binary tile ot a JSON tileset
|
|
295
|
-
const loader = this.tileset.loader;
|
|
296
|
-
const tilesetLoaderOptions = this.tileset.loadOptions[loader.id] || {};
|
|
297
|
-
const options = {
|
|
298
|
-
...this.tileset.loadOptions,
|
|
299
|
-
[loader.id]: {
|
|
300
|
-
...tilesetLoaderOptions,
|
|
301
|
-
isTileset: this.type === 'json',
|
|
302
|
-
...this._getLoaderSpecificOptions(loader.id)
|
|
303
|
-
} // TODO add typecheck - as const satisfies ...
|
|
304
|
-
};
|
|
305
|
-
this.content = await load(contentUrl, loader, options);
|
|
370
|
+
const loadResult = await this.tileset.source.loadTileContent(this);
|
|
306
371
|
if (this.tileset.options.contentLoader) {
|
|
307
372
|
await this.tileset.options.contentLoader(this);
|
|
308
373
|
}
|
|
309
|
-
if (this._isTileset()) {
|
|
310
|
-
// Add tile headers for the nested tilset's subtree
|
|
311
|
-
// Async update of the tree should be fine since there would never be edits to the same node
|
|
312
|
-
// TODO - we need to capture the child tileset's URL
|
|
313
|
-
this.tileset._initializeTileHeaders(this.content, this);
|
|
314
|
-
}
|
|
315
374
|
this.contentState = TILE_CONTENT_STATE.READY;
|
|
316
375
|
this._onContentLoaded();
|
|
317
|
-
return
|
|
376
|
+
return loadResult;
|
|
318
377
|
}
|
|
319
378
|
catch (error) {
|
|
320
379
|
// Tile is unloaded before the content finishes loading
|
|
@@ -325,6 +384,89 @@ export class Tile3D {
|
|
|
325
384
|
requestToken.done();
|
|
326
385
|
}
|
|
327
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Requests and installs this tile's lazy child-header group through its source.
|
|
389
|
+
*
|
|
390
|
+
* The same request scheduler and SSE/foveated priority value used for render content are reused
|
|
391
|
+
* for subtree metadata. Repeated traversal frames share one promise, and scheduler cancellation
|
|
392
|
+
* restores the unloaded state so a later frame can retry.
|
|
393
|
+
*
|
|
394
|
+
* @param frameState - View state that made the subtree eligible for refinement.
|
|
395
|
+
* @returns Source load result, or an unloaded result if scheduling was cancelled.
|
|
396
|
+
*/
|
|
397
|
+
async loadChildren(frameState) {
|
|
398
|
+
if (!this.header.implicitSubtree || this.childrenState === 'ready') {
|
|
399
|
+
return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
|
|
400
|
+
}
|
|
401
|
+
if (this._childrenPromise) {
|
|
402
|
+
return await this._childrenPromise;
|
|
403
|
+
}
|
|
404
|
+
if (!this.tileset.source.loadTileChildren) {
|
|
405
|
+
throw new Error('Tileset source does not support lazy tile children');
|
|
406
|
+
}
|
|
407
|
+
this.childrenState = 'loading';
|
|
408
|
+
this._childrenPromise = this._loadChildrenWithScheduler(frameState);
|
|
409
|
+
try {
|
|
410
|
+
return await this._childrenPromise;
|
|
411
|
+
}
|
|
412
|
+
finally {
|
|
413
|
+
this._childrenPromise = null;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Runs one lazy child-header load after obtaining a scheduler token.
|
|
418
|
+
*
|
|
419
|
+
* @param frameState - View state forwarded to the source implementation.
|
|
420
|
+
* @returns Source load result.
|
|
421
|
+
*/
|
|
422
|
+
async _loadChildrenWithScheduler(frameState) {
|
|
423
|
+
const requestToken = await this.tileset._requestScheduler.scheduleRequest(`${this.id}:implicit-subtree`, this._getChildrenPriority.bind(this));
|
|
424
|
+
if (!requestToken) {
|
|
425
|
+
this.childrenState = 'unloaded';
|
|
426
|
+
return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
|
|
427
|
+
}
|
|
428
|
+
try {
|
|
429
|
+
const loadResult = await this.tileset.source.loadTileChildren(this, frameState);
|
|
430
|
+
this.childrenState = loadResult.loaded ? 'ready' : 'unloaded';
|
|
431
|
+
return loadResult;
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
this.childrenState = 'failed';
|
|
435
|
+
throw error;
|
|
436
|
+
}
|
|
437
|
+
finally {
|
|
438
|
+
requestToken.done();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Replaces a contentless implicit placeholder with its materialized subtree-root header.
|
|
443
|
+
*
|
|
444
|
+
* Transform state is intentionally preserved: the placeholder already owns the composed
|
|
445
|
+
* transform, and reapplying the root transform here would double-transform bounds and geometric
|
|
446
|
+
* error. Content and raw geometric error are reinitialized from the newly available header.
|
|
447
|
+
*
|
|
448
|
+
* @param materializedHeader - Available root header produced from one subtree resource.
|
|
449
|
+
*/
|
|
450
|
+
applyImplicitSubtreeHeader(materializedHeader) {
|
|
451
|
+
const existingTransform = this.header.transform;
|
|
452
|
+
const existingTransformMatrix = this.header.transformMatrix;
|
|
453
|
+
this.header = {
|
|
454
|
+
...this.header,
|
|
455
|
+
...materializedHeader,
|
|
456
|
+
transform: existingTransform,
|
|
457
|
+
transformMatrix: existingTransformMatrix,
|
|
458
|
+
implicitSubtree: undefined
|
|
459
|
+
};
|
|
460
|
+
this.refine = this._getRefine(materializedHeader.refine);
|
|
461
|
+
this.type = materializedHeader.type;
|
|
462
|
+
this.contentUrl = materializedHeader.contentUrl;
|
|
463
|
+
this._initializeLodMetric(materializedHeader);
|
|
464
|
+
this._updateLodMetricScale();
|
|
465
|
+
this._initializeBoundingVolumes(this.header);
|
|
466
|
+
// Use the merged header so inherited viewer-request-volume metadata remains available when a
|
|
467
|
+
// materialized implicit tile has no render content of its own.
|
|
468
|
+
this._initializeContent(this.header);
|
|
469
|
+
}
|
|
328
470
|
// Unloads the tile's content.
|
|
329
471
|
unloadContent() {
|
|
330
472
|
if (this.content && this.content.destroy) {
|
|
@@ -361,12 +503,59 @@ export class Tile3D {
|
|
|
361
503
|
}
|
|
362
504
|
this._distanceToCamera = this.distanceToTile(frameState);
|
|
363
505
|
this._screenSpaceError = this.getScreenSpaceError(frameState, false);
|
|
506
|
+
this._updateRequestPriorityMetrics(frameState);
|
|
364
507
|
this._visibilityPlaneMask = this.visibility(frameState, parentVisibilityPlaneMask); // Use parent's plane mask to speed up visibility test
|
|
365
508
|
this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;
|
|
366
509
|
this._inRequestVolume = this.insideViewerRequestVolume(frameState);
|
|
367
510
|
this._frameNumber = frameState.frameNumber;
|
|
368
511
|
this.viewportIds = viewportIds;
|
|
369
512
|
}
|
|
513
|
+
/**
|
|
514
|
+
* Updates progressive-resolution and foveated request metrics for a 3D Tiles traversal frame.
|
|
515
|
+
*
|
|
516
|
+
* I3S retains its format-specific screen-threshold ordering and is explicitly isolated from
|
|
517
|
+
* geometric-error scheduling. Orthographic viewports still receive progressive coverage, but
|
|
518
|
+
* angular foveation is disabled because an orthographic frustum has no perspective field of view.
|
|
519
|
+
*
|
|
520
|
+
* @param frameState - Current camera and viewport measurements.
|
|
521
|
+
*/
|
|
522
|
+
_updateRequestPriorityMetrics(frameState) {
|
|
523
|
+
if (this.tileset.type !== TILESET_TYPE.TILES3D) {
|
|
524
|
+
this._screenSpaceErrorProgressiveResolution = this._screenSpaceError;
|
|
525
|
+
this._priorityProgressiveResolution = false;
|
|
526
|
+
this._foveatedFactor = 0;
|
|
527
|
+
this.priorityDeferred = false;
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
const options = this.tileset.options;
|
|
531
|
+
const progressiveResolutionHeightFraction = options.progressiveResolutionHeightFraction;
|
|
532
|
+
this._screenSpaceErrorProgressiveResolution = this.getScreenSpaceError(frameState, false, progressiveResolutionHeightFraction);
|
|
533
|
+
this._priorityProgressiveResolution = isProgressiveResolutionPriority(this._screenSpaceErrorProgressiveResolution, this.parent?._screenSpaceErrorProgressiveResolution, this.tileset.memoryAdjustedScreenSpaceError, progressiveResolutionHeightFraction);
|
|
534
|
+
if (!options.foveatedScreenSpaceError ||
|
|
535
|
+
frameState.viewport?.orthographic ||
|
|
536
|
+
!frameState.camera?.position ||
|
|
537
|
+
!frameState.camera?.direction) {
|
|
538
|
+
this._foveatedFactor = 0;
|
|
539
|
+
this.priorityDeferred = false;
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
this._foveatedFactor = calculateFoveatedFactor(this.boundingVolume, frameState.camera);
|
|
543
|
+
const deferralEligible = isFoveatedRequestDeferred({
|
|
544
|
+
refinement: this.refine,
|
|
545
|
+
skipLevelOfDetail: this.tileset._traverser.options.skipLevelOfDetail,
|
|
546
|
+
foveatedScreenSpaceError: options.foveatedScreenSpaceError,
|
|
547
|
+
foveatedConeSize: options.foveatedConeSize,
|
|
548
|
+
minimumScreenSpaceErrorRelaxation: options.foveatedMinimumScreenSpaceErrorRelaxation,
|
|
549
|
+
interpolationCallback: options.foveatedInterpolationCallback,
|
|
550
|
+
foveatedFactor: this._foveatedFactor,
|
|
551
|
+
verticalFieldOfView: frameState.camera.verticalFieldOfView,
|
|
552
|
+
screenSpaceError: this._screenSpaceError,
|
|
553
|
+
parentScreenSpaceError: this.parent?._screenSpaceError,
|
|
554
|
+
maximumScreenSpaceError: this.tileset.memoryAdjustedScreenSpaceError,
|
|
555
|
+
priorityProgressiveResolution: this._priorityProgressiveResolution
|
|
556
|
+
});
|
|
557
|
+
this.priorityDeferred = isFoveatedRequestDelayActive(deferralEligible, frameState.camera.timeSinceMovement, options.foveatedTimeDelay);
|
|
558
|
+
}
|
|
370
559
|
// Determines whether the tile's bounding volume intersects the culling volume.
|
|
371
560
|
// @param {FrameState} frameState The frame state.
|
|
372
561
|
// @param {Number} parentVisibilityPlaneMask The parent's plane mask to speed up the visibility check.
|
|
@@ -474,6 +663,7 @@ export class Tile3D {
|
|
|
474
663
|
return this.header.extras;
|
|
475
664
|
}
|
|
476
665
|
// INTERNAL METHODS
|
|
666
|
+
/** Initializes the tile's LOD metric from its header or its nearest available ancestor. */
|
|
477
667
|
_initializeLodMetric(header) {
|
|
478
668
|
if ('lodMetricType' in header) {
|
|
479
669
|
this.lodMetricType = header.lodMetricType;
|
|
@@ -485,14 +675,18 @@ export class Tile3D {
|
|
|
485
675
|
}
|
|
486
676
|
// This is used to compute screen space error, i.e., the error measured in pixels.
|
|
487
677
|
if ('lodMetricValue' in header) {
|
|
488
|
-
this.
|
|
678
|
+
this._unscaledLodMetricValue = header.lodMetricValue;
|
|
489
679
|
}
|
|
490
680
|
else {
|
|
491
|
-
|
|
492
|
-
|
|
681
|
+
// Inherit the source value, not the parent's world-space value. The child's complete
|
|
682
|
+
// transform will be applied after transform initialization below.
|
|
683
|
+
this._unscaledLodMetricValue = this.parent
|
|
684
|
+
? this.parent._unscaledLodMetricValue
|
|
685
|
+
: this.tileset.lodMetricValue;
|
|
493
686
|
// eslint-disable-next-line
|
|
494
687
|
console.warn('3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue');
|
|
495
688
|
}
|
|
689
|
+
this.lodMetricValue = this._unscaledLodMetricValue;
|
|
496
690
|
}
|
|
497
691
|
_initializeTransforms(tileHeader) {
|
|
498
692
|
// The local transform of this tile.
|
|
@@ -506,6 +700,26 @@ export class Tile3D {
|
|
|
506
700
|
const parentInitialTransform = parent && parent._initialTransform ? parent._initialTransform.clone() : new Matrix4();
|
|
507
701
|
this._initialTransform = new Matrix4(parentInitialTransform).multiplyRight(this.transform);
|
|
508
702
|
}
|
|
703
|
+
/**
|
|
704
|
+
* Updates the world-space LOD metric from the source metric and the complete tile transform.
|
|
705
|
+
*
|
|
706
|
+
* 3D Tiles geometric error is a distance in the tile's local meters. Screen-space error (SSE)
|
|
707
|
+
* compares that distance with a world-space camera distance, so both quantities must use the
|
|
708
|
+
* same scale. For non-uniform transforms the largest axis scale is deliberately used: this is
|
|
709
|
+
* conservative and prevents refinement from stopping while any transformed dimension can still
|
|
710
|
+
* exceed the requested visual error. Rotation and translation do not affect the scale.
|
|
711
|
+
*
|
|
712
|
+
* I3S `maxScreenThreshold` is already a screen-space metric and must not be transform-scaled.
|
|
713
|
+
*/
|
|
714
|
+
_updateLodMetricScale() {
|
|
715
|
+
if (this.lodMetricType !== LOD_METRIC_TYPE.GEOMETRIC_ERROR) {
|
|
716
|
+
this.lodMetricValue = this._unscaledLodMetricValue;
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
const transformScale = this.computedTransform.getScale(scratchVector);
|
|
720
|
+
const maximumScale = Math.max(transformScale[0], transformScale[1], transformScale[2]);
|
|
721
|
+
this.lodMetricValue = this._unscaledLodMetricValue * maximumScale;
|
|
722
|
+
}
|
|
509
723
|
_initializeBoundingVolumes(tileHeader) {
|
|
510
724
|
this._contentBoundingVolume = null;
|
|
511
725
|
this._viewerRequestVolume = null;
|
|
@@ -532,6 +746,10 @@ export class Tile3D {
|
|
|
532
746
|
this._distanceToCamera = 0;
|
|
533
747
|
this._centerZDepth = 0;
|
|
534
748
|
this._screenSpaceError = 0;
|
|
749
|
+
this._screenSpaceErrorProgressiveResolution = 0;
|
|
750
|
+
this._priorityProgressiveResolution = false;
|
|
751
|
+
this._foveatedFactor = 0;
|
|
752
|
+
this.priorityDeferred = false;
|
|
535
753
|
this._visibilityPlaneMask = CullingVolume.MASK_INDETERMINATE;
|
|
536
754
|
this._visible = undefined;
|
|
537
755
|
this._inRequestVolume = false;
|
|
@@ -548,8 +766,15 @@ export class Tile3D {
|
|
|
548
766
|
// Inherit from parent tile if omitted.
|
|
549
767
|
return refine || (this.parent && this.parent.refine) || TILE_REFINEMENT.REPLACE;
|
|
550
768
|
}
|
|
769
|
+
/**
|
|
770
|
+
* Returns whether loaded content is an external tileset.
|
|
771
|
+
*
|
|
772
|
+
* Parsed shape is authoritative because valid external resources may be extensionless, signed,
|
|
773
|
+
* or use a misleading filename. This method is called only after source loading has populated
|
|
774
|
+
* `content`.
|
|
775
|
+
*/
|
|
551
776
|
_isTileset() {
|
|
552
|
-
return this.
|
|
777
|
+
return this.content?.shape === 'tileset3d';
|
|
553
778
|
}
|
|
554
779
|
_onContentLoaded() {
|
|
555
780
|
// Vector and Geometry tile rendering do not support the skip LOD optimization.
|
|
@@ -572,6 +797,12 @@ export class Tile3D {
|
|
|
572
797
|
_updateBoundingVolume(header) {
|
|
573
798
|
// Update the bounding volumes
|
|
574
799
|
this.boundingVolume = createBoundingVolume(header.boundingVolume, this.computedTransform, this.boundingVolume);
|
|
800
|
+
// Viewer request volumes constrain traversal, not just render content. A contentless implicit
|
|
801
|
+
// connector can still own an inherited request volume, so initialize it before the
|
|
802
|
+
// content-specific early return below.
|
|
803
|
+
if (header.viewerRequestVolume) {
|
|
804
|
+
this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);
|
|
805
|
+
}
|
|
575
806
|
const content = header.content;
|
|
576
807
|
if (!content) {
|
|
577
808
|
return;
|
|
@@ -585,11 +816,11 @@ export class Tile3D {
|
|
|
585
816
|
if (content.boundingVolume) {
|
|
586
817
|
this._contentBoundingVolume = createBoundingVolume(content.boundingVolume, this.computedTransform, this._contentBoundingVolume);
|
|
587
818
|
}
|
|
588
|
-
if (header.viewerRequestVolume) {
|
|
589
|
-
this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);
|
|
590
|
-
}
|
|
591
819
|
}
|
|
592
|
-
|
|
820
|
+
/**
|
|
821
|
+
* Updates the tile's computed transform, world-space geometric error, and bounding volumes.
|
|
822
|
+
* @param parentTransform - Current computed transform of the parent tile or tileset.
|
|
823
|
+
*/
|
|
593
824
|
_updateTransform(parentTransform = new Matrix4()) {
|
|
594
825
|
const computedTransform = parentTransform.clone().multiplyRight(this.transform);
|
|
595
826
|
const didTransformChange = !computedTransform.equals(this.computedTransform);
|
|
@@ -597,35 +828,9 @@ export class Tile3D {
|
|
|
597
828
|
return;
|
|
598
829
|
}
|
|
599
830
|
this.computedTransform = computedTransform;
|
|
831
|
+
// Recalculate from the unscaled source metric so repeated model-matrix changes never compound.
|
|
832
|
+
this._updateLodMetricScale();
|
|
600
833
|
this._updateBoundingVolume(this.header);
|
|
601
834
|
}
|
|
602
|
-
// Get options which are applicable only for the particular loader
|
|
603
|
-
_getLoaderSpecificOptions(loaderId) {
|
|
604
|
-
switch (loaderId) {
|
|
605
|
-
case 'i3s':
|
|
606
|
-
return {
|
|
607
|
-
...this.tileset.options.i3s,
|
|
608
|
-
_tileOptions: {
|
|
609
|
-
attributeUrls: this.header.attributeUrls,
|
|
610
|
-
textureUrl: this.header.textureUrl,
|
|
611
|
-
textureFormat: this.header.textureFormat,
|
|
612
|
-
textureLoaderOptions: this.header.textureLoaderOptions,
|
|
613
|
-
materialDefinition: this.header.materialDefinition,
|
|
614
|
-
isDracoGeometry: this.header.isDracoGeometry,
|
|
615
|
-
mbs: this.header.mbs
|
|
616
|
-
},
|
|
617
|
-
_tilesetOptions: {
|
|
618
|
-
store: this.tileset.tileset.store,
|
|
619
|
-
attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
|
|
620
|
-
fields: this.tileset.tileset.fields
|
|
621
|
-
},
|
|
622
|
-
isTileHeader: false
|
|
623
|
-
};
|
|
624
|
-
case '3d-tiles':
|
|
625
|
-
case 'cesium-ion':
|
|
626
|
-
default:
|
|
627
|
-
return get3dTilesOptions(this.tileset.tileset);
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
835
|
}
|
|
631
836
|
//# sourceMappingURL=tile-3d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-3d.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d.ts"],"names":[],"mappings":"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"}
|