@cesium/engine 3.0.2 → 4.0.0

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 (230) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +605 -0
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +800 -0
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +502 -0
  4. package/Build/Workers/chunk-27R2KRIK.js +634 -0
  5. package/Build/Workers/chunk-2C65EKYA.js +55 -0
  6. package/Build/Workers/chunk-2NLMZNJI.js +138 -0
  7. package/Build/Workers/chunk-4V6RCTVH.js +289 -0
  8. package/Build/Workers/chunk-4VWUFKYW.js +368 -0
  9. package/Build/Workers/chunk-527JG4D7.js +629 -0
  10. package/Build/Workers/chunk-5U4UHRZ2.js +8644 -0
  11. package/Build/Workers/chunk-7CZEWQWE.js +353 -0
  12. package/Build/Workers/chunk-7IMAWM6A.js +842 -0
  13. package/Build/Workers/{package.js → chunk-A6EA6KIE.js} +13 -2
  14. package/Build/Workers/chunk-AXGQUPXA.js +1075 -0
  15. package/Build/Workers/chunk-BT6YIL2N.js +39 -0
  16. package/Build/Workers/chunk-C6MRR5YL.js +476 -0
  17. package/Build/Workers/chunk-DJUTBX6A.js +1860 -0
  18. package/Build/Workers/chunk-EQ6ZAP37.js +218 -0
  19. package/Build/Workers/chunk-F7P2HCYZ.js +73 -0
  20. package/Build/Workers/chunk-FE2XG3SS.js +73 -0
  21. package/Build/Workers/chunk-FKHRSGKP.js +781 -0
  22. package/Build/Workers/chunk-FVDTKX3F.js +58 -0
  23. package/Build/Workers/chunk-FYHCAKU6.js +684 -0
  24. package/Build/Workers/chunk-G3MOT7BZ.js +157 -0
  25. package/Build/Workers/chunk-H52L6U76.js +421 -0
  26. package/Build/Workers/chunk-H6MBQ4W4.js +305 -0
  27. package/Build/Workers/chunk-HCZR75II.js +2716 -0
  28. package/Build/Workers/chunk-I5MQWHBR.js +102 -0
  29. package/Build/Workers/chunk-KAFF2QX3.js +258 -0
  30. package/Build/Workers/chunk-LGSGX2RH.js +757 -0
  31. package/Build/Workers/chunk-LQRFWCNX.js +124 -0
  32. package/Build/Workers/chunk-N5MMDSD2.js +44 -0
  33. package/Build/Workers/chunk-NRETMGYL.js +390 -0
  34. package/Build/Workers/chunk-P4M4QUNQ.js +196 -0
  35. package/Build/Workers/chunk-P7PWX5HR.js +430 -0
  36. package/Build/Workers/chunk-PGB3EFR7.js +171 -0
  37. package/Build/Workers/chunk-PW5CA4MJ.js +3273 -0
  38. package/Build/Workers/chunk-PWDYKCNC.js +501 -0
  39. package/Build/Workers/chunk-QIS3NB7U.js +1258 -0
  40. package/Build/Workers/chunk-QVJ6IRKV.js +77 -0
  41. package/Build/Workers/chunk-RDCDRNJ7.js +117 -0
  42. package/Build/Workers/chunk-RDM3BKNC.js +1009 -0
  43. package/Build/Workers/chunk-RRUPTJ6P.js +452 -0
  44. package/Build/Workers/chunk-SGRWJKNO.js +400 -0
  45. package/Build/Workers/chunk-TF5D2H7B.js +138 -0
  46. package/Build/Workers/chunk-TVYIHH4V.js +513 -0
  47. package/Build/Workers/chunk-U5LKG6LX.js +101 -0
  48. package/Build/Workers/chunk-UGZGTV5K.js +302 -0
  49. package/Build/Workers/chunk-UN7AK64D.js +163 -0
  50. package/Build/Workers/chunk-V2LKNJGT.js +59 -0
  51. package/Build/Workers/chunk-VSCXSFHE.js +1477 -0
  52. package/Build/Workers/chunk-XJCTFTBM.js +2041 -0
  53. package/Build/Workers/chunk-XZVQMPWG.js +100 -0
  54. package/Build/Workers/chunk-YLAFWVOW.js +834 -0
  55. package/Build/Workers/chunk-YLS3FX3U.js +236 -0
  56. package/Build/Workers/chunk-YMJPANZZ.js +693 -0
  57. package/Build/Workers/combineGeometry.js +65 -15
  58. package/Build/Workers/createBoxGeometry.js +55 -10
  59. package/Build/Workers/createBoxOutlineGeometry.js +231 -310
  60. package/Build/Workers/createCircleGeometry.js +185 -202
  61. package/Build/Workers/createCircleOutlineGeometry.js +141 -155
  62. package/Build/Workers/createCoplanarPolygonGeometry.js +477 -557
  63. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
  64. package/Build/Workers/createCorridorGeometry.js +1162 -1307
  65. package/Build/Workers/createCorridorOutlineGeometry.js +533 -569
  66. package/Build/Workers/createCylinderGeometry.js +57 -10
  67. package/Build/Workers/createCylinderOutlineGeometry.js +224 -258
  68. package/Build/Workers/createEllipseGeometry.js +68 -12
  69. package/Build/Workers/createEllipseOutlineGeometry.js +61 -12
  70. package/Build/Workers/createEllipsoidGeometry.js +56 -10
  71. package/Build/Workers/createEllipsoidOutlineGeometry.js +58 -13
  72. package/Build/Workers/createFrustumGeometry.js +55 -10
  73. package/Build/Workers/createFrustumOutlineGeometry.js +226 -243
  74. package/Build/Workers/createGeometry.js +143 -48
  75. package/Build/Workers/createGroundPolylineGeometry.js +1484 -2012
  76. package/Build/Workers/createPlaneGeometry.js +216 -243
  77. package/Build/Workers/createPlaneOutlineGeometry.js +121 -113
  78. package/Build/Workers/createPolygonGeometry.js +1041 -1327
  79. package/Build/Workers/createPolygonOutlineGeometry.js +516 -657
  80. package/Build/Workers/createPolylineGeometry.js +471 -547
  81. package/Build/Workers/createPolylineVolumeGeometry.js +352 -384
  82. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +271 -295
  83. package/Build/Workers/createRectangleGeometry.js +1128 -1331
  84. package/Build/Workers/createRectangleOutlineGeometry.js +445 -500
  85. package/Build/Workers/createSimplePolylineGeometry.js +381 -440
  86. package/Build/Workers/createSphereGeometry.js +112 -118
  87. package/Build/Workers/createSphereOutlineGeometry.js +112 -121
  88. package/Build/Workers/createTaskProcessorWorker.js +32 -127
  89. package/Build/Workers/createVectorTileClampedPolylines.js +462 -505
  90. package/Build/Workers/createVectorTileGeometries.js +377 -436
  91. package/Build/Workers/createVectorTilePoints.js +110 -77
  92. package/Build/Workers/createVectorTilePolygons.js +369 -391
  93. package/Build/Workers/createVectorTilePolylines.js +252 -244
  94. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
  95. package/Build/Workers/createVerticesFromHeightmap.js +2244 -2677
  96. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -904
  97. package/Build/Workers/createWallGeometry.js +459 -593
  98. package/Build/Workers/createWallOutlineGeometry.js +324 -419
  99. package/Build/Workers/decodeDraco.js +327 -347
  100. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
  101. package/Build/Workers/decodeI3S.js +765 -970
  102. package/Build/Workers/transcodeKTX2.js +3351 -1473
  103. package/Build/Workers/transferTypedArrayTest.js +3 -4
  104. package/Build/Workers/upsampleQuantizedTerrainMesh.js +748 -953
  105. package/LICENSE.md +0 -12
  106. package/Source/Core/CesiumTerrainProvider.js +1 -2
  107. package/Source/Core/FeatureDetection.js +9 -0
  108. package/Source/Core/GoogleMaps.js +1 -1
  109. package/Source/Core/Ion.js +1 -1
  110. package/Source/Core/KTX2Transcoder.js +7 -3
  111. package/Source/Core/TaskProcessor.js +150 -146
  112. package/Source/Core/Transforms.js +2 -2
  113. package/Source/Core/buildModuleUrl.js +6 -5
  114. package/Source/Scene/ArcGisMapService.js +1 -1
  115. package/Source/Scene/DracoLoader.js +26 -3
  116. package/Source/Scene/I3SDataProvider.js +0 -27
  117. package/Source/Scene/I3SDecoder.js +127 -0
  118. package/Source/Scene/I3SNode.js +32 -110
  119. package/Source/Scene/Implicit3DTileContent.js +13 -0
  120. package/Source/Scene/ImplicitTileset.js +5 -0
  121. package/Source/Scene/Model/I3dmLoader.js +5 -1
  122. package/Source/Scene/Model/Model.js +4 -1
  123. package/Source/Scene/OpenStreetMapImageryProvider.js +4 -1
  124. package/Source/Scene/SingleTileImageryProvider.js +4 -2
  125. package/Source/ThirdParty/Workers/basis_transcoder.js +1 -1
  126. package/Source/{WorkersES6 → Workers}/createGeometry.js +11 -12
  127. package/Source/{WorkersES6 → Workers}/createTaskProcessorWorker.js +43 -59
  128. package/Source/{WorkersES6 → Workers}/decodeDraco.js +19 -25
  129. package/Source/{WorkersES6 → Workers}/decodeI3S.js +18 -32
  130. package/Source/{WorkersES6 → Workers}/transcodeKTX2.js +19 -26
  131. package/Source/Workers/transferTypedArrayTest.js +0 -6
  132. package/index.d.ts +16 -7
  133. package/index.js +252 -251
  134. package/package.json +2 -1
  135. package/Build/Workers/ArcType-2d9abbbc.js +0 -37
  136. package/Build/Workers/AttributeCompression-f9f6c717.js +0 -716
  137. package/Build/Workers/AxisAlignedBoundingBox-a03420b1.js +0 -258
  138. package/Build/Workers/BoundingRectangle-32fa8a4a.js +0 -369
  139. package/Build/Workers/BoxGeometry-cd550612.js +0 -884
  140. package/Build/Workers/Check-6ede7e26.js +0 -290
  141. package/Build/Workers/Color-571a6085.js +0 -2262
  142. package/Build/Workers/ComponentDatatype-cf1fa08e.js +0 -341
  143. package/Build/Workers/CoplanarPolygonGeometryLibrary-488b1a9f.js +0 -132
  144. package/Build/Workers/CorridorGeometryLibrary-fc4ff147.js +0 -498
  145. package/Build/Workers/CylinderGeometry-bc26926d.js +0 -467
  146. package/Build/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
  147. package/Build/Workers/EllipseGeometry-89533a10.js +0 -1304
  148. package/Build/Workers/EllipseGeometryLibrary-b0d7df17.js +0 -366
  149. package/Build/Workers/EllipseOutlineGeometry-63ff7a87.js +0 -443
  150. package/Build/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
  151. package/Build/Workers/EllipsoidGeometry-07e99d2d.js +0 -637
  152. package/Build/Workers/EllipsoidOutlineGeometry-ba5c7ee2.js +0 -454
  153. package/Build/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
  154. package/Build/Workers/EllipsoidTangentPlane-65d41b3e.js +0 -373
  155. package/Build/Workers/EncodedCartesian3-57415c8a.js +0 -171
  156. package/Build/Workers/FrustumGeometry-4a7589ed.js +0 -2540
  157. package/Build/Workers/GeometryAttribute-a5b6275b.js +0 -619
  158. package/Build/Workers/GeometryAttributes-ad136444.js +0 -91
  159. package/Build/Workers/GeometryInstance-34d9e21e.js +0 -121
  160. package/Build/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
  161. package/Build/Workers/GeometryPipeline-fa9e6ffc.js +0 -3690
  162. package/Build/Workers/IndexDatatype-2643aa47.js +0 -200
  163. package/Build/Workers/IntersectionTests-feace3da.js +0 -1836
  164. package/Build/Workers/Math-0a2ac845.js +0 -1340
  165. package/Build/Workers/Matrix2-e1298525.js +0 -7086
  166. package/Build/Workers/Matrix3-41c58dde.js +0 -4283
  167. package/Build/Workers/OrientedBoundingBox-6b94d955.js +0 -1259
  168. package/Build/Workers/Plane-4c3d403b.js +0 -309
  169. package/Build/Workers/PolygonGeometryLibrary-4ffc457d.js +0 -1074
  170. package/Build/Workers/PolygonPipeline-d5e66350.js +0 -1344
  171. package/Build/Workers/PolylinePipeline-83410f0c.js +0 -573
  172. package/Build/Workers/PolylineVolumeGeometryLibrary-290e7aec.js +0 -781
  173. package/Build/Workers/PrimitivePipeline-6081d138.js +0 -966
  174. package/Build/Workers/RectangleGeometryLibrary-986710d8.js +0 -280
  175. package/Build/Workers/RuntimeError-ef395448.js +0 -68
  176. package/Build/Workers/TerrainEncoding-528e1d68.js +0 -1227
  177. package/Build/Workers/Transforms-b527bb09.js +0 -14714
  178. package/Build/Workers/VertexFormat-030f11ff.js +0 -312
  179. package/Build/Workers/WallGeometryLibrary-faf583f8.js +0 -211
  180. package/Build/Workers/WebGLConstants-0b1ce7ba.js +0 -620
  181. package/Build/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
  182. package/Build/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
  183. package/Build/Workers/cesiumWorkerBootstrapper.js +0 -1363
  184. package/Build/Workers/combine-d9581036.js +0 -82
  185. package/Build/Workers/defaultValue-fe22d8c0.js +0 -51
  186. package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
  187. package/Source/Workers/cesiumWorkerBootstrapper.js +0 -2290
  188. package/Source/Workers/package.json +0 -1
  189. /package/Source/{WorkersES6 → Workers}/combineGeometry.js +0 -0
  190. /package/Source/{WorkersES6 → Workers}/createBoxGeometry.js +0 -0
  191. /package/Source/{WorkersES6 → Workers}/createBoxOutlineGeometry.js +0 -0
  192. /package/Source/{WorkersES6 → Workers}/createCircleGeometry.js +0 -0
  193. /package/Source/{WorkersES6 → Workers}/createCircleOutlineGeometry.js +0 -0
  194. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonGeometry.js +0 -0
  195. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonOutlineGeometry.js +0 -0
  196. /package/Source/{WorkersES6 → Workers}/createCorridorGeometry.js +0 -0
  197. /package/Source/{WorkersES6 → Workers}/createCorridorOutlineGeometry.js +0 -0
  198. /package/Source/{WorkersES6 → Workers}/createCylinderGeometry.js +0 -0
  199. /package/Source/{WorkersES6 → Workers}/createCylinderOutlineGeometry.js +0 -0
  200. /package/Source/{WorkersES6 → Workers}/createEllipseGeometry.js +0 -0
  201. /package/Source/{WorkersES6 → Workers}/createEllipseOutlineGeometry.js +0 -0
  202. /package/Source/{WorkersES6 → Workers}/createEllipsoidGeometry.js +0 -0
  203. /package/Source/{WorkersES6 → Workers}/createEllipsoidOutlineGeometry.js +0 -0
  204. /package/Source/{WorkersES6 → Workers}/createFrustumGeometry.js +0 -0
  205. /package/Source/{WorkersES6 → Workers}/createFrustumOutlineGeometry.js +0 -0
  206. /package/Source/{WorkersES6 → Workers}/createGroundPolylineGeometry.js +0 -0
  207. /package/Source/{WorkersES6 → Workers}/createPlaneGeometry.js +0 -0
  208. /package/Source/{WorkersES6 → Workers}/createPlaneOutlineGeometry.js +0 -0
  209. /package/Source/{WorkersES6 → Workers}/createPolygonGeometry.js +0 -0
  210. /package/Source/{WorkersES6 → Workers}/createPolygonOutlineGeometry.js +0 -0
  211. /package/Source/{WorkersES6 → Workers}/createPolylineGeometry.js +0 -0
  212. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeGeometry.js +0 -0
  213. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeOutlineGeometry.js +0 -0
  214. /package/Source/{WorkersES6 → Workers}/createRectangleGeometry.js +0 -0
  215. /package/Source/{WorkersES6 → Workers}/createRectangleOutlineGeometry.js +0 -0
  216. /package/Source/{WorkersES6 → Workers}/createSimplePolylineGeometry.js +0 -0
  217. /package/Source/{WorkersES6 → Workers}/createSphereGeometry.js +0 -0
  218. /package/Source/{WorkersES6 → Workers}/createSphereOutlineGeometry.js +0 -0
  219. /package/Source/{WorkersES6 → Workers}/createVectorTileClampedPolylines.js +0 -0
  220. /package/Source/{WorkersES6 → Workers}/createVectorTileGeometries.js +0 -0
  221. /package/Source/{WorkersES6 → Workers}/createVectorTilePoints.js +0 -0
  222. /package/Source/{WorkersES6 → Workers}/createVectorTilePolygons.js +0 -0
  223. /package/Source/{WorkersES6 → Workers}/createVectorTilePolylines.js +0 -0
  224. /package/Source/{WorkersES6 → Workers}/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -0
  225. /package/Source/{WorkersES6 → Workers}/createVerticesFromHeightmap.js +0 -0
  226. /package/Source/{WorkersES6 → Workers}/createVerticesFromQuantizedTerrainMesh.js +0 -0
  227. /package/Source/{WorkersES6 → Workers}/createWallGeometry.js +0 -0
  228. /package/Source/{WorkersES6 → Workers}/createWallOutlineGeometry.js +0 -0
  229. /package/Source/{WorkersES6 → Workers}/decodeGoogleEarthEnterprisePacket.js +0 -0
  230. /package/Source/{WorkersES6 → Workers}/upsampleQuantizedTerrainMesh.js +0 -0
