@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.
Files changed (173) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +8134 -5
  4. package/dist/constants.d.ts +32 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/constants.js +29 -26
  7. package/dist/es5/bundle.js +7 -0
  8. package/dist/es5/bundle.js.map +1 -0
  9. package/dist/es5/constants.js +44 -0
  10. package/dist/es5/constants.js.map +1 -0
  11. package/dist/es5/index.js +104 -0
  12. package/dist/es5/index.js.map +1 -0
  13. package/dist/es5/tileset/helpers/3d-tiles-options.js +13 -0
  14. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -0
  15. package/dist/es5/tileset/helpers/bounding-volume.js +102 -0
  16. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -0
  17. package/dist/es5/tileset/helpers/frame-state.js +69 -0
  18. package/dist/es5/tileset/helpers/frame-state.js.map +1 -0
  19. package/dist/es5/tileset/helpers/i3s-lod.js +84 -0
  20. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -0
  21. package/dist/es5/tileset/helpers/tiles-3d-lod.js +123 -0
  22. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -0
  23. package/dist/es5/tileset/helpers/transform-utils.js +71 -0
  24. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -0
  25. package/dist/es5/tileset/helpers/zoom.js +45 -0
  26. package/dist/es5/tileset/helpers/zoom.js.map +1 -0
  27. package/dist/es5/tileset/tile-3d.js +510 -0
  28. package/dist/es5/tileset/tile-3d.js.map +1 -0
  29. package/dist/es5/tileset/tileset-3d.js +656 -0
  30. package/dist/es5/tileset/tileset-3d.js.map +1 -0
  31. package/dist/es5/tileset/tileset-cache.js +88 -0
  32. package/dist/es5/tileset/tileset-cache.js.map +1 -0
  33. package/dist/es5/tileset/traversers/i3s-tile-manager.js +57 -0
  34. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -0
  35. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +95 -0
  36. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
  37. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +66 -0
  38. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -0
  39. package/dist/es5/tileset/traversers/tileset-traverser.js +304 -0
  40. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -0
  41. package/dist/es5/utils/doubly-linked-list-node.js +25 -0
  42. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -0
  43. package/dist/es5/utils/doubly-linked-list.js +92 -0
  44. package/dist/es5/utils/doubly-linked-list.js.map +1 -0
  45. package/dist/es5/utils/managed-array.js +127 -0
  46. package/dist/es5/utils/managed-array.js.map +1 -0
  47. package/dist/esm/bundle.js +5 -0
  48. package/dist/esm/bundle.js.map +1 -0
  49. package/dist/esm/constants.js +32 -0
  50. package/dist/esm/constants.js.map +1 -0
  51. package/dist/esm/index.js +10 -0
  52. package/dist/esm/index.js.map +1 -0
  53. package/dist/esm/tileset/helpers/3d-tiles-options.js +6 -0
  54. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -0
  55. package/dist/esm/tileset/helpers/bounding-volume.js +88 -0
  56. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -0
  57. package/dist/esm/tileset/helpers/frame-state.js +51 -0
  58. package/dist/esm/tileset/helpers/frame-state.js.map +1 -0
  59. package/dist/esm/tileset/helpers/i3s-lod.js +67 -0
  60. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -0
  61. package/dist/esm/tileset/helpers/tiles-3d-lod.js +105 -0
  62. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -0
  63. package/dist/esm/tileset/helpers/transform-utils.js +58 -0
  64. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -0
  65. package/dist/esm/tileset/helpers/zoom.js +36 -0
  66. package/dist/esm/tileset/helpers/zoom.js.map +1 -0
  67. package/dist/esm/tileset/tile-3d.js +534 -0
  68. package/dist/esm/tileset/tile-3d.js.map +1 -0
  69. package/dist/esm/tileset/tileset-3d.js +674 -0
  70. package/dist/esm/tileset/tileset-3d.js.map +1 -0
  71. package/dist/esm/tileset/tileset-cache.js +79 -0
  72. package/dist/esm/tileset/tileset-cache.js.map +1 -0
  73. package/dist/esm/tileset/traversers/i3s-tile-manager.js +45 -0
  74. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -0
  75. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +80 -0
  76. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -0
  77. package/dist/esm/tileset/traversers/tileset-3d-traverser.js +53 -0
  78. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -0
  79. package/dist/esm/tileset/traversers/tileset-traverser.js +296 -0
  80. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -0
  81. package/dist/esm/utils/doubly-linked-list-node.js +16 -0
  82. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -0
  83. package/dist/esm/utils/doubly-linked-list.js +81 -0
  84. package/dist/esm/utils/doubly-linked-list.js.map +1 -0
  85. package/dist/esm/utils/managed-array.js +117 -0
  86. package/dist/esm/utils/managed-array.js.map +1 -0
  87. package/dist/index.d.ts +11 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +28 -9
  90. package/dist/tileset/helpers/3d-tiles-options.d.ts +4 -0
  91. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +1 -0
  92. package/dist/tileset/helpers/3d-tiles-options.js +8 -5
  93. package/dist/tileset/helpers/bounding-volume.d.ts +9 -0
  94. package/dist/tileset/helpers/bounding-volume.d.ts.map +1 -0
  95. package/dist/tileset/helpers/bounding-volume.js +159 -70
  96. package/dist/tileset/helpers/frame-state.d.ts +17 -0
  97. package/dist/tileset/helpers/frame-state.d.ts.map +1 -0
  98. package/dist/tileset/helpers/frame-state.js +67 -48
  99. package/dist/tileset/helpers/i3s-lod.d.ts +20 -0
  100. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -0
  101. package/dist/tileset/helpers/i3s-lod.js +80 -105
  102. package/dist/tileset/helpers/tiles-3d-lod.d.ts +8 -0
  103. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +1 -0
  104. package/dist/tileset/helpers/tiles-3d-lod.js +111 -100
  105. package/dist/tileset/helpers/transform-utils.d.ts +2 -0
  106. package/dist/tileset/helpers/transform-utils.d.ts.map +1 -0
  107. package/dist/tileset/helpers/transform-utils.js +50 -53
  108. package/dist/tileset/helpers/zoom.d.ts +7 -0
  109. package/dist/tileset/helpers/zoom.d.ts.map +1 -0
  110. package/dist/tileset/helpers/zoom.js +36 -30
  111. package/dist/tileset/tile-3d.d.ts +174 -0
  112. package/dist/tileset/tile-3d.d.ts.map +1 -0
  113. package/dist/tileset/tile-3d.js +550 -530
  114. package/dist/tileset/tileset-3d.d.ts +172 -0
  115. package/dist/tileset/tileset-3d.d.ts.map +1 -0
  116. package/dist/tileset/tileset-3d.js +576 -649
  117. package/dist/tileset/tileset-cache.d.ts +18 -0
  118. package/dist/tileset/tileset-cache.d.ts.map +1 -0
  119. package/dist/tileset/tileset-cache.js +71 -71
  120. package/dist/tileset/traversers/i3s-tile-manager.d.ts +8 -0
  121. package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -0
  122. package/dist/tileset/traversers/i3s-tile-manager.js +31 -40
  123. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +18 -0
  124. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -0
  125. package/dist/tileset/traversers/i3s-tileset-traverser.js +81 -76
  126. package/dist/tileset/traversers/tileset-3d-traverser.d.ts +7 -0
  127. package/dist/tileset/traversers/tileset-3d-traverser.d.ts.map +1 -0
  128. package/dist/tileset/traversers/tileset-3d-traverser.js +51 -49
  129. package/dist/tileset/traversers/tileset-traverser.d.ts +52 -0
  130. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -0
  131. package/dist/tileset/traversers/tileset-traverser.js +274 -276
  132. package/dist/utils/doubly-linked-list-node.d.ts +12 -0
  133. package/dist/utils/doubly-linked-list-node.d.ts.map +1 -0
  134. package/dist/utils/doubly-linked-list-node.js +16 -8
  135. package/dist/utils/doubly-linked-list.d.ts +31 -0
  136. package/dist/utils/doubly-linked-list.d.ts.map +1 -0
  137. package/dist/utils/doubly-linked-list.js +94 -72
  138. package/dist/utils/managed-array.d.ts +85 -0
  139. package/dist/utils/managed-array.d.ts.map +1 -0
  140. package/dist/utils/managed-array.js +143 -103
  141. package/package.json +11 -9
  142. package/src/bundle.ts +2 -3
  143. package/src/index.ts +1 -0
  144. package/src/tileset/helpers/i3s-lod.ts +72 -96
  145. package/src/tileset/helpers/transform-utils.ts +3 -1
  146. package/src/tileset/tile-3d.ts +2 -2
  147. package/src/tileset/tileset-cache.ts +2 -0
  148. package/src/tileset/traversers/i3s-tileset-traverser.ts +2 -3
  149. package/src/utils/{doubly-linked-list-node.js → doubly-linked-list-node.ts} +4 -0
  150. package/src/utils/{doubly-linked-list.js → doubly-linked-list.ts} +3 -5
  151. package/src/utils/{managed-array.js → managed-array.ts} +4 -1
  152. package/dist/bundle.js.map +0 -1
  153. package/dist/constants.js.map +0 -1
  154. package/dist/dist.min.js +0 -2
  155. package/dist/dist.min.js.map +0 -1
  156. package/dist/index.js.map +0 -1
  157. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  158. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  159. package/dist/tileset/helpers/frame-state.js.map +0 -1
  160. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  161. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  162. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  163. package/dist/tileset/helpers/zoom.js.map +0 -1
  164. package/dist/tileset/tile-3d.js.map +0 -1
  165. package/dist/tileset/tileset-3d.js.map +0 -1
  166. package/dist/tileset/tileset-cache.js.map +0 -1
  167. package/dist/tileset/traversers/i3s-tile-manager.js.map +0 -1
  168. package/dist/tileset/traversers/i3s-tileset-traverser.js.map +0 -1
  169. package/dist/tileset/traversers/tileset-3d-traverser.js.map +0 -1
  170. package/dist/tileset/traversers/tileset-traverser.js.map +0 -1
  171. package/dist/utils/doubly-linked-list-node.js.map +0 -1
  172. package/dist/utils/doubly-linked-list.js.map +0 -1
  173. 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
