@loaders.gl/tiles 4.0.0-alpha.5 → 4.0.0-alpha.7
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/dist/bundle.js +2 -2
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +29 -26
- package/dist/dist.min.js +1994 -1035
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/constants.js +44 -0
- package/dist/es5/constants.js.map +1 -0
- package/dist/es5/index.js +93 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js +70 -0
- package/dist/es5/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js +45 -0
- package/dist/es5/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-tile-manager.js +84 -0
- package/dist/es5/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js +143 -0
- package/dist/es5/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js +12 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/es5/tileset/helpers/bounding-volume.js +176 -0
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/es5/tileset/helpers/frame-state.js +129 -0
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
- package/dist/es5/tileset/helpers/i3s-lod.js +60 -0
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +103 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/transform-utils.js +50 -0
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/es5/tileset/helpers/zoom.js +63 -0
- package/dist/es5/tileset/helpers/zoom.js.map +1 -0
- package/dist/es5/tileset/tile-3d.js +536 -0
- package/dist/es5/tileset/tile-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-3d.js +855 -0
- package/dist/es5/tileset/tileset-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-cache.js +82 -0
- package/dist/es5/tileset/tileset-cache.js.map +1 -0
- package/dist/es5/tileset/tileset-traverser.js +321 -0
- package/dist/es5/tileset/tileset-traverser.js.map +1 -0
- package/dist/es5/types.js +2 -0
- package/dist/es5/types.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list-node.js +21 -0
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list.js +88 -0
- package/dist/es5/utils/doubly-linked-list.js.map +1 -0
- package/dist/es5/utils/managed-array.js +126 -0
- package/dist/es5/utils/managed-array.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/constants.js +32 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset/format-3d-tiles}/tileset-3d-traverser.js +2 -13
- package/dist/esm/tileset/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js +26 -0
- package/dist/esm/tileset/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/format-i3s/i3s-tile-manager.js +79 -0
- package/dist/esm/tileset/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset/format-i3s}/i3s-tileset-traverser.js +14 -26
- package/dist/esm/tileset/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
- package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/esm/tileset/helpers/bounding-volume.js +155 -0
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/esm/tileset/helpers/frame-state.js +109 -0
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
- package/dist/esm/tileset/helpers/i3s-lod.js +53 -0
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +100 -0
- package/dist/{tileset → esm/tileset}/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/transform-utils.js +50 -0
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/esm/tileset/helpers/zoom.js +55 -0
- package/dist/esm/tileset/helpers/zoom.js.map +1 -0
- package/dist/esm/tileset/tile-3d.js +414 -0
- package/dist/esm/tileset/tile-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-3d.js +606 -0
- package/dist/esm/tileset/tileset-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-cache.js +57 -0
- package/dist/esm/tileset/tileset-cache.js.map +1 -0
- package/dist/{tileset/traversers → esm/tileset}/tileset-traverser.js +29 -88
- package/dist/esm/tileset/tileset-traverser.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list-node.js +12 -0
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list.js +65 -0
- package/dist/esm/utils/doubly-linked-list.js.map +1 -0
- package/dist/esm/utils/managed-array.js +87 -0
- package/dist/esm/utils/managed-array.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -10
- package/dist/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.d.ts +2 -2
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +54 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts +27 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.js +47 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts +34 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-tile-manager.js +80 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts +25 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/format-i3s/i3s-tileset-traverser.js +92 -0
- package/dist/tileset/helpers/3d-tiles-options.d.ts +3 -2
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -1
- package/dist/tileset/helpers/3d-tiles-options.js +8 -5
- package/dist/tileset/helpers/bounding-volume.d.ts +10 -0
- package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -1
- package/dist/tileset/helpers/bounding-volume.js +274 -69
- package/dist/tileset/helpers/frame-state.d.ts +16 -5
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +131 -49
- package/dist/tileset/helpers/i3s-lod.d.ts +1 -1
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/helpers/i3s-lod.js +82 -64
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -1
- package/dist/tileset/helpers/tiles-3d-lod.js +112 -100
- package/dist/tileset/helpers/transform-utils.d.ts.map +1 -1
- package/dist/tileset/helpers/transform-utils.js +51 -56
- package/dist/tileset/helpers/zoom.d.ts +41 -2
- package/dist/tileset/helpers/zoom.d.ts.map +1 -1
- package/dist/tileset/helpers/zoom.js +83 -30
- package/dist/tileset/tile-3d.d.ts +82 -35
- package/dist/tileset/tile-3d.d.ts.map +1 -1
- package/dist/tileset/tile-3d.js +607 -534
- package/dist/tileset/tileset-3d.d.ts +140 -48
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +693 -652
- package/dist/tileset/tileset-cache.d.ts +6 -5
- package/dist/tileset/tileset-cache.d.ts.map +1 -1
- package/dist/tileset/tileset-cache.js +66 -73
- package/dist/tileset/tileset-traverser.d.ts +57 -0
- package/dist/tileset/tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/tileset-traverser.js +300 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/utils/doubly-linked-list-node.d.ts +1 -2
- package/dist/utils/doubly-linked-list-node.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list-node.js +17 -15
- package/dist/utils/doubly-linked-list.d.ts +2 -3
- package/dist/utils/doubly-linked-list.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list.js +91 -75
- package/dist/utils/managed-array.d.ts +1 -1
- package/dist/utils/managed-array.d.ts.map +1 -1
- package/dist/utils/managed-array.js +144 -109
- package/package.json +11 -8
- package/src/constants.ts +20 -0
- package/src/index.ts +6 -4
- package/src/tileset/{traversers → format-3d-tiles}/tileset-3d-traverser.ts +4 -2
- package/src/tileset/format-i3s/i3s-pending-tiles-register.ts +44 -0
- package/src/tileset/format-i3s/i3s-tile-manager.ts +101 -0
- package/src/tileset/{traversers → format-i3s}/i3s-tileset-traverser.ts +25 -12
- package/src/tileset/helpers/3d-tiles-options.ts +3 -1
- package/src/tileset/helpers/bounding-volume.ts +136 -0
- package/src/tileset/helpers/frame-state.ts +102 -18
- package/src/tileset/helpers/i3s-lod.ts +24 -21
- package/src/tileset/helpers/tiles-3d-lod.ts +2 -0
- package/src/tileset/helpers/transform-utils.ts +2 -0
- package/src/tileset/helpers/zoom.ts +84 -9
- package/src/tileset/tile-3d.ts +137 -123
- package/src/tileset/tileset-3d.ts +378 -251
- package/src/tileset/tileset-cache.ts +24 -17
- package/src/tileset/{traversers/tileset-traverser.ts → tileset-traverser.ts} +71 -72
- package/src/types.ts +36 -0
- package/src/utils/doubly-linked-list-node.ts +3 -2
- package/src/utils/doubly-linked-list.ts +2 -3
- package/src/utils/managed-array.ts +1 -1
- package/dist/bundle.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +0 -8
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +0 -1
- package/dist/tileset/traversers/i3s-tile-manager.js +0 -45
- package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +0 -18
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-traverser.d.ts +0 -52
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
- package/dist/utils/doubly-linked-list-node.js.map +0 -1
- package/dist/utils/doubly-linked-list.js.map +0 -1
- package/dist/utils/managed-array.js.map +0 -1
- package/src/tileset/traversers/i3s-tile-manager.ts +0 -39
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
import {Vector3} from '@math.gl/core';
|
|
4
|
+
import {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';
|
|
5
|
+
import {Ellipsoid} from '@math.gl/geospatial';
|
|
6
|
+
import {BoundingRectangle} from '../../types';
|
|
2
7
|
|
|
3
8
|
const WGS84_RADIUS_X = 6378137.0;
|
|
4
9
|
const WGS84_RADIUS_Y = 6378137.0;
|
|
@@ -8,22 +13,29 @@ const scratchVector = new Vector3();
|
|
|
8
13
|
|
|
9
14
|
/**
|
|
10
15
|
* Calculate appropriate zoom value for a particular boundingVolume
|
|
11
|
-
* @param
|
|
16
|
+
* @param boundingVolume - the instance of bounding volume
|
|
17
|
+
* @param cartorgraphicCenter - cartographic center of the bounding volume
|
|
12
18
|
* @returns {number} - zoom value
|
|
13
19
|
*/
|
|
14
|
-
export function getZoomFromBoundingVolume(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
export function getZoomFromBoundingVolume(
|
|
21
|
+
boundingVolume: BoundingSphere | OrientedBoundingBox | BoundingRectangle,
|
|
22
|
+
cartorgraphicCenter: Vector3
|
|
23
|
+
) {
|
|
24
|
+
if (boundingVolume instanceof OrientedBoundingBox) {
|
|
18
25
|
// OrientedBoundingBox
|
|
26
|
+
const {halfAxes} = boundingVolume;
|
|
19
27
|
const obbSize = getObbSize(halfAxes);
|
|
20
28
|
// Use WGS84_RADIUS_Z to allign with BoundingSphere algorithm
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
// Add the tile elevation value for correct zooming to elevated tiles
|
|
30
|
+
return Math.log2(WGS84_RADIUS_Z / (obbSize + cartorgraphicCenter[2]));
|
|
31
|
+
} else if (boundingVolume instanceof BoundingSphere) {
|
|
23
32
|
// BoundingSphere
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
const {radius} = boundingVolume;
|
|
34
|
+
// Add the tile elevation value for correct zooming to elevated tiles
|
|
35
|
+
return Math.log2(WGS84_RADIUS_Z / (radius + cartorgraphicCenter[2]));
|
|
36
|
+
} else if (boundingVolume.width && boundingVolume.height) {
|
|
26
37
|
// BoundingRectangle
|
|
38
|
+
const {width, height} = boundingVolume;
|
|
27
39
|
const zoomX = Math.log2(WGS84_RADIUS_X / width);
|
|
28
40
|
const zoomY = Math.log2(WGS84_RADIUS_Y / height);
|
|
29
41
|
|
|
@@ -33,6 +45,69 @@ export function getZoomFromBoundingVolume(boundingVolume) {
|
|
|
33
45
|
return 1;
|
|
34
46
|
}
|
|
35
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Calculate initial zoom for the tileset from 3D `fullExtent` defined in
|
|
50
|
+
* the tileset metadata
|
|
51
|
+
* @param fullExtent - 3D extent of the tileset
|
|
52
|
+
* @param fullExtent.xmin - minimal longitude in decimal degrees
|
|
53
|
+
* @param fullExtent.xmax - maximal longitude in decimal degrees
|
|
54
|
+
* @param fullExtent.ymin - minimal latitude in decimal degrees
|
|
55
|
+
* @param fullExtent.ymax - maximal latitude in decimal degrees
|
|
56
|
+
* @param fullExtent.zmin - minimal elevation in meters
|
|
57
|
+
* @param fullExtent.zmax - maximal elevation in meters
|
|
58
|
+
* @param cartorgraphicCenter - tileset center in cartographic coordinate system
|
|
59
|
+
* @param cartesianCenter - tileset center in cartesian coordinate system
|
|
60
|
+
* @returns - initial zoom for the tileset
|
|
61
|
+
*/
|
|
62
|
+
export function getZoomFromFullExtent(
|
|
63
|
+
fullExtent: {
|
|
64
|
+
xmin: number;
|
|
65
|
+
xmax: number;
|
|
66
|
+
ymin: number;
|
|
67
|
+
ymax: number;
|
|
68
|
+
zmin: number;
|
|
69
|
+
zmax: number;
|
|
70
|
+
},
|
|
71
|
+
cartorgraphicCenter: Vector3,
|
|
72
|
+
cartesianCenter: Vector3
|
|
73
|
+
) {
|
|
74
|
+
const extentVertex = Ellipsoid.WGS84.cartographicToCartesian(
|
|
75
|
+
[fullExtent.xmax, fullExtent.ymax, fullExtent.zmax],
|
|
76
|
+
new Vector3()
|
|
77
|
+
);
|
|
78
|
+
const extentSize = Math.sqrt(
|
|
79
|
+
Math.pow(extentVertex[0] - cartesianCenter[0], 2) +
|
|
80
|
+
Math.pow(extentVertex[1] - cartesianCenter[1], 2) +
|
|
81
|
+
Math.pow(extentVertex[2] - cartesianCenter[2], 2)
|
|
82
|
+
);
|
|
83
|
+
return Math.log2(WGS84_RADIUS_Z / (extentSize + cartorgraphicCenter[2]));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Calculate initial zoom for the tileset from 2D `extent` defined in
|
|
88
|
+
* the tileset metadata
|
|
89
|
+
* @param extent - 2D extent of the tileset. It is array of 4 elements [xmin, ymin, xmax, ymax]
|
|
90
|
+
* @param extent[0] - minimal longitude in decimal degrees
|
|
91
|
+
* @param extent[1] - minimal latitude in decimal degrees
|
|
92
|
+
* @param extent[2] - maximal longitude in decimal degrees
|
|
93
|
+
* @param extent[3] - maximal latitude in decimal degrees
|
|
94
|
+
* @param cartorgraphicCenter - tileset center in cartographic coordinate system
|
|
95
|
+
* @param cartesianCenter - tileset center in cartesian coordinate system
|
|
96
|
+
* @returns - initial zoom for the tileset
|
|
97
|
+
*/
|
|
98
|
+
export function getZoomFromExtent(
|
|
99
|
+
extent: [number, number, number, number],
|
|
100
|
+
cartorgraphicCenter: Vector3,
|
|
101
|
+
cartesianCenter: Vector3
|
|
102
|
+
) {
|
|
103
|
+
const [xmin, ymin, xmax, ymax] = extent;
|
|
104
|
+
return getZoomFromFullExtent(
|
|
105
|
+
{xmin, xmax, ymin, ymax, zmin: 0, zmax: 0},
|
|
106
|
+
cartorgraphicCenter,
|
|
107
|
+
cartesianCenter
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
36
111
|
function getObbSize(halfAxes) {
|
|
37
112
|
halfAxes.getColumn(0, scratchVector);
|
|
38
113
|
const axeY = halfAxes.getColumn(1);
|
package/src/tileset/tile-3d.ts
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
|
|
1
3
|
// This file is derived from the Cesium code base under Apache 2 license
|
|
2
4
|
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
5
|
+
|
|
3
6
|
import {Vector3, Matrix4} from '@math.gl/core';
|
|
4
7
|
import {CullingVolume} from '@math.gl/culling';
|
|
5
8
|
|
|
6
9
|
import {load} from '@loaders.gl/core';
|
|
10
|
+
|
|
11
|
+
// Note: circular dependency
|
|
12
|
+
import type {Tileset3D} from './tileset-3d';
|
|
13
|
+
import type {DoublyLinkedListNode} from '../utils/doubly-linked-list-node';
|
|
7
14
|
import {TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE} from '../constants';
|
|
8
15
|
|
|
9
16
|
import {FrameState} from './helpers/frame-state';
|
|
10
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
createBoundingVolume,
|
|
19
|
+
getCartographicBounds,
|
|
20
|
+
CartographicBounds
|
|
21
|
+
} from './helpers/bounding-volume';
|
|
11
22
|
import {getTiles3DScreenSpaceError} from './helpers/tiles-3d-lod';
|
|
12
23
|
import {getProjectedRadius} from './helpers/i3s-lod';
|
|
13
24
|
import {get3dTilesOptions} from './helpers/3d-tiles-options';
|
|
14
|
-
import TilesetTraverser from './
|
|
15
|
-
|
|
16
|
-
// Note: circular dependency
|
|
17
|
-
import type Tileset3D from './tileset-3d';
|
|
25
|
+
import {TilesetTraverser} from './tileset-traverser';
|
|
18
26
|
|
|
19
27
|
const scratchVector = new Vector3();
|
|
20
28
|
|
|
@@ -25,14 +33,14 @@ function defined(x) {
|
|
|
25
33
|
/**
|
|
26
34
|
* @param tileset - Tileset3D instance
|
|
27
35
|
* @param header - tile header - JSON loaded from a dataset
|
|
28
|
-
* @param parentHeader - parent
|
|
36
|
+
* @param parentHeader - parent Tile3D instance
|
|
29
37
|
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
30
38
|
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
31
39
|
*/
|
|
32
|
-
export type
|
|
40
|
+
export type Tile3DProps = {
|
|
33
41
|
tileset: Tileset3D;
|
|
34
42
|
header: Object;
|
|
35
|
-
parentHeader:
|
|
43
|
+
parentHeader: Tile3D;
|
|
36
44
|
extendedId: string;
|
|
37
45
|
};
|
|
38
46
|
|
|
@@ -41,84 +49,91 @@ export type TileHeaderProps = {
|
|
|
41
49
|
* the content is loaded on-demand when needed based on the view.
|
|
42
50
|
* Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.
|
|
43
51
|
*/
|
|
44
|
-
export
|
|
52
|
+
export class Tile3D {
|
|
45
53
|
tileset: Tileset3D;
|
|
46
54
|
header: any;
|
|
47
55
|
id: string;
|
|
48
56
|
url: string;
|
|
49
|
-
parent:
|
|
57
|
+
parent: Tile3D;
|
|
58
|
+
/* Specifies the type of refine that is used when traversing this tile for rendering. */
|
|
50
59
|
refine: number;
|
|
51
60
|
type: string;
|
|
52
61
|
contentUrl: string;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
/** Different refinement algorithms used by I3S and 3D tiles */
|
|
63
|
+
lodMetricType: 'geometricError' | 'maxScreenThreshold' = 'geometricError';
|
|
64
|
+
/** The error, in meters, introduced if this tile is rendered and its children are not. */
|
|
65
|
+
lodMetricValue: number = 0;
|
|
66
|
+
|
|
67
|
+
/** @todo math.gl is not exporting BoundingVolume base type? */
|
|
68
|
+
boundingVolume: any = null;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The tile's content. This represents the actual tile's payload,
|
|
72
|
+
* not the content's metadata in the tileset JSON file.
|
|
73
|
+
*/
|
|
74
|
+
content: any = null;
|
|
75
|
+
contentState: number = TILE_CONTENT_STATE.UNLOADED;
|
|
76
|
+
gpuMemoryUsageInBytes: number = 0;
|
|
77
|
+
|
|
78
|
+
/** The tile's children - an array of Tile3D objects. */
|
|
79
|
+
children: Tile3D[] = [];
|
|
80
|
+
depth: number = 0;
|
|
81
|
+
viewportIds: any[] = [];
|
|
82
|
+
transform = new Matrix4();
|
|
83
|
+
extensions: any = null;
|
|
84
|
+
/** TODO Cesium 3d tiles specific */
|
|
85
|
+
implicitTiling?: any = null;
|
|
86
|
+
|
|
87
|
+
/** Container to store application specific data */
|
|
88
|
+
userData: Record<string, any> = {};
|
|
89
|
+
|
|
67
90
|
computedTransform: any;
|
|
68
|
-
hasEmptyContent: boolean;
|
|
69
|
-
hasTilesetContent: boolean;
|
|
91
|
+
hasEmptyContent: boolean = false;
|
|
92
|
+
hasTilesetContent: boolean = false;
|
|
70
93
|
|
|
71
|
-
traverser
|
|
94
|
+
traverser = new TilesetTraverser({});
|
|
72
95
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
private _frameNumber: any;
|
|
76
|
-
// TODO i3s specific, needs to remove
|
|
77
|
-
// @ts-ignore
|
|
78
|
-
private _lodJudge: any;
|
|
79
|
-
// TODO Cesium 3d tiles specific
|
|
80
|
-
private _expireDate: any;
|
|
81
|
-
private _expiredContent: any;
|
|
82
|
-
// @ts-ignore
|
|
83
|
-
private _shouldRefine: boolean;
|
|
84
|
-
|
|
85
|
-
// Members this are updated every frame for tree traversal and rendering optimizations:
|
|
86
|
-
// @ts-ignore
|
|
87
|
-
private _distanceToCamera: number;
|
|
88
|
-
// @ts-ignore
|
|
89
|
-
private _centerZDepth: number;
|
|
90
|
-
private _screenSpaceError: number;
|
|
91
|
-
private _visibilityPlaneMask: any;
|
|
92
|
-
private _visible?: boolean;
|
|
93
|
-
private _inRequestVolume: boolean;
|
|
96
|
+
/** Used by TilesetCache */
|
|
97
|
+
_cacheNode: DoublyLinkedListNode | null = null;
|
|
94
98
|
|
|
95
|
-
|
|
96
|
-
private _stackLength: number;
|
|
97
|
-
// @ts-ignore
|
|
98
|
-
private _selectionDepth: number;
|
|
99
|
+
private _frameNumber: any = null;
|
|
99
100
|
|
|
100
|
-
//
|
|
101
|
-
private
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
// @ts-ignore
|
|
106
|
-
private _requestedFrame: number;
|
|
101
|
+
// TODO Cesium 3d tiles specific
|
|
102
|
+
private _expireDate: any = null;
|
|
103
|
+
private _expiredContent: any = null;
|
|
104
|
+
|
|
105
|
+
private _boundingBox?: CartographicBounds;
|
|
107
106
|
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
/** updated every frame for tree traversal and rendering optimizations: */
|
|
108
|
+
public _distanceToCamera: number = 0;
|
|
109
|
+
_screenSpaceError: number = 0;
|
|
110
|
+
private _visibilityPlaneMask: any;
|
|
111
|
+
private _visible: boolean | undefined = undefined;
|
|
110
112
|
|
|
111
113
|
private _contentBoundingVolume: any;
|
|
112
114
|
private _viewerRequestVolume: any;
|
|
113
115
|
|
|
114
|
-
_initialTransform: Matrix4;
|
|
116
|
+
_initialTransform: Matrix4 = new Matrix4();
|
|
117
|
+
|
|
118
|
+
// Used by traverser, cannot be marked private
|
|
119
|
+
_priority: number = 0;
|
|
120
|
+
_selectedFrame: number = 0;
|
|
121
|
+
_requestedFrame: number = 0;
|
|
122
|
+
_selectionDepth: number = 0;
|
|
123
|
+
_touchedFrame: number = 0;
|
|
124
|
+
_centerZDepth: number = 0;
|
|
125
|
+
_shouldRefine: boolean = false;
|
|
126
|
+
_stackLength: number = 0;
|
|
127
|
+
_visitedFrame: number = 0;
|
|
128
|
+
_inRequestVolume: boolean = false;
|
|
129
|
+
_lodJudge: any = null; // TODO i3s specific, needs to remove
|
|
115
130
|
|
|
116
131
|
/**
|
|
117
132
|
* @constructs
|
|
118
|
-
* Create a
|
|
133
|
+
* Create a Tile3D instance
|
|
119
134
|
* @param tileset - Tileset3D instance
|
|
120
135
|
* @param header - tile header - JSON loaded from a dataset
|
|
121
|
-
* @param parentHeader - parent
|
|
136
|
+
* @param parentHeader - parent Tile3D instance
|
|
122
137
|
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
123
138
|
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
124
139
|
*/
|
|
@@ -126,7 +141,7 @@ export default class TileHeader {
|
|
|
126
141
|
constructor(
|
|
127
142
|
tileset: Tileset3D,
|
|
128
143
|
header: {[key: string]: any},
|
|
129
|
-
parentHeader?:
|
|
144
|
+
parentHeader?: Tile3D,
|
|
130
145
|
extendedId = ''
|
|
131
146
|
) {
|
|
132
147
|
// PUBLIC MEMBERS
|
|
@@ -145,68 +160,12 @@ export default class TileHeader {
|
|
|
145
160
|
this.type = header.type;
|
|
146
161
|
this.contentUrl = header.contentUrl;
|
|
147
162
|
|
|
148
|
-
// The error, in meters, introduced if this tile is rendered and its children are not.
|
|
149
|
-
this.lodMetricType = 'geometricError';
|
|
150
|
-
this.lodMetricValue = 0;
|
|
151
|
-
|
|
152
|
-
// Specifies the type of refine that is used when traversing this tile for rendering.
|
|
153
|
-
this.boundingVolume = null;
|
|
154
|
-
|
|
155
|
-
// The tile's content. This represents the actual tile's payload,
|
|
156
|
-
// not the content's metadata in the tileset JSON file.
|
|
157
|
-
this.content = null;
|
|
158
|
-
this.contentState = TILE_CONTENT_STATE.UNLOADED;
|
|
159
|
-
this.gpuMemoryUsageInBytes = 0;
|
|
160
|
-
|
|
161
|
-
// The tile's children - an array of Tile3D objects.
|
|
162
|
-
this.children = [];
|
|
163
|
-
|
|
164
|
-
this.hasEmptyContent = false;
|
|
165
|
-
this.hasTilesetContent = false;
|
|
166
|
-
|
|
167
|
-
this.depth = 0;
|
|
168
|
-
this.viewportIds = [];
|
|
169
|
-
|
|
170
|
-
// Container to store application specific data
|
|
171
|
-
this.userData = {};
|
|
172
|
-
this.extensions = null;
|
|
173
|
-
|
|
174
|
-
// PRIVATE MEMBERS
|
|
175
|
-
this._priority = 0;
|
|
176
|
-
this._touchedFrame = 0;
|
|
177
|
-
this._visitedFrame = 0;
|
|
178
|
-
this._selectedFrame = 0;
|
|
179
|
-
this._requestedFrame = 0;
|
|
180
|
-
this._screenSpaceError = 0;
|
|
181
|
-
|
|
182
|
-
this._cacheNode = null;
|
|
183
|
-
this._frameNumber = null;
|
|
184
|
-
this._cacheNode = null;
|
|
185
|
-
|
|
186
|
-
this.traverser = new TilesetTraverser({});
|
|
187
|
-
this._shouldRefine = false;
|
|
188
|
-
this._distanceToCamera = 0;
|
|
189
|
-
this._centerZDepth = 0;
|
|
190
|
-
this._visible = undefined;
|
|
191
|
-
this._inRequestVolume = false;
|
|
192
|
-
this._stackLength = 0;
|
|
193
|
-
this._selectionDepth = 0;
|
|
194
|
-
this._initialTransform = new Matrix4();
|
|
195
|
-
this.transform = new Matrix4();
|
|
196
|
-
|
|
197
163
|
this._initializeLodMetric(header);
|
|
198
164
|
this._initializeTransforms(header);
|
|
199
165
|
this._initializeBoundingVolumes(header);
|
|
200
166
|
this._initializeContent(header);
|
|
201
167
|
this._initializeRenderingState(header);
|
|
202
168
|
|
|
203
|
-
// TODO i3s specific, needs to remove
|
|
204
|
-
this._lodJudge = null;
|
|
205
|
-
|
|
206
|
-
// TODO Cesium 3d tiles specific
|
|
207
|
-
this._expireDate = null;
|
|
208
|
-
this._expiredContent = null;
|
|
209
|
-
|
|
210
169
|
Object.seal(this);
|
|
211
170
|
}
|
|
212
171
|
|
|
@@ -285,6 +244,31 @@ export default class TileHeader {
|
|
|
285
244
|
return this.contentState === TILE_CONTENT_STATE.FAILED;
|
|
286
245
|
}
|
|
287
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Distance from the tile's bounding volume center to the camera
|
|
249
|
+
*/
|
|
250
|
+
get distanceToCamera(): number {
|
|
251
|
+
return this._distanceToCamera;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Screen space error for LOD selection
|
|
256
|
+
*/
|
|
257
|
+
get screenSpaceError(): number {
|
|
258
|
+
return this._screenSpaceError;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Get bounding box in cartographic coordinates
|
|
263
|
+
* @returns [min, max] each in [longitude, latitude, altitude]
|
|
264
|
+
*/
|
|
265
|
+
get boundingBox(): CartographicBounds {
|
|
266
|
+
if (!this._boundingBox) {
|
|
267
|
+
this._boundingBox = getCartographicBounds(this.header.boundingVolume, this.boundingVolume);
|
|
268
|
+
}
|
|
269
|
+
return this._boundingBox;
|
|
270
|
+
}
|
|
271
|
+
|
|
288
272
|
/** Get the tile's screen space error. */
|
|
289
273
|
getScreenSpaceError(frameState, useParentLodMetric) {
|
|
290
274
|
switch (this.tileset.type) {
|
|
@@ -298,6 +282,21 @@ export default class TileHeader {
|
|
|
298
282
|
}
|
|
299
283
|
}
|
|
300
284
|
|
|
285
|
+
/**
|
|
286
|
+
* Make tile unselected than means it won't be shown
|
|
287
|
+
* but it can be still loaded in memory
|
|
288
|
+
*/
|
|
289
|
+
unselect(): void {
|
|
290
|
+
this._selectedFrame = 0;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Memory usage of tile on GPU
|
|
295
|
+
*/
|
|
296
|
+
_getGpuMemoryUsageInBytes(): number {
|
|
297
|
+
return this.content.gpuMemoryUsageInBytes || this.content.byteLength || 0;
|
|
298
|
+
}
|
|
299
|
+
|
|
301
300
|
/*
|
|
302
301
|
* If skipLevelOfDetail is off try to load child tiles as soon as possible so that their parent can refine sooner.
|
|
303
302
|
* Tiles are prioritized by screen space error.
|
|
@@ -381,6 +380,7 @@ export default class TileHeader {
|
|
|
381
380
|
const options = {
|
|
382
381
|
...this.tileset.loadOptions,
|
|
383
382
|
[loader.id]: {
|
|
383
|
+
// @ts-expect-error
|
|
384
384
|
...this.tileset.loadOptions[loader.id],
|
|
385
385
|
isTileset: this.type === 'json',
|
|
386
386
|
...this._getLoaderSpecificOptions(loader.id)
|
|
@@ -691,6 +691,8 @@ export default class TileHeader {
|
|
|
691
691
|
// The content may be tileset json
|
|
692
692
|
if (this._isTileset()) {
|
|
693
693
|
this.hasTilesetContent = true;
|
|
694
|
+
} else {
|
|
695
|
+
this.gpuMemoryUsageInBytes = this._getGpuMemoryUsageInBytes();
|
|
694
696
|
}
|
|
695
697
|
}
|
|
696
698
|
|
|
@@ -749,8 +751,20 @@ export default class TileHeader {
|
|
|
749
751
|
case 'i3s':
|
|
750
752
|
return {
|
|
751
753
|
...this.tileset.options.i3s,
|
|
752
|
-
|
|
753
|
-
|
|
754
|
+
_tileOptions: {
|
|
755
|
+
attributeUrls: this.header.attributeUrls,
|
|
756
|
+
textureUrl: this.header.textureUrl,
|
|
757
|
+
textureFormat: this.header.textureFormat,
|
|
758
|
+
textureLoaderOptions: this.header.textureLoaderOptions,
|
|
759
|
+
materialDefinition: this.header.materialDefinition,
|
|
760
|
+
isDracoGeometry: this.header.isDracoGeometry,
|
|
761
|
+
mbs: this.header.mbs
|
|
762
|
+
},
|
|
763
|
+
_tilesetOptions: {
|
|
764
|
+
store: this.tileset.tileset.store,
|
|
765
|
+
attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
|
|
766
|
+
fields: this.tileset.tileset.fields
|
|
767
|
+
},
|
|
754
768
|
isTileHeader: false
|
|
755
769
|
};
|
|
756
770
|
case '3d-tiles':
|