@@ -0,0 +1,127 @@
1
+ import Cartographic from "../Core/Cartographic.js";
2
+ import Check from "../Core/Check.js";
3
+ import defined from "../Core/defined.js";
4
+ import Ellipsoid from "../Core/Ellipsoid.js";
5
+ import FeatureDetection from "../Core/FeatureDetection.js";
6
+ import CesiumMath from "../Core/Math.js";
7
+ import Matrix3 from "../Core/Matrix3.js";
8
+ import RuntimeError from "../Core/RuntimeError.js";
9
+ import TaskProcessor from "../Core/TaskProcessor.js";
10
+
11
+ /**
12
+ * Decode I3S using web workers.
13
+ *
14
+ * @private
15
+ */
16
+ function I3SDecoder() {}
17
+
18
+ // Maximum concurrency to use when decoding draco models
19
+ I3SDecoder._maxDecodingConcurrency = Math.max(
20
+ FeatureDetection.hardwareConcurrency - 1,
21
+ 1
22
+ );
23
+
24
+ I3SDecoder._decodeTaskProcessor = new TaskProcessor(
25
+ "decodeI3S",
26
+ I3SDecoder._maxDecodingConcurrency
27
+ );
28
+
29
+ I3SDecoder._promise = undefined;
30
+
31
+ async function initializeDecoder() {
32
+ const result = await I3SDecoder._decodeTaskProcessor.initWebAssemblyModule({
33
+ wasmBinaryFile: "ThirdParty/draco_decoder.wasm",
34
+ });
35
+ if (result) {
36
+ return I3SDecoder._decodeTaskProcessor;
37
+ }
38
+
39
+ throw new RuntimeError("I3S decoder could not be initialized.");
40
+ }
41
+
42
+ /**
43
+ * Transcodes I3S to glTF in a web worker
44
+ * @param {String} url custom attributes source URL
45
+ * @param {Object} defaultGeometrySchema Schema to use during decoding
46
+ * @param {I3SGeometry} geometryData The draco encoded geometry data
47
+ * @param {Array} [featureData] The draco encoded feature data
48
+ * @returns Promise<undefined|object> Returns a promise which resolves to the glTF result, or undefined if the task cannot be scheduled this frame.
49
+ *
50
+ * @exception {RuntimeError} I3S decoder could not be initialized.
51
+ */
52
+ I3SDecoder.decode = async function (
53
+ url,
54
+ defaultGeometrySchema,
55
+ geometryData,
56
+ featureData
57
+ ) {
58
+ //>>includeStart('debug', pragmas.debug);
59
+ Check.typeOf.string("url", url);
60
+ Check.defined("defaultGeometrySchema", defaultGeometrySchema);
61
+ Check.defined("geometryData", geometryData);
62
+ //>>includeEnd('debug');
63
+
64
+ if (!defined(I3SDecoder._promise)) {
65
+ I3SDecoder._promise = initializeDecoder();
66
+ }
67
+
68
+ return I3SDecoder._promise.then(function (taskProcessor) {
69
+ // Prepare the data to send to the worker
70
+ const parentData = geometryData._parent._data;
71
+ const parentRotationInverseMatrix =
72
+ geometryData._parent._inverseRotationMatrix;
73
+
74
+ let longitude = 0.0;
75
+ let latitude = 0.0;
76
+ let height = 0.0;
77
+
78
+ if (defined(parentData.obb)) {
79
+ longitude = parentData.obb.center[0];
80
+ latitude = parentData.obb.center[1];
81
+ height = parentData.obb.center[2];
82
+ } else if (defined(parentData.mbs)) {
83
+ longitude = parentData.mbs[0];
84
+ latitude = parentData.mbs[1];
85
+ height = parentData.mbs[2];
86
+ }
87
+
88
+ const axisFlipRotation = Matrix3.fromRotationX(-CesiumMath.PI_OVER_TWO);
89
+ const parentRotation = new Matrix3();
90
+
91
+ Matrix3.multiply(
92
+ axisFlipRotation,
93
+ parentRotationInverseMatrix,
94
+ parentRotation
95
+ );
96
+
97
+ const cartographicCenter = Cartographic.fromDegrees(
98
+ longitude,
99
+ latitude,
100
+ height
101
+ );
102
+
103
+ const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(
104
+ cartographicCenter
105
+ );
106
+
107
+ const payload = {
108
+ binaryData: geometryData._data,
109
+ featureData:
110
+ defined(featureData) && defined(featureData[0])
111
+ ? featureData[0].data
112
+ : undefined,
113
+ schema: defaultGeometrySchema,
114
+ bufferInfo: geometryData._geometryBufferInfo,
115
+ ellipsoidRadiiSquare: Ellipsoid.WGS84.radiiSquared,
116
+ url: url,
117
+ geoidDataList: geometryData._dataProvider._geoidDataList,
118
+ cartographicCenter: cartographicCenter,
119
+ cartesianCenter: cartesianCenter,
120
+ parentRotation: parentRotation,
121
+ };
122
+
123
+ return taskProcessor.scheduleTask(payload);
124
+ });
125
+ };
126
+
127
+ export default I3SDecoder;
@@ -3,7 +3,6 @@ import defaultValue from "../Core/defaultValue.js";
3
3
  import defined from "../Core/defined.js";
