@loaders.gl/tiles 3.1.0-alpha.2 → 3.1.0-beta.1
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.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +8134 -5
- package/dist/constants.d.ts +32 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +29 -26
- package/dist/es5/bundle.js +7 -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 +104 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js +13 -0
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
- package/dist/es5/tileset/helpers/bounding-volume.js +102 -0
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/es5/tileset/helpers/frame-state.js +69 -0
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
- package/dist/es5/tileset/helpers/i3s-lod.js +84 -0
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +123 -0
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/es5/tileset/helpers/transform-utils.js +71 -0
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/es5/tileset/helpers/zoom.js +45 -0
- package/dist/es5/tileset/helpers/zoom.js.map +1 -0
- package/dist/es5/tileset/tile-3d.js +510 -0
- package/dist/es5/tileset/tile-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-3d.js +656 -0
- package/dist/es5/tileset/tileset-3d.js.map +1 -0
- package/dist/es5/tileset/tileset-cache.js +88 -0
- package/dist/es5/tileset/tileset-cache.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +57 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +95 -0
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js +66 -0
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -0
- package/dist/es5/tileset/traversers/tileset-traverser.js +304 -0
- package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list-node.js +25 -0
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/es5/utils/doubly-linked-list.js +92 -0
- package/dist/es5/utils/doubly-linked-list.js.map +1 -0
- package/dist/es5/utils/managed-array.js +127 -0
- package/dist/es5/utils/managed-array.js.map +1 -0
- package/dist/esm/bundle.js +5 -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/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 +88 -0
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
- package/dist/esm/tileset/helpers/frame-state.js +51 -0
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
- package/dist/esm/tileset/helpers/i3s-lod.js +67 -0
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +105 -0
- package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/esm/tileset/helpers/transform-utils.js +58 -0
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
- package/dist/esm/tileset/helpers/zoom.js +36 -0
- package/dist/esm/tileset/helpers/zoom.js.map +1 -0
- package/dist/esm/tileset/tile-3d.js +534 -0
- package/dist/esm/tileset/tile-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-3d.js +674 -0
- package/dist/esm/tileset/tileset-3d.js.map +1 -0
- package/dist/esm/tileset/tileset-cache.js +79 -0
- package/dist/esm/tileset/tileset-cache.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +45 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +80 -0
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js +53 -0
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -0
- package/dist/esm/tileset/traversers/tileset-traverser.js +296 -0
- package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list-node.js +16 -0
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
- package/dist/esm/utils/doubly-linked-list.js +81 -0
- package/dist/esm/utils/doubly-linked-list.js.map +1 -0
- package/dist/esm/utils/managed-array.js +117 -0
- package/dist/esm/utils/managed-array.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -9
- package/dist/tileset/helpers/3d-tiles-options.d.ts +4 -0
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/tileset/helpers/3d-tiles-options.js +8 -5
- package/dist/tileset/helpers/bounding-volume.d.ts +9 -0
- package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/tileset/helpers/bounding-volume.js +159 -70
- package/dist/tileset/helpers/frame-state.d.ts +17 -0
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
- package/dist/tileset/helpers/frame-state.js +67 -48
- package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/i3s-lod.js +80 -105
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset/helpers/tiles-3d-lod.js +111 -100
- package/dist/tileset/helpers/transform-utils.d.ts +2 -0
- package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset/helpers/transform-utils.js +50 -53
- package/dist/tileset/helpers/zoom.d.ts +7 -0
- package/dist/tileset/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset/helpers/zoom.js +36 -30
- package/dist/tileset/tile-3d.d.ts +174 -0
- package/dist/tileset/tile-3d.d.ts.map +1 -0
- package/dist/tileset/tile-3d.js +550 -530
- package/dist/tileset/tileset-3d.d.ts +172 -0
- package/dist/tileset/tileset-3d.d.ts.map +1 -0
- package/dist/tileset/tileset-3d.js +576 -649
- package/dist/tileset/tileset-cache.d.ts +18 -0
- package/dist/tileset/tileset-cache.d.ts.map +1 -0
- package/dist/tileset/tileset-cache.js +71 -71
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +8 -0
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -0
- package/dist/tileset/traversers/i3s-tile-manager.js +31 -40
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +18 -0
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/i3s-tileset-traverser.js +81 -76
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts +7 -0
- package/dist/tileset/traversers/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/tileset-3d-traverser.js +51 -49
- package/dist/tileset/traversers/tileset-traverser.d.ts +52 -0
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -0
- package/dist/tileset/traversers/tileset-traverser.js +274 -276
- package/dist/utils/doubly-linked-list-node.d.ts +12 -0
- package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list-node.js +16 -8
- package/dist/utils/doubly-linked-list.d.ts +31 -0
- package/dist/utils/doubly-linked-list.d.ts.map +1 -0
- package/dist/utils/doubly-linked-list.js +94 -72
- package/dist/utils/managed-array.d.ts +85 -0
- package/dist/utils/managed-array.d.ts.map +1 -0
- package/dist/utils/managed-array.js +143 -103
- package/package.json +11 -9
- package/src/bundle.ts +2 -3
- package/src/index.ts +1 -0
- package/src/tileset/helpers/i3s-lod.ts +72 -96
- package/src/tileset/helpers/transform-utils.ts +3 -1
- package/src/tileset/tile-3d.ts +2 -2
- package/src/tileset/tileset-cache.ts +2 -0
- package/src/tileset/traversers/i3s-tileset-traverser.ts +2 -3
- package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +4 -0
- package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +3 -5
- package/src/utils/{managed-array.js → managed-array.ts} +4 -1
- package/dist/bundle.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.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/tiles-3d-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.js.map +0 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/traversers/tileset-3d-traverser.js.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiles-3d-lod.d.ts","sourceRoot":"","sources":["../../../src/tileset/helpers/tiles-3d-lod.ts"],"names":[],"mappings":"AAkBA,wBAAgB,gCAAgC,CAAC,IAAI,KAAA,EAAE,EAAC,MAAM,EAAE,aAAa,EAAC;;;CAAA,EAAE,OAAO,KAAK,UAqF3F;AAED,wBAAgB,GAAG,CAAC,gBAAgB,KAAA,EAAE,OAAO,KAAA,UAG5C;AAED,wBAAgB,0BAA0B,CAAC,OAAO,KAAA,EAAE,gBAAgB,KAAA,UAUnE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,kBAAkB,KAAA,UAsB9E"}
|
|
@@ -1,105 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const boundingVolume = tileBoundingVolume.boundingVolume;
|
|
33
|
-
const centerLocal = Matrix4.multiplyByPoint(transformLocal, boundingVolume.center, scratchCenter);
|
|
34
|
-
|
|
35
|
-
if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {
|
|
36
|
-
const centerCartographic = Cartographic.fromCartesian(centerLocal, ellipsoid, scratchCartographic);
|
|
37
|
-
up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);
|
|
38
|
-
direction = camera.directionWC;
|
|
39
|
-
height = camera.positionCartographic.height;
|
|
40
|
-
minimumHeight = 0.0;
|
|
41
|
-
maximumHeight = centerCartographic.height * 2.0;
|
|
42
|
-
} else {
|
|
43
|
-
const positionLocal = Matrix4.multiplyByPoint(transformLocal, camera.positionWC, scratchPosition);
|
|
44
|
-
up = Cartesian3.UNIT_Z;
|
|
45
|
-
direction = Matrix4.multiplyByPointAsVector(transformLocal, camera.directionWC, scratchDirection);
|
|
46
|
-
direction = Cartesian3.normalize(direction, direction);
|
|
47
|
-
height = positionLocal.z;
|
|
48
|
-
|
|
49
|
-
if (tileBoundingVolume instanceof TileOrientedBoundingBox) {
|
|
50
|
-
const boxHeight = root._header.boundingVolume.box[11];
|
|
51
|
-
minimumHeight = centerLocal.z - boxHeight;
|
|
52
|
-
maximumHeight = centerLocal.z + boxHeight;
|
|
53
|
-
} else if (tileBoundingVolume instanceof TileBoundingSphere) {
|
|
54
|
-
const radius = boundingVolume.radius;
|
|
55
|
-
minimumHeight = centerLocal.z - radius;
|
|
56
|
-
maximumHeight = centerLocal.z + radius;
|
|
57
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
// This file is derived from the Cesium code base under Apache 2 license
|
|
3
|
+
// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.getTiles3DScreenSpaceError = exports.getDynamicScreenSpaceError = exports.fog = exports.calculateDynamicScreenSpaceError = void 0;
|
|
6
|
+
// TODO - Dynamic screen space error provides an optimization when looking at
|
|
7
|
+
// tilesets from above
|
|
8
|
+
/* eslint-disable */
|
|
9
|
+
// @ts-nocheck
|
|
10
|
+
const core_1 = require("@math.gl/core");
|
|
11
|
+
const scratchPositionNormal = new core_1.Vector3();
|
|
12
|
+
const scratchCartographic = new core_1.Vector3();
|
|
13
|
+
const scratchMatrix = new core_1.Matrix4();
|
|
14
|
+
const scratchCenter = new core_1.Vector3();
|
|
15
|
+
const scratchPosition = new core_1.Vector3();
|
|
16
|
+
const scratchDirection = new core_1.Vector3();
|
|
17
|
+
// eslint-disable-next-line max-statements, complexity
|
|
18
|
+
function calculateDynamicScreenSpaceError(root, { camera, mapProjection }, options = {}) {
|
|
19
|
+
const { dynamicScreenSpaceErrorHeightFalloff = 0.25, dynamicScreenSpaceErrorDensity = 0.00278 } = options;
|
|
20
|
+
let up;
|
|
21
|
+
let direction;
|
|
22
|
+
let height;
|
|
23
|
+
let minimumHeight;
|
|
24
|
+
let maximumHeight;
|
|
25
|
+
const tileBoundingVolume = root.contentBoundingVolume;
|
|
26
|
+
if (tileBoundingVolume instanceof TileBoundingRegion) {
|
|
27
|
+
up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);
|
|
28
|
+
direction = camera.directionWC;
|
|
29
|
+
height = camera.positionCartographic.height;
|
|
30
|
+
minimumHeight = tileBoundingVolume.minimumHeight;
|
|
31
|
+
maximumHeight = tileBoundingVolume.maximumHeight;
|
|
58
32
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
33
|
+
else {
|
|
34
|
+
// Transform camera position and direction into the local coordinate system of the tileset
|
|
35
|
+
const transformLocal = core_1.Matrix4.inverseTransformation(root.computedTransform, scratchMatrix);
|
|
36
|
+
const ellipsoid = mapProjection.ellipsoid;
|
|
37
|
+
const boundingVolume = tileBoundingVolume.boundingVolume;
|
|
38
|
+
const centerLocal = core_1.Matrix4.multiplyByPoint(transformLocal, boundingVolume.center, scratchCenter);
|
|
39
|
+
if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {
|
|
40
|
+
// The tileset is defined in WGS84. Approximate the minimum and maximum height.
|
|
41
|
+
const centerCartographic = Cartographic.fromCartesian(centerLocal, ellipsoid, scratchCartographic);
|
|
42
|
+
up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);
|
|
43
|
+
direction = camera.directionWC;
|
|
44
|
+
height = camera.positionCartographic.height;
|
|
45
|
+
minimumHeight = 0.0;
|
|
46
|
+
maximumHeight = centerCartographic.height * 2.0;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// The tileset is defined in local coordinates (z-up)
|
|
50
|
+
const positionLocal = core_1.Matrix4.multiplyByPoint(transformLocal, camera.positionWC, scratchPosition);
|
|
51
|
+
up = Cartesian3.UNIT_Z;
|
|
52
|
+
direction = core_1.Matrix4.multiplyByPointAsVector(transformLocal, camera.directionWC, scratchDirection);
|
|
53
|
+
direction = Cartesian3.normalize(direction, direction);
|
|
54
|
+
height = positionLocal.z;
|
|
55
|
+
if (tileBoundingVolume instanceof TileOrientedBoundingBox) {
|
|
56
|
+
// Assuming z-up, the last component stores the half-height of the box
|
|
57
|
+
const boxHeight = root._header.boundingVolume.box[11];
|
|
58
|
+
minimumHeight = centerLocal.z - boxHeight;
|
|
59
|
+
maximumHeight = centerLocal.z + boxHeight;
|
|
60
|
+
}
|
|
61
|
+
else if (tileBoundingVolume instanceof TileBoundingSphere) {
|
|
62
|
+
const radius = boundingVolume.radius;
|
|
63
|
+
minimumHeight = centerLocal.z - radius;
|
|
64
|
+
maximumHeight = centerLocal.z + radius;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// The range where the density starts to lessen. Start at the quarter height of the tileset.
|
|
69
|
+
const heightFalloff = dynamicScreenSpaceErrorHeightFalloff;
|
|
70
|
+
const heightClose = minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;
|
|
71
|
+
const heightFar = maximumHeight;
|
|
72
|
+
const t = (0, core_1.clamp)((height - heightClose) / (heightFar - heightClose), 0.0, 1.0);
|
|
73
|
+
// Increase density as the camera tilts towards the horizon
|
|
74
|
+
const dot = Math.abs(Cartesian3.dot(direction, up));
|
|
75
|
+
let horizonFactor = 1.0 - dot;
|
|
76
|
+
// Weaken the horizon factor as the camera height increases, implying the camera is further away from the tileset.
|
|
77
|
+
// The goal is to increase density for the "street view", not when viewing the tileset from a distance.
|
|
78
|
+
horizonFactor = horizonFactor * (1.0 - t);
|
|
79
|
+
return dynamicScreenSpaceErrorDensity * horizonFactor;
|
|
69
80
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
exports.calculateDynamicScreenSpaceError = calculateDynamicScreenSpaceError;
|
|
82
|
+
function fog(distanceToCamera, density) {
|
|
83
|
+
const scalar = distanceToCamera * density;
|
|
84
|
+
return 1.0 - Math.exp(-(scalar * scalar));
|
|
73
85
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
exports.fog = fog;
|
|
87
|
+
function getDynamicScreenSpaceError(tileset, distanceToCamera) {
|
|
88
|
+
if (tileset.dynamicScreenSpaceError && tileset.dynamicScreenSpaceErrorComputedDensity) {
|
|
89
|
+
const density = tileset.dynamicScreenSpaceErrorComputedDensity;
|
|
90
|
+
const factor = tileset.dynamicScreenSpaceErrorFactor;
|
|
91
|
+
// TODO: Refined screen space error that minimizes tiles in non-first-person
|
|
92
|
+
const dynamicError = fog(distanceToCamera, density) * factor;
|
|
93
|
+
return dynamicError;
|
|
94
|
+
}
|
|
95
|
+
return 0;
|
|
83
96
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
viewDistanceScale
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
error -= getDynamicScreenSpaceError(tileset, distance);
|
|
103
|
-
return error;
|
|
97
|
+
exports.getDynamicScreenSpaceError = getDynamicScreenSpaceError;
|
|
98
|
+
function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {
|
|
99
|
+
const tileset = tile.tileset;
|
|
100
|
+
const parentLodMetricValue = (tile.parent && tile.parent.lodMetricValue) || tile.lodMetricValue;
|
|
101
|
+
const lodMetricValue = useParentLodMetric ? parentLodMetricValue : tile.lodMetricValue;
|
|
102
|
+
// Leaf tiles do not have any error so save the computation
|
|
103
|
+
if (lodMetricValue === 0.0) {
|
|
104
|
+
return 0.0;
|
|
105
|
+
}
|
|
106
|
+
// TODO: Orthographic Frustum needs special treatment?
|
|
107
|
+
// this._getOrthograhicScreenSpaceError();
|
|
108
|
+
// Avoid divide by zero when viewer is inside the tile
|
|
109
|
+
const distance = Math.max(tile._distanceToCamera, 1e-7);
|
|
110
|
+
const { height, sseDenominator } = frameState;
|
|
111
|
+
const { viewDistanceScale } = tileset.options;
|
|
112
|
+
let error = (lodMetricValue * height * (viewDistanceScale || 1.0)) / (distance * sseDenominator);
|
|
113
|
+
error -= getDynamicScreenSpaceError(tileset, distance);
|
|
114
|
+
return error;
|
|
104
115
|
}
|
|
105
|
-
|
|
116
|
+
exports.getTiles3DScreenSpaceError = getTiles3DScreenSpaceError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-utils.d.ts","sourceRoot":"","sources":["../../../src/tileset/helpers/transform-utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,uBAAuB,CAAC,UAAU,KAAA,EAAE,IAAI,KAAA,QA4DvD"}
|
|
@@ -1,55 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
computedTransform
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateTransformProps = void 0;
|
|
4
|
+
const geospatial_1 = require("@math.gl/geospatial");
|
|
5
|
+
const core_1 = require("@math.gl/core");
|
|
6
|
+
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
7
|
+
function calculateTransformProps(tileHeader, tile) {
|
|
8
|
+
(0, loader_utils_1.assert)(tileHeader);
|
|
9
|
+
(0, loader_utils_1.assert)(tile);
|
|
10
|
+
const { rtcCenter, gltfUpAxis } = tile;
|
|
11
|
+
const { computedTransform, boundingVolume: { center } } = tileHeader;
|
|
12
|
+
let modelMatrix = new core_1.Matrix4(computedTransform);
|
|
13
|
+
// Translate if appropriate
|
|
14
|
+
if (rtcCenter) {
|
|
15
|
+
modelMatrix.translate(rtcCenter);
|
|
16
|
+
}
|
|
17
|
+
// glTF models need to be rotated from Y to Z up
|
|
18
|
+
// https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification#y-up-to-z-up
|
|
19
|
+
switch (gltfUpAxis) {
|
|
20
|
+
case 'Z':
|
|
21
|
+
break;
|
|
22
|
+
case 'Y':
|
|
23
|
+
const rotationY = new core_1.Matrix4().rotateX(Math.PI / 2);
|
|
24
|
+
modelMatrix = modelMatrix.multiplyRight(rotationY);
|
|
25
|
+
break;
|
|
26
|
+
case 'X':
|
|
27
|
+
const rotationX = new core_1.Matrix4().rotateY(-Math.PI / 2);
|
|
28
|
+
modelMatrix = modelMatrix.multiplyRight(rotationX);
|
|
29
|
+
break;
|
|
30
|
+
default:
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
// Scale/offset positions if normalized integers
|
|
34
|
+
if (tile.isQuantized) {
|
|
35
|
+
modelMatrix.translate(tile.quantizedVolumeOffset).scale(tile.quantizedVolumeScale);
|
|
36
|
+
}
|
|
37
|
+
// Option 1: Cartesian matrix and origin
|
|
38
|
+
const cartesianOrigin = new core_1.Vector3(center);
|
|
39
|
+
tile.cartesianModelMatrix = modelMatrix;
|
|
40
|
+
tile.cartesianOrigin = cartesianOrigin;
|
|
41
|
+
// Option 2: Cartographic matrix and origin
|
|
42
|
+
const cartographicOrigin = geospatial_1.Ellipsoid.WGS84.cartesianToCartographic(cartesianOrigin, new core_1.Vector3());
|
|
43
|
+
const fromFixedFrameMatrix = geospatial_1.Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin);
|
|
44
|
+
const toFixedFrameMatrix = fromFixedFrameMatrix.invert();
|
|
45
|
+
tile.cartographicModelMatrix = toFixedFrameMatrix.multiplyRight(modelMatrix);
|
|
46
|
+
tile.cartographicOrigin = cartographicOrigin;
|
|
47
|
+
// Deprecated, drop
|
|
48
|
+
if (!tile.coordinateSystem) {
|
|
49
|
+
tile.modelMatrix = tile.cartographicModelMatrix;
|
|
15
50
|
}
|
|
16
|
-
} = tileHeader;
|
|
17
|
-
let modelMatrix = new Matrix4(computedTransform);
|
|
18
|
-
|
|
19
|
-
if (rtcCenter) {
|
|
20
|
-
modelMatrix.translate(rtcCenter);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
switch (gltfUpAxis) {
|
|
24
|
-
case 'Z':
|
|
25
|
-
break;
|
|
26
|
-
|
|
27
|
-
case 'Y':
|
|
28
|
-
const rotationY = new Matrix4().rotateX(Math.PI / 2);
|
|
29
|
-
modelMatrix = modelMatrix.multiplyRight(rotationY);
|
|
30
|
-
break;
|
|
31
|
-
|
|
32
|
-
case 'X':
|
|
33
|
-
const rotationX = new Matrix4().rotateY(-Math.PI / 2);
|
|
34
|
-
modelMatrix = modelMatrix.multiplyRight(rotationX);
|
|
35
|
-
break;
|
|
36
|
-
|
|
37
|
-
default:
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (tile.isQuantized) {
|
|
42
|
-
modelMatrix.translate(tile.quantizedVolumeOffset).scale(tile.quantizedVolumeScale);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const cartesianOrigin = new Vector3(center);
|
|
46
|
-
tile.cartesianModelMatrix = modelMatrix;
|
|
47
|
-
tile.cartesianOrigin = cartesianOrigin;
|
|
48
|
-
const cartographicOrigin = Ellipsoid.WGS84.cartesianToCartographic(cartesianOrigin, new Vector3());
|
|
49
|
-
const fromFixedFrameMatrix = Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin);
|
|
50
|
-
const toFixedFrameMatrix = fromFixedFrameMatrix.invert();
|
|
51
|
-
tile.cartographicModelMatrix = toFixedFrameMatrix.multiplyRight(modelMatrix);
|
|
52
|
-
tile.cartographicOrigin = cartographicOrigin;
|
|
53
|
-
tile.modelMatrix = tile.cartographicModelMatrix;
|
|
54
51
|
}
|
|
55
|
-
|
|
52
|
+
exports.calculateTransformProps = calculateTransformProps;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate appropriate zoom value for a particular boundingVolume
|
|
3
|
+
* @param {BoundingSphere, OrientedBoundingBox} boundingVolume - the instance of bounding volume
|
|
4
|
+
* @returns {number} - zoom value
|
|
5
|
+
*/
|
|
6
|
+
export declare function getZoomFromBoundingVolume(boundingVolume: any): number;
|
|
7
|
+
//# sourceMappingURL=zoom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/tileset/helpers/zoom.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,KAAA,UAoBvD"}
|
|
@@ -1,36 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getZoomFromBoundingVolume = void 0;
|
|
4
|
+
const core_1 = require("@math.gl/core");
|
|
2
5
|
const WGS84_RADIUS_X = 6378137.0;
|
|
3
6
|
const WGS84_RADIUS_Y = 6378137.0;
|
|
4
7
|
const WGS84_RADIUS_Z = 6356752.3142451793;
|
|
5
|
-
const scratchVector = new Vector3();
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
const scratchVector = new core_1.Vector3();
|
|
9
|
+
/**
|
|
10
|
+
* Calculate appropriate zoom value for a particular boundingVolume
|
|
11
|
+
* @param {BoundingSphere, OrientedBoundingBox} boundingVolume - the instance of bounding volume
|
|
12
|
+
* @returns {number} - zoom value
|
|
13
|
+
*/
|
|
14
|
+
function getZoomFromBoundingVolume(boundingVolume) {
|
|
15
|
+
const { halfAxes, radius, width, height } = boundingVolume;
|
|
16
|
+
if (halfAxes) {
|
|
17
|
+
// OrientedBoundingBox
|
|
18
|
+
const obbSize = getObbSize(halfAxes);
|
|
19
|
+
// Use WGS84_RADIUS_Z to allign with BoundingSphere algorithm
|
|
20
|
+
return Math.log2(WGS84_RADIUS_Z / obbSize);
|
|
21
|
+
}
|
|
22
|
+
else if (radius) {
|
|
23
|
+
// BoundingSphere
|
|
24
|
+
return Math.log2(WGS84_RADIUS_Z / radius);
|
|
25
|
+
}
|
|
26
|
+
else if (height && width) {
|
|
27
|
+
// BoundingRectangle
|
|
28
|
+
const zoomX = Math.log2(WGS84_RADIUS_X / width);
|
|
29
|
+
const zoomY = Math.log2(WGS84_RADIUS_Y / height);
|
|
30
|
+
return (zoomX + zoomY) / 2;
|
|
31
|
+
}
|
|
32
|
+
return 1;
|
|
26
33
|
}
|
|
27
|
-
|
|
34
|
+
exports.getZoomFromBoundingVolume = getZoomFromBoundingVolume;
|
|
28
35
|
function getObbSize(halfAxes) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
halfAxes.getColumn(0, scratchVector);
|
|
37
|
+
const axeY = halfAxes.getColumn(1);
|
|
38
|
+
const axeZ = halfAxes.getColumn(2);
|
|
39
|
+
const farthestVertex = scratchVector.add(axeY).add(axeZ);
|
|
40
|
+
const size = farthestVertex.len();
|
|
41
|
+
return size;
|
|
35
42
|
}
|
|
36
|
-
//# sourceMappingURL=zoom.js.map
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Matrix4 } from '@math.gl/core';
|
|
2
|
+
import { FrameState } from './helpers/frame-state';
|
|
3
|
+
import type Tileset3D from './tileset-3d';
|
|
4
|
+
/**
|
|
5
|
+
* @param tileset - Tileset3D instance
|
|
6
|
+
* @param header - tile header - JSON loaded from a dataset
|
|
7
|
+
* @param parentHeader - parent TileHeader instance
|
|
8
|
+
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
9
|
+
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
10
|
+
*/
|
|
11
|
+
export declare type TileHeaderProps = {
|
|
12
|
+
tileset: Tileset3D;
|
|
13
|
+
header: Object;
|
|
14
|
+
parentHeader: TileHeader;
|
|
15
|
+
extendedId: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* A Tile3DHeader represents a tile as Tileset3D. When a tile is first created, its content is not loaded;
|
|
19
|
+
* the content is loaded on-demand when needed based on the view.
|
|
20
|
+
* Do not construct this directly, instead access tiles through {@link Tileset3D#tileVisible}.
|
|
21
|
+
*/
|
|
22
|
+
export default class TileHeader {
|
|
23
|
+
tileset: Tileset3D;
|
|
24
|
+
header: any;
|
|
25
|
+
id: string;
|
|
26
|
+
url: string;
|
|
27
|
+
parent: TileHeader;
|
|
28
|
+
refine: number;
|
|
29
|
+
type: string;
|
|
30
|
+
contentUrl: string;
|
|
31
|
+
lodMetricType: string;
|
|
32
|
+
lodMetricValue: number;
|
|
33
|
+
boundingVolume: any;
|
|
34
|
+
content: any;
|
|
35
|
+
contentState: any;
|
|
36
|
+
gpuMemoryUsageInBytes: number;
|
|
37
|
+
children: TileHeader[];
|
|
38
|
+
depth: number;
|
|
39
|
+
viewportIds: any[];
|
|
40
|
+
transform: Matrix4;
|
|
41
|
+
userData: {
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
};
|
|
44
|
+
computedTransform: any;
|
|
45
|
+
hasEmptyContent: boolean;
|
|
46
|
+
hasTilesetContent: boolean;
|
|
47
|
+
traverser: object;
|
|
48
|
+
private _cacheNode;
|
|
49
|
+
private _frameNumber;
|
|
50
|
+
private _lodJudge;
|
|
51
|
+
private _expireDate;
|
|
52
|
+
private _expiredContent;
|
|
53
|
+
private _shouldRefine;
|
|
54
|
+
private _distanceToCamera;
|
|
55
|
+
private _centerZDepth;
|
|
56
|
+
private _screenSpaceError;
|
|
57
|
+
private _visibilityPlaneMask;
|
|
58
|
+
private _visible?;
|
|
59
|
+
private _inRequestVolume;
|
|
60
|
+
private _stackLength;
|
|
61
|
+
private _selectionDepth;
|
|
62
|
+
private _touchedFrame;
|
|
63
|
+
private _visitedFrame;
|
|
64
|
+
private _selectedFrame;
|
|
65
|
+
private _requestedFrame;
|
|
66
|
+
private _priority;
|
|
67
|
+
private _contentBoundingVolume;
|
|
68
|
+
private _viewerRequestVolume;
|
|
69
|
+
_initialTransform: Matrix4;
|
|
70
|
+
/**
|
|
71
|
+
* @constructs
|
|
72
|
+
* Create a TileHeader instance
|
|
73
|
+
* @param tileset - Tileset3D instance
|
|
74
|
+
* @param header - tile header - JSON loaded from a dataset
|
|
75
|
+
* @param parentHeader - parent TileHeader instance
|
|
76
|
+
* @param extendedId - optional ID to separate copies of a tile for different viewports.
|
|
77
|
+
* const extendedId = `${tile.id}-${frameState.viewport.id}`;
|
|
78
|
+
*/
|
|
79
|
+
constructor(tileset: Tileset3D, header: {
|
|
80
|
+
[key: string]: any;
|
|
81
|
+
}, parentHeader?: TileHeader, extendedId?: string);
|
|
82
|
+
destroy(): void;
|
|
83
|
+
isDestroyed(): boolean;
|
|
84
|
+
get selected(): boolean;
|
|
85
|
+
get isVisible(): boolean | undefined;
|
|
86
|
+
get isVisibleAndInRequestVolume(): boolean | undefined;
|
|
87
|
+
/** Returns true if tile is not an empty tile and not an external tileset */
|
|
88
|
+
get hasRenderContent(): boolean;
|
|
89
|
+
/** Returns true if tile has children */
|
|
90
|
+
get hasChildren(): any;
|
|
91
|
+
/**
|
|
92
|
+
* Determines if the tile's content is ready. This is automatically `true` for
|
|
93
|
+
* tiles with empty content.
|
|
94
|
+
*/
|
|
95
|
+
get contentReady(): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Determines if the tile has available content to render. `true` if the tile's
|
|
98
|
+
* content is ready or if it has expired content this renders while new content loads; otherwise,
|
|
99
|
+
*/
|
|
100
|
+
get contentAvailable(): boolean;
|
|
101
|
+
/** Returns true if tile has renderable content but it's unloaded */
|
|
102
|
+
get hasUnloadedContent(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Determines if the tile's content has not be requested. `true` if tile's
|
|
105
|
+
* content has not be requested; otherwise, `false`.
|
|
106
|
+
*/
|
|
107
|
+
get contentUnloaded(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Determines if the tile's content is expired. `true` if tile's
|
|
110
|
+
* content is expired; otherwise, `false`.
|
|
111
|
+
*/
|
|
112
|
+
get contentExpired(): boolean;
|
|
113
|
+
get contentFailed(): boolean;
|
|
114
|
+
/** Get the tile's screen space error. */
|
|
115
|
+
getScreenSpaceError(frameState: any, useParentLodMetric: any): number;
|
|
116
|
+
_getPriority(): number;
|
|
117
|
+
/**
|
|
118
|
+
* Requests the tile's content.
|
|
119
|
+
* The request may not be made if the Request Scheduler can't prioritize it.
|
|
120
|
+
*/
|
|
121
|
+
loadContent(): Promise<boolean>;
|
|
122
|
+
unloadContent(): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Update the tile's visibility
|
|
125
|
+
* @param {Object} frameState - frame state for tile culling
|
|
126
|
+
* @param {string[]} viewportIds - a list of viewport ids that show this tile
|
|
127
|
+
* @return {void}
|
|
128
|
+
*/
|
|
129
|
+
updateVisibility(frameState: any, viewportIds: any): void;
|
|
130
|
+
visibility(frameState: any, parentVisibilityPlaneMask: any): any;
|
|
131
|
+
contentVisibility(): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.
|
|
134
|
+
* @param frameState The frame state.
|
|
135
|
+
* @returns {Number} The distance, in meters, or zero if the camera is inside the bounding volume.
|
|
136
|
+
*/
|
|
137
|
+
distanceToTile(frameState: FrameState): number;
|
|
138
|
+
/**
|
|
139
|
+
* Computes the tile's camera-space z-depth.
|
|
140
|
+
* @param frameState The frame state.
|
|
141
|
+
* @returns The distance, in meters.
|
|
142
|
+
*/
|
|
143
|
+
cameraSpaceZDepth({ camera }: {
|
|
144
|
+
camera: any;
|
|
145
|
+
}): number;
|
|
146
|
+
/**
|
|
147
|
+
* Checks if the camera is inside the viewer request volume.
|
|
148
|
+
* @param {FrameState} frameState The frame state.
|
|
149
|
+
* @returns {Boolean} Whether the camera is inside the volume.
|
|
150
|
+
*/
|
|
151
|
+
insideViewerRequestVolume(frameState: FrameState): boolean;
|
|
152
|
+
updateExpiration(): void;
|
|
153
|
+
get extras(): any;
|
|
154
|
+
_initializeLodMetric(header: any): void;
|
|
155
|
+
_initializeTransforms(tileHeader: any): void;
|
|
156
|
+
_initializeBoundingVolumes(tileHeader: any): void;
|
|
157
|
+
_initializeContent(tileHeader: any): void;
|
|
158
|
+
_initializeRenderingState(header: any): void;
|
|
159
|
+
_getRefine(refine: any): any;
|
|
160
|
+
_isTileset(): boolean;
|
|
161
|
+
_onContentLoaded(): void;
|
|
162
|
+
_updateBoundingVolume(header: any): void;
|
|
163
|
+
_updateTransform(parentTransform?: Matrix4): void;
|
|
164
|
+
_getLoaderSpecificOptions(loaderId: any): {
|
|
165
|
+
assetGltfUpAxis: any;
|
|
166
|
+
} | {
|
|
167
|
+
tile: any;
|
|
168
|
+
tileset: {
|
|
169
|
+
[key: string]: any;
|
|
170
|
+
};
|
|
171
|
+
isTileHeader: boolean;
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=tile-3d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-3d.d.ts","sourceRoot":"","sources":["../../src/tileset/tile-3d.ts"],"names":[],"mappings":"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"}
|