- import { Matrix4, Vector3, clamp } from '@math.gl/core';
2
- const scratchPositionNormal = new Vector3();
3
- const scratchCartographic = new Vector3();
4
- const scratchMatrix = new Matrix4();
5
- const scratchCenter = new Vector3();
6
- const scratchPosition = new Vector3();
7
- const scratchDirection = new Vector3();
8
- export function calculateDynamicScreenSpaceError(root, {
9
- camera,
10
- mapProjection
11
- }, options = {}) {
12
- const {
13
- dynamicScreenSpaceErrorHeightFalloff = 0.25,
14
- dynamicScreenSpaceErrorDensity = 0.00278
15
- } = options;
16
- let up;
17
- let direction;
18
- let height;
19
- let minimumHeight;
20
- let maximumHeight;
21
- const tileBoundingVolume = root.contentBoundingVolume;
22
-
23
- if (tileBoundingVolume instanceof TileBoundingRegion) {
24
- up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);
25
- direction = camera.directionWC;
26
- height = camera.positionCartographic.height;
27
- minimumHeight = tileBoundingVolume.minimumHeight;
28
- maximumHeight = tileBoundingVolume.maximumHeight;
29
- } else {
30
- const transformLocal = Matrix4.inverseTransformation(root.computedTransform, scratchMatrix);
31
- const ellipsoid = mapProjection.ellipsoid;
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
- const heightFalloff = dynamicScreenSpaceErrorHeightFalloff;
62
- const heightClose = minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;
63
- const heightFar = maximumHeight;
64
- const t = clamp((height - heightClose) / (heightFar - heightClose), 0.0, 1.0);
65
- const dot = Math.abs(Cartesian3.dot(direction, up));
66
- let horizonFactor = 1.0 - dot;
67
- horizonFactor = horizonFactor * (1.0 - t);
68
- return dynamicScreenSpaceErrorDensity * horizonFactor;
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
- export function fog(distanceToCamera, density) {
71
- const scalar = distanceToCamera * density;
72
- return 1.0 - Math.exp(-(scalar * scalar));
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
- export function getDynamicScreenSpaceError(tileset, distanceToCamera) {
75
- if (tileset.dynamicScreenSpaceError && tileset.dynamicScreenSpaceErrorComputedDensity) {
76
- const density = tileset.dynamicScreenSpaceErrorComputedDensity;
77
- const factor = tileset.dynamicScreenSpaceErrorFactor;
78
- const dynamicError = fog(distanceToCamera, density) * factor;
79
- return dynamicError;
80
- }
81
-
82
- return 0;
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
- export function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {
85
- const tileset = tile.tileset;
86
- const parentLodMetricValue = tile.parent && tile.parent.lodMetricValue || tile.lodMetricValue;
87
- const lodMetricValue = useParentLodMetric ? parentLodMetricValue : tile.lodMetricValue;
88
-
89
- if (lodMetricValue === 0.0) {
90
- return 0.0;
91
- }
92
-
93
- const distance = Math.max(tile._distanceToCamera, 1e-7);
94
- const {
95
- height,
96
- sseDenominator
97
- } = frameState;
98
- const {
99
- viewDistanceScale
100
- } = tileset.options;
101
- let error = lodMetricValue * height * (viewDistanceScale || 1.0) / (distance * sseDenominator);
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
- //# sourceMappingURL=tiles-3d-lod.js.map
116
+ exports.getTiles3DScreenSpaceError = getTiles3DScreenSpaceError;
@@ -0,0 +1,2 @@
1
+ export declare function calculateTransformProps(tileHeader: any, tile: any): void;
2
+ //# sourceMappingURL=transform-utils.d.ts.map
@@ -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
- import { Ellipsoid } from '@math.gl/geospatial';
2
- import { Matrix4, Vector3 } from '@math.gl/core';
3
- import { assert } from '@loaders.gl/loader-utils';
4
- export function calculateTransformProps(tileHeader, tile) {
5
- assert(tileHeader);
6
- assert(tile);
7
- const {
8
- rtcCenter,
9
- gltfUpAxis
10
- } = tile;
11
- const {
12
- computedTransform,
13
- boundingVolume: {
14
- center
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
- //# sourceMappingURL=transform-utils.js.map
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
- import { Vector3 } from '@math.gl/core';
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
- export function getZoomFromBoundingVolume(boundingVolume) {
7
- const {
8
- halfAxes,
9
- radius,
10
- width,
11
- height
12
- } = boundingVolume;
13
-
14
- if (halfAxes) {
15
- const obbSize = getObbSize(halfAxes);
16
- return Math.log2(WGS84_RADIUS_Z / obbSize);
17
- } else if (radius) {
18
- return Math.log2(WGS84_RADIUS_Z / radius);
19
- } else if (height && width) {
20
- const zoomX = Math.log2(WGS84_RADIUS_X / width);
21
- const zoomY = Math.log2(WGS84_RADIUS_Y / height);
22
- return (zoomX + zoomY) / 2;
23
- }
24
-
25
- return 1;
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
- halfAxes.getColumn(0, scratchVector);
30
- const axeY = halfAxes.getColumn(1);
31
- const axeZ = halfAxes.getColumn(2);
32
- const farthestVertex = scratchVector.add(axeY).add(axeZ);
33
- const size = farthestVertex.len();
34
- return size;
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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"}