4
4
  import Ellipsoid from "../Core/Ellipsoid.js";
5
5
  import HeadingPitchRoll from "../Core/HeadingPitchRoll.js";
6
- import CesiumMath from "../Core/Math.js";
7
6
  import Matrix3 from "../Core/Matrix3.js";
8
7
  import Matrix4 from "../Core/Matrix4.js";
9
8
  import Resource from "../Core/Resource.js";
@@ -11,6 +10,7 @@ import Quaternion from "../Core/Quaternion.js";
11
10
  import Transforms from "../Core/Transforms.js";
12
11
  import Cesium3DTile from "./Cesium3DTile.js";
13
12
  import I3SDataProvider from "./I3SDataProvider.js";
13
+ import I3SDecoder from "./I3SDecoder.js";
14
14
  import I3SFeature from "./I3SFeature.js";
15
15
  import I3SField from "./I3SField.js";
16
16
  import I3SGeometry from "./I3SGeometry.js";
@@ -608,71 +608,6 @@ I3SNode.prototype._create3DTileDefinition = function () {
608
608
  return inPlaceTileDefinition;
609
609
  };
610
610
 
611
- /**
612
- * @private
613
- */
614
- I3SNode.prototype._createI3SDecoderTask = async function (
615
- decodeI3STaskProcessor,
616
- data
617
- ) {
618
- // Prepare the data to send to the worker
619
- const parentData = data.geometryData._parent._data;
620
- const parentRotationInverseMatrix =
621
- data.geometryData._parent._inverseRotationMatrix;
622
-
623
- let longitude = 0.0;
624
- let latitude = 0.0;
625
- let height = 0.0;
626
-
627
- if (defined(parentData.obb)) {
628
- longitude = parentData.obb.center[0];
629
- latitude = parentData.obb.center[1];
630
- height = parentData.obb.center[2];
631
- } else if (defined(parentData.mbs)) {
632
- longitude = parentData.mbs[0];
633
- latitude = parentData.mbs[1];
634
- height = parentData.mbs[2];
635
- }
636
-
637
- const axisFlipRotation = Matrix3.fromRotationX(-CesiumMath.PI_OVER_TWO);
638
- const parentRotation = new Matrix3();
639
-
640
- Matrix3.multiply(
641
- axisFlipRotation,
642
- parentRotationInverseMatrix,
643
- parentRotation
644
- );
645
-
646
- const cartographicCenter = Cartographic.fromDegrees(
647
- longitude,
648
- latitude,
649
- height
650
- );
651
-
652
- const cartesianCenter = Ellipsoid.WGS84.cartographicToCartesian(
653
- cartographicCenter
654
- );
655
-
656
- const payload = {
657
- binaryData: data.geometryData._data,
658
- featureData:
659
- defined(data.featureData) && defined(data.featureData[0])
660
- ? data.featureData[0].data
661
- : undefined,
662
- schema: data.defaultGeometrySchema,
663
- bufferInfo: data.geometryData._geometryBufferInfo,
664
- ellipsoidRadiiSquare: Ellipsoid.WGS84.radiiSquared,
665
- url: data.url,
666
- geoidDataList: data.geometryData._dataProvider._geoidDataList,
667
- cartographicCenter: cartographicCenter,
668
- cartesianCenter: cartesianCenter,
669
- parentRotation: parentRotation,
670
- };
671
-
672
- const transferrableObjects = [];
673
- return decodeI3STaskProcessor.scheduleTask(payload, transferrableObjects);
674
- };
675
-
676
611
  /**
677
612
  * @private
678
613
  */
@@ -702,59 +637,46 @@ I3SNode.prototype._createContentURL = async function () {
702
637
  },
703
638
  };
704
639
 
705
- const decodeI3STaskProcessor = await this._dataProvider.getDecoderTaskProcessor();
706
-
707
640
  // Load the geometry data
708
641
  const dataPromises = [this._loadGeometryData()];
709
642
  if (this._dataProvider.legacyVersion16) {
710
643
  dataPromises.push(this._loadFeatureData());
711
644
  }
712
645
 
713
- const that = this;
714
- return Promise.all(dataPromises).then(function () {
715
- // Binary glTF
716
- let generateGltfPromise = Promise.resolve();
717
- if (defined(that._geometryData) && that._geometryData.length > 0) {
718
- const parameters = {
719
- geometryData: that._geometryData[0],
720
- featureData: that._featureData,
721
- defaultGeometrySchema: that._layer._data.store.defaultGeometrySchema,
722
- url: that._geometryData[0].resource.url,
723
- tile: that._tile,
724
- };
725
-
726
- const promise = that._createI3SDecoderTask(
727
- decodeI3STaskProcessor,
728
- parameters
729
- );
730
- if (!defined(promise)) {
731
- // Postponed
732
- return;
733
- }
734
-
735
- generateGltfPromise = promise.then(function (result) {
736
- rawGltf = parameters.geometryData._generateGltf(
737
- result.meshData.nodesInScene,
738
- result.meshData.nodes,
739
- result.meshData.meshes,
740
- result.meshData.buffers,
741
- result.meshData.bufferViews,
742
- result.meshData.accessors
743
- );
744
-
745
- that._geometryData[0]._customAttributes =
746
- result.meshData._customAttributes;
747
- });
646
+ await Promise.all(dataPromises);
647
+ // Binary glTF
648
+ if (defined(this._geometryData) && this._geometryData.length > 0) {
649
+ const url = this._geometryData[0].resource.url;
650
+ const geometrySchema = this._layer._data.store.defaultGeometrySchema;
651
+ const geometryData = this._geometryData[0];
652
+ const result = await I3SDecoder.decode(
653
+ url,
654
+ geometrySchema,
655
+ geometryData,
656
+ this._featureData[0]
657
+ );
658
+ if (!defined(result)) {
659
+ // Postponed
660
+ return;
748
661
  }
749
662
 
750
- return generateGltfPromise.then(function () {
751
- const binaryGltfData = that._dataProvider._binarizeGltf(rawGltf);
752
- const glbDataBlob = new Blob([binaryGltfData], {
753
- type: "application/binary",
754
- });
755
- return URL.createObjectURL(glbDataBlob);
756
- });
663
+ rawGltf = geometryData._generateGltf(
664
+ result.meshData.nodesInScene,
665
+ result.meshData.nodes,
666
+ result.meshData.meshes,
667
+ result.meshData.buffers,
668
+ result.meshData.bufferViews,
669
+ result.meshData.accessors
670
+ );
671
+
672
+ this._geometryData[0]._customAttributes = result.meshData._customAttributes;
673
+ }
674
+
675
+ const binaryGltfData = this._dataProvider._binarizeGltf(rawGltf);
676
+ const glbDataBlob = new Blob([binaryGltfData], {
677
+ type: "application/binary",
757
678
  });
679
+ return URL.createObjectURL(glbDataBlob);
758
680
  };
759
681
 
760
682
  // Reimplement Cesium3DTile.prototype.requestContent so that
@@ -536,8 +536,21 @@ function deriveChildTile(
536
536
  // user specified such as extras or extensions.
537
537
  const deep = true;
538
538
  const rootHeader = clone(implicitTileset.tileHeader, deep);
539
+ // The bounding volume was computed above since it may come from metadata
540
+ // in the subtree file.
539
541
  delete rootHeader.boundingVolume;
542
+ // Copying the transform to all the transcoded tiles would cause the transform
543
+ // to be applied multiple times. Removing it from the header avoids this issue.
540
544
  delete rootHeader.transform;
545
+ // The implicit tiling spec does not specify what should happen if explicit
546
+ // tile metadata is added to the placeholder tile. Since implicit tile
547
+ // metadata comes from the subtree file, ignore the explicit version.
548
+ //
549
+ // Also, when a property with the semantic TILE_BOUNDING_VOLUME is added to
550
+ // the placeholder tile to set a tight bounding volume (See Cesium3DTile.js)
551
+ // propagating it to transcoded tiles causes transcoded tiles to use the
552
+ // wrong bounding volume, this can lead to loading far too many tiles.
553
+ delete rootHeader.metadata;
541
554
  const combinedTileJson = combine(tileJson, rootHeader, deep);
542
555
 
543
556
  const childTile = makeTile(
@@ -60,6 +60,11 @@ function ImplicitTileset(baseResource, tileJson, metadataSchema) {
60
60
  */
61
61
  this.metadataSchema = metadataSchema;
62
62
 
63
+ // Due to using explicit tile metadata to store a tight bounding box
64
+ // in some cases (see https://github.com/CesiumGS/cesium/pull/11365)
65
+ // it's important that this bounding volume is computed from the tile JSON
66
+ // (which is the original, possibly loose bounding volume) rather than
67
+ // tile.boundingVolume which is the tighter one.
63
68
  const boundingVolume = tileJson.boundingVolume;
64
69
  if (
65
70
  !defined(boundingVolume.box) &&
@@ -423,7 +423,11 @@ function createInstances(loader, components, frameState) {
423
423
  // For I3DMs that do not define an RTC center, we manually compute a BoundingSphere and store
424
424
  // positions relative to the center, to be uploaded to the GPU. This avoids jittering at higher
425
425
  // precisions.
426
- if (!defined(rtcCenter)) {
426
+ // Also manually compute if RTC center equals Cartesian3.ZERO
427
+ if (
428
+ !defined(rtcCenter) ||
429
+ Cartesian3.equals(Cartesian3.unpack(rtcCenter), Cartesian3.ZERO)
430
+ ) {
427
431
  const positionBoundingSphere = BoundingSphere.fromPoints(instancePositions);
428
432
 
429
433
  for (i = 0; i < instancePositions.length; i++) {
@@ -1838,7 +1838,10 @@ Model.prototype.update = function (frameState) {
1838
1838
  };
1839
1839
 
1840
1840
  function processLoader(model, frameState) {
1841
- if (!model._resourcesLoaded || !model._texturesLoaded) {
1841
+ if (
1842
+ !model._resourcesLoaded ||
1843
+ (model._loader.incrementallyLoadTextures && !model._texturesLoaded)
1844
+ ) {
1842
1845
  // Ensures frames continue to render in requestRender mode while resources are processing
1843
1846
  frameState.afterRender.push(() => true);
1844
1847
  return model._loader.process(frameState);
@@ -18,6 +18,7 @@ const defaultCredit = new Credit(
18
18
  *
19
19
  * @property {string} [url='https://tile.openstreetmap.org'] The OpenStreetMap server url.
20
20
  * @property {string} [fileExtension='png'] The file extension for images on the server.
21
+ * @property {boolean} [retinaTiles=false] When true, request tiles at the 2x resolution for retina displays.
21
22
  * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.
22
23
  * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.
23
24
  * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.
@@ -62,7 +63,9 @@ function OpenStreetMapImageryProvider(options) {
62
63
  defaultValue(options.url, "https://tile.openstreetmap.org/")
63
64
  );
64
65
  resource.appendForwardSlash();
65
- resource.url += `{z}/{x}/{y}.${defaultValue(options.fileExtension, "png")}`;
66
+ resource.url += `{z}/{x}/{y}${
67
+ options.retinaTiles ? "@2x" : ""
68
+ }.${defaultValue(options.fileExtension, "png")}`;
66
69
 
67
70
  const tilingScheme = new WebMercatorTilingScheme({
68
71
  ellipsoid: options.ellipsoid,
@@ -24,8 +24,9 @@ import ImageryProvider from "./ImageryProvider.js";
24
24
  */
25
25
 
26
26
  /**
27
- * Provides a single, top-level imagery tile. The single image is assumed to use a
28
- * {@link GeographicTilingScheme}.
27
+ * Provides a single, top-level imagery tile. The single image is assumed to be in
28
+ * the Geographic projection (i.e. WGS84 / EPSG:4326),
29
+ * and will be rendered using a {@link GeographicTilingScheme}.
29
30
  *
30
31
  * @alias SingleTileImageryProvider
31
32
  * @constructor
@@ -295,6 +296,7 @@ async function doRequest(resource, provider, previousError) {
295
296
  * Creates a provider for a single, top-level imagery tile. The single image is assumed to use a
296
297
  * @param {Resource|String} url The url for the tile
297
298
  * @param {SingleTileImageryProvider.fromUrlOptions} [options] Object describing initialization options.
299
+ * @returns {Promise.<SingleTileImageryProvider>} The resolved SingleTileImageryProvider.
298
300
  *
299
301
  * @example
300
302
  * const provider = await SingleTileImageryProvider.fromUrl("https://yoururl.com/image.png");