@hztxi/cesium-engine 25.0.7 → 26.2.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 (412) hide show
  1. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  2. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  3. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  4. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  5. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  6. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  7. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  8. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  9. package/Build/Workers/chunk-4N227IPR.js +973 -0
  10. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  11. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  12. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  13. package/Build/Workers/chunk-5I76476T.js +288 -0
  14. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  15. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  16. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  17. package/Build/Workers/chunk-77DBX23X.js +455 -0
  18. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  19. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  20. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  21. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  22. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  23. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  24. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  25. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  26. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  27. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  28. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  29. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  30. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  31. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  32. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  33. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  34. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  35. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  36. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  37. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  38. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  39. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  40. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  41. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  42. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  43. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  44. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  45. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  46. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  47. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  48. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  49. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  50. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  51. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  52. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  53. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  54. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  55. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  56. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  57. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  58. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  59. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  60. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  61. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  62. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  63. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  64. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  65. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  66. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  67. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  68. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  69. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  70. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  71. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  72. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  73. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  74. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  75. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  76. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  77. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  78. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  79. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  80. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  81. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  82. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  83. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  84. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  85. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  86. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  87. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  88. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  89. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  90. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  91. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  92. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  93. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  94. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  95. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  96. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  97. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  98. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  99. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  100. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  101. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  102. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  103. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  104. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  105. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  106. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  107. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  108. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  109. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  110. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  111. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  112. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  113. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  114. package/Build/Workers/combineGeometry.js +24 -24
  115. package/Build/Workers/createBoxGeometry.js +18 -18
  116. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  117. package/Build/Workers/createCircleGeometry.js +26 -26
  118. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  119. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  120. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  121. package/Build/Workers/createCorridorGeometry.js +36 -37
  122. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  123. package/Build/Workers/createCylinderGeometry.js +20 -20
  124. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  125. package/Build/Workers/createEllipseGeometry.js +26 -26
  126. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  127. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  128. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  129. package/Build/Workers/createFrustumGeometry.js +18 -18
  130. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  131. package/Build/Workers/createGeometry.js +25 -24
  132. package/Build/Workers/createGroundPolylineGeometry.js +26 -26
  133. package/Build/Workers/createMvtTile.js +111 -19
  134. package/Build/Workers/createPlaneGeometry.js +18 -18
  135. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  136. package/Build/Workers/createPolygonGeometry.js +36 -36
  137. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  138. package/Build/Workers/createPolylineGeometry.js +28 -28
  139. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  140. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  141. package/Build/Workers/createRectangleGeometry.js +29 -29
  142. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  143. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  144. package/Build/Workers/createSphereGeometry.js +19 -19
  145. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  146. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  147. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  148. package/Build/Workers/createVectorTileGeometries.js +24 -24
  149. package/Build/Workers/createVectorTilePoints.js +13 -13
  150. package/Build/Workers/createVectorTilePolygons.js +22 -22
  151. package/Build/Workers/createVectorTilePolylines.js +14 -14
  152. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  153. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  154. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  155. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  156. package/Build/Workers/createWallGeometry.js +26 -26
  157. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  158. package/Build/Workers/decodeDraco.js +10 -10
  159. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  160. package/Build/Workers/decodeI3S.js +10 -10
  161. package/Build/Workers/gaussianSplatSorter.js +4 -4
  162. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  163. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  164. package/Build/Workers/transcodeKTX2.js +6 -6
  165. package/Build/Workers/transferTypedArrayTest.js +1 -1
  166. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  167. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  168. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  169. package/Source/Core/BoundingRectangle.js +6 -8
  170. package/Source/Core/BoundingSphere.js +0 -3
  171. package/Source/Core/Cartesian2.js +1 -1
  172. package/Source/Core/Cartesian3.js +1 -1
  173. package/Source/Core/Cartesian4.js +1 -1
  174. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  175. package/Source/Core/Color.js +1 -0
  176. package/Source/Core/ComponentDatatype.js +35 -0
  177. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  178. package/Source/Core/CorridorGeometry.js +2 -4
  179. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  180. package/Source/Core/EarthOrientationParameters.js +2 -2
  181. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  182. package/Source/Core/EllipsoidGeodesic.js +3 -3
  183. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  184. package/Source/Core/Heap.js +1 -1
  185. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  186. package/Source/Core/InterpolationAlgorithm.js +58 -50
  187. package/Source/Core/Ion.js +1 -1
  188. package/Source/Core/JulianDate.js +1 -1
  189. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  190. package/Source/Core/LinearApproximation.js +69 -66
  191. package/Source/Core/MapProjection.js +1 -0
  192. package/Source/Core/Math.js +59 -0
  193. package/Source/Core/Matrix2.js +3 -3
  194. package/Source/Core/Matrix3.js +3 -3
  195. package/Source/Core/Matrix4.js +1 -1
  196. package/Source/Core/OrthographicFrustum.js +1 -1
  197. package/Source/Core/PerspectiveFrustum.js +1 -1
  198. package/Source/Core/PolygonGeometry.js +2 -2
  199. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  200. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  201. package/Source/Core/PolylineGeometry.js +1 -1
  202. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  203. package/Source/Core/Rectangle.js +7 -1
  204. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  205. package/Source/Core/Resource.js +1 -1
  206. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  207. package/Source/Core/SimplePolylineGeometry.js +1 -1
  208. package/Source/Core/TerrainEncoding.js +2 -2
  209. package/Source/Core/TerrainMesh.js +3 -3
  210. package/Source/Core/TerrainPicker.js +180 -168
  211. package/Source/Core/TimeIntervalCollection.js +1 -3
  212. package/Source/Core/Tipsify.js +1 -1
  213. package/Source/Core/Transforms.js +5 -1
  214. package/Source/Core/VectorPipeline.js +1117 -0
  215. package/Source/Core/VectorProvider.js +429 -0
  216. package/Source/Core/WallOutlineGeometry.js +1 -1
  217. package/Source/Core/createColorRamp.js +37 -0
  218. package/Source/Core/getTimestamp.js +4 -2
  219. package/Source/Core/globalTypes.js +25 -0
  220. package/Source/Core/writeTextToCanvas.js +1 -0
  221. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  222. package/Source/DataSources/CzmlDataSource.js +14 -0
  223. package/Source/DataSources/DataSourceDisplay.js +1 -1
  224. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  225. package/Source/DataSources/GeometryVisualizer.js +1 -1
  226. package/Source/DataSources/KmlDataSource.js +529 -557
  227. package/Source/DataSources/PathGraphics.js +8 -1
  228. package/Source/DataSources/PathMode.js +27 -0
  229. package/Source/DataSources/PathVisualizer.js +298 -1
  230. package/Source/DataSources/PolylineVisualizer.js +1 -1
  231. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  232. package/Source/Renderer/AutomaticUniforms.js +23 -0
  233. package/Source/Renderer/Context.js +9 -3
  234. package/Source/Renderer/DrawCommand.js +22 -0
  235. package/Source/Renderer/Framebuffer.js +4 -0
  236. package/Source/Renderer/Pass.js +11 -9
  237. package/Source/Renderer/Texture.js +12 -1
  238. package/Source/Renderer/UniformState.js +7 -0
  239. package/Source/Renderer/VertexArray.js +1 -1
  240. package/Source/Renderer/createUniform.js +346 -239
  241. package/Source/Renderer/createUniformArray.js +494 -381
  242. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  243. package/Source/Scene/ArcGisMapService.js +1 -1
  244. package/Source/Scene/Billboard.js +2 -1
  245. package/Source/Scene/BillboardCollection.js +15 -5
  246. package/Source/Scene/BillboardTexture.js +5 -3
  247. package/Source/Scene/BufferPointCollection.js +11 -1
  248. package/Source/Scene/BufferPolygonCollection.js +26 -0
  249. package/Source/Scene/BufferPolylineCollection.js +2 -0
  250. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  251. package/Source/Scene/Camera.js +85 -9
  252. package/Source/Scene/CameraEventAggregator.js +30 -18
  253. package/Source/Scene/CameraFlightPath.js +7 -4
  254. package/Source/Scene/Cesium3DTile.js +102 -4
  255. package/Source/Scene/Cesium3DTileContent.js +195 -254
  256. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  257. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  258. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  259. package/Source/Scene/Cesium3DTileset.js +213 -8
  260. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  261. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  262. package/Source/Scene/ClippingPolygon.js +2 -0
  263. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  264. package/Source/Scene/Composite3DTileContent.js +254 -292
  265. package/Source/Scene/Controllers/Controller.js +63 -0
  266. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  267. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  268. package/Source/Scene/Controllers/MouseButton.js +32 -0
  269. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  270. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  271. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  272. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  273. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  274. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  275. package/Source/Scene/DerivedCommand.js +98 -0
  276. package/Source/Scene/EdgeDisplayMode.js +50 -0
  277. package/Source/Scene/EdgeFramebuffer.js +1 -5
  278. package/Source/Scene/Empty3DTileContent.js +100 -132
  279. package/Source/Scene/Expression.js +6 -8
  280. package/Source/Scene/FrameState.js +17 -0
  281. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  282. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  283. package/Source/Scene/Geometry3DTileContent.js +151 -185
  284. package/Source/Scene/Globe.js +22 -1
  285. package/Source/Scene/GlobeDepth.js +27 -1
  286. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  287. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  288. package/Source/Scene/GlobeSurfaceTileProvider.js +1412 -1184
  289. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  290. package/Source/Scene/GltfLoader.js +146 -3
  291. package/Source/Scene/GltfLoaderUtil.js +20 -4
  292. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  293. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  294. package/Source/Scene/GltfSpzLoader.js +1 -1
  295. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  296. package/Source/Scene/I3SDataProvider.js +1 -1
  297. package/Source/Scene/I3SLayer.js +1 -1
  298. package/Source/Scene/I3SNode.js +2 -2
  299. package/Source/Scene/ImageryLayer.js +2 -2
  300. package/Source/Scene/ImageryLayerCollection.js +190 -6
  301. package/Source/Scene/Implicit3DTileContent.js +192 -216
  302. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  303. package/Source/Scene/IonImageryProvider.js +1 -5
  304. package/Source/Scene/Label.js +4 -4
  305. package/Source/Scene/LabelCollection.js +4 -1
  306. package/Source/Scene/MVTDataProvider.js +555 -0
  307. package/Source/Scene/Material.js +1 -0
  308. package/Source/Scene/Model/B3dmLoader.js +1 -2
  309. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  310. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  311. package/Source/Scene/Model/I3dmLoader.js +1 -1
  312. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  313. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  314. package/Source/Scene/Model/Model.js +45 -10
  315. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  316. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  317. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  318. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  319. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  320. package/Source/Scene/Model/ModelUtility.js +5 -0
  321. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  322. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  323. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  324. package/Source/Scene/ModelComponents.js +112 -0
  325. package/Source/Scene/Multiple3DTileContent.js +291 -334
  326. package/Source/Scene/MvtLabelCandidates.js +295 -0
  327. package/Source/Scene/MvtLabelManager.js +1069 -0
  328. package/Source/Scene/Picking.js +19 -3
  329. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  330. package/Source/Scene/PntsParser.js +1 -1
  331. package/Source/Scene/PolylineCollection.js +5 -3
  332. package/Source/Scene/PostProcessStage.js +4 -2
  333. package/Source/Scene/QuadtreePrimitive.js +3 -2
  334. package/Source/Scene/ResourceCache.js +7 -4
  335. package/Source/Scene/ResourceCacheKey.js +21 -18
  336. package/Source/Scene/Scene.js +237 -11
  337. package/Source/Scene/SceneTransforms.js +6 -5
  338. package/Source/Scene/ShadowMap.js +9 -3
  339. package/Source/Scene/ShadowMapShader.js +50 -2
  340. package/Source/Scene/SnapFramebuffer.js +121 -0
  341. package/Source/Scene/Snapping.js +184 -0
  342. package/Source/Scene/TerrainFillMesh.js +3 -2
  343. package/Source/Scene/Tileset3DTileContent.js +113 -146
  344. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  345. package/Source/Scene/Vector3DTileContent.js +207 -237
  346. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  347. package/Source/Scene/View.js +10 -8
  348. package/Source/Scene/VoxelPrimitive.js +159 -175
  349. package/Source/Scene/VoxelProvider.js +64 -91
  350. package/Source/Scene/VoxelTraversal.js +1 -1
  351. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  352. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  353. package/Source/Scene/createElevationBandMaterial.js +1 -1
  354. package/Source/Scene/decodeMVT.js +877 -0
  355. package/Source/Scene/findMeshoptExtension.js +23 -0
  356. package/Source/Scene/renderBufferPointCollection.js +114 -64
  357. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  358. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  359. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  360. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  361. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  362. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  363. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  364. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  365. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  366. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  367. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  368. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  369. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  370. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  371. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  372. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  373. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  374. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  375. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  376. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  377. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  378. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  379. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  380. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  381. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  382. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  383. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  384. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  385. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  386. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  387. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  388. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  389. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  390. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  391. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  392. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  393. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  394. package/Source/Shaders/GlobeFS.glsl +10 -6
  395. package/Source/Shaders/GlobeFS.js +10 -6
  396. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  397. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  398. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  399. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  400. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  401. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  402. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  403. package/Source/Shaders/Model/ModelFS.js +105 -0
  404. package/Source/Shaders/VectorCommon.glsl +178 -0
  405. package/Source/Shaders/VectorCommon.js +180 -0
  406. package/Source/ThirdParty/zip-module.wasm +0 -0
  407. package/Source/Widget/CesiumWidget.js +30 -0
  408. package/Source/Workers/createMvtTile.js +39 -0
  409. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  410. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  411. package/index.js +113 -83
  412. package/package.json +13 -13
@@ -325,11 +325,6 @@ function ArcGisMapServerImageryProvider(options) {
325
325
  this._credit = options.credit;
326
326
  this._tileCredits = undefined;
327
327
 
328
- let credit = options.credit;
329
- if (typeof credit === "string") {
330
- credit = new Credit(credit);
331
- }
332
-
333
328
  /**
334
329
  * Gets or sets a value indicating whether feature picking is enabled. If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will
335
330
  * invoke the "identify" operation on the ArcGIS server and return the features included in the response. If false,
@@ -4,7 +4,7 @@ import Resource from "../Core/Resource.js";
4
4
 
5
5
  let defaultTokenCredit;
6
6
  const defaultAccessToken =
7
- "AAPTarorp_WgBbyDABMqDfNsSWg..ykf3buvvbFduVL73NrRrnqBR8lO4ndPrO94nF7-3rfUWF5n3sbUe2Xe0d4rhAGa-sOTDpE-AI5kom4O4ixK3QFkTnjaGpFtDOxyrPXZUj1vRmsZAaIMZlzC5TWfBDr-RYeD9NCRMq8JwaP2Fp9blpXTqYVCWpENJLiCJ3pUlQ7XSrnJYNlPwph4B3k1FAK_j3DTlLDd2xbHwcMRbVYq8iJqt7vGuWHw3otSkmltdnNAgMaVQ366Rf0YUAT1_Hbd2aXK9";
7
+ "AAPTa7BPWL4PoZRFPJ2CM2YRclg..ub1vMOBXctC7ozMMKNnmx3ZwVTsDJAXo2GLomQ2CZjuOc2HLr1-CryeuRo9ZsV65cuZ9xN1yFKeLTu7Cxld7B97aI28os_NnuC9nvWde_l4G1DTApSHmhrVoZfKgO0bqOrsDfvvSgO-cdkUEvBASNX_4Lb9tB5fEY7lbYaWdOOWBXyZylR9il0-biB248V6HdDT1kgkSwz9esfKialRTLgxJx8AFM9is--UXK0CLvZn6JUU44PZSFuMyAT1_rgxsirsZ";
8
8
  /**
9
9
  * Default options for accessing the ArcGIS image tile service.
10
10
  *
@@ -706,8 +706,9 @@ Object.defineProperties(Billboard.prototype, {
706
706
  },
707
707
 
708
708
  /**
709
- * Gets or sets the aligned axis in world space. The aligned axis is the unit vector that the billboard up vector points towards.
709
+ * The aligned axis is the direction vector that the billboard up vector points towards.
710
710
  * The default is the zero vector, which means the billboard is aligned to the screen up vector.
711
+ * Note that only the zero vector (0,0,0) resets the alignment to screen up.
711
712
  * @memberof Billboard.prototype
712
713
  * @type {Cartesian3}
713
714
  * @example
@@ -102,6 +102,7 @@ const attributeLocations = {
102
102
  * @param {boolean} [options.show=true] Determines if the billboards in the collection will be shown.
103
103
  * @param {number} [options.coarseDepthTestDistance] The distance from the camera, beyond which, billboards are depth-tested against an approximation of the globe ellipsoid rather than against the full globe depth buffer. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.
104
104
  * @param {number} [options.threePointDepthTestDistance] The distance from the camera, within which, billboards with a {@link Billboard#heightReference} value of {@link HeightReference.CLAMP_TO_GROUND} or {@link HeightReference.CLAMP_TO_TERRAIN} are depth tested against three key points. This ensures that if any key point of the billboard is visible, the whole billboard will be visible. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.
105
+ * @param {boolean} [options.alwaysThreePointDepthTest=false] Enables the three-point depth test even when {@link Globe#depthTestAgainstTerrain} is false.
105
106
  * @performance For best performance, prefer a few collections, each with many billboards, to
106
107
  * many collections with only a few billboards each. Organize collections so that billboards
107
108
  * with the same update frequency are in the same collection, i.e., billboards that do not
@@ -305,6 +306,7 @@ function BillboardCollection(options) {
305
306
  this._threePointDepthTestDistance =
306
307
  options.threePointDepthTestDistance ??
307
308
  Ellipsoid.default.minimumRadius / 1000.0;
309
+ this._alwaysThreePointDepthTest = options.alwaysThreePointDepthTest ?? false;
308
310
 
309
311
  this._uniforms = {
310
312
  u_atlas: () => {
@@ -1033,8 +1035,9 @@ function writeCompressedAttrib1(
1033
1035
  billboard,
1034
1036
  ) {
1035
1037
  const writer = vafWriters[attributeLocations.compressedAttribute1];
1036
- const alignedAxis = billboard.alignedAxis;
1038
+ let alignedAxis = billboard.alignedAxis;
1037
1039
  if (!Cartesian3.equals(alignedAxis, Cartesian3.ZERO)) {
1040
+ alignedAxis = Cartesian3.normalize(alignedAxis, new Cartesian3());
1038
1041
  billboardCollection._shaderAlignedAxis = true;
1039
1042
  }
1040
1043
 
@@ -1096,12 +1099,15 @@ function writeCompressedAttrib2(
1096
1099
  ? billboard.getPickId(frameState.context).color
1097
1100
  : Color.WHITE;
1098
1101
  const sizeInMeters = billboard.sizeInMeters ? 1.0 : 0.0;
1102
+ const rawAxis = billboard.alignedAxis;
1103
+ const normalizedAxis = !Cartesian3.equals(rawAxis, Cartesian3.ZERO)
1104
+ ? Cartesian3.normalize(rawAxis, new Cartesian3())
1105
+ : rawAxis;
1099
1106
  const validAlignedAxis =
1100
- Math.abs(Cartesian3.magnitudeSquared(billboard.alignedAxis) - 1.0) <
1107
+ Math.abs(Cartesian3.magnitudeSquared(normalizedAxis) - 1.0) <
1101
1108
  CesiumMath.EPSILON6
1102
1109
  ? 1.0
1103
1110
  : 0.0;
1104
-
1105
1111
  billboardCollection._allSizedInMeters =
1106
1112
  billboardCollection._allSizedInMeters && sizeInMeters === 1.0;
1107
1113
 
@@ -1292,9 +1298,13 @@ function writeTextureCoordinateBoundsOrLabelTranslate(
1292
1298
  const depthTestAgainstTerrain =
1293
1299
  defined(scene.globe) && scene.globe.depthTestAgainstTerrain;
1294
1300
 
1295
- // Only do manual depth test if the globe is opaque and writes depth
1301
+ // Only do manual depth test when the globe is opaque. Collections may
1302
+ // explicitly opt in when the globe does not also depth-test entities.
1296
1303
  billboardCollection._shaderClampToGround =
1297
- context.depthTexture && !globeTranslucent && depthTestAgainstTerrain;
1304
+ context.depthTexture &&
1305
+ !globeTranslucent &&
1306
+ (depthTestAgainstTerrain ||
1307
+ billboardCollection._alwaysThreePointDepthTest);
1298
1308
  }
1299
1309
  const writer =
1300
1310
  vafWriters[attributeLocations.textureCoordinateBoundsOrLabelTranslate];
@@ -199,9 +199,11 @@ BillboardTexture.prototype.loadImage = async function (
199
199
  let index;
200
200
  const atlas = this._billboardCollection.textureAtlas;
201
201
  try {
202
- index = atlas.addImage(id, image, width, height);
203
- if (index instanceof Promise) {
204
- index = await index;
202
+ const indexOrPromise = atlas.addImage(id, image, width, height);
203
+ if (typeof indexOrPromise === "number") {
204
+ index = indexOrPromise;
205
+ } else {
206
+ index = await indexOrPromise;
205
207
  }
206
208
  } catch (error) {
207
209
  // There was an error loading the image
@@ -7,6 +7,8 @@ import Frozen from "../Core/Frozen.js";
7
7
  import renderPoints from "./renderBufferPointCollection.js";
8
8
  import BufferPointMaterial from "./BufferPointMaterial.js";
9
9
 
10
+ /** @import BlendOption from "./BlendOption.js"; */
11
+ /** @import BoundingSphere from "../Core/BoundingSphere.js"; */
10
12
  /** @import ComponentDatatype from "../Core/ComponentDatatype.js"; */
11
13
  /** @import Matrix4 from "../Core/Matrix4.js"; */
12
14
  /** @import FrameState from "./FrameState.js"; */
@@ -58,10 +60,16 @@ class BufferPointCollection extends BufferPrimitiveCollection {
58
60
  * @param {object} options
59
61
  * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] Transforms geometry from model to world coordinates.
60
62
  * @param {number} [options.primitiveCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
61
- * @param {boolean} [options.show=true]
62
63
  * @param {ComponentDatatype} [options.positionDatatype=ComponentDatatype.DOUBLE]
64
+ * @param {boolean} [options.positionNormalized=false]
65
+ * @param {boolean} [options.show=true]
63
66
  * @param {boolean} [options.allowPicking=false] When <code>true</code>, primitives are pickable with {@link Scene#pick}. When <code>false</code>, memory and initialization cost are lower.
67
+ * @param {BoundingSphere} [options.boundingVolume] Bounding volume, in world space, for the collection. When
68
+ * unspecified, a bounding volume is computed automatically and updated when primitive positions change. When
69
+ * specified, users are responsible for updating bounding volume as needed. Pre-computing the bounding volume
70
+ * manually, and updating it only as needed, will improve performance for larger dynamic collections.
64
71
  * @param {boolean} [options.debugShowBoundingVolume=false]
72
+ * @param {BlendOption} [options.blendOption=BlendOption.TRANSLUCENT]
65
73
  */
66
74
  constructor(options = Frozen.EMPTY_OBJECT) {
67
75
  super({ ...options, vertexCountMax: options.primitiveCountMax });
@@ -91,6 +99,8 @@ class BufferPointCollection extends BufferPrimitiveCollection {
91
99
  static _cloneEmpty(collection) {
92
100
  return new BufferPointCollection({
93
101
  primitiveCountMax: collection.primitiveCountMax,
102
+ positionDatatype: collection.positionDatatype,
103
+ positionNormalized: collection.positionNormalized,
94
104
  });
95
105
  }
96
106
 
@@ -9,6 +9,8 @@ import IndexDatatype from "../Core/IndexDatatype.js";
9
9
  import renderPolygons from "./renderBufferPolygonCollection.js";
10
10
  import BufferPolygonMaterial from "./BufferPolygonMaterial.js";
11
11
 
12
+ /** @import BlendOption from "./BlendOption.js"; */
13
+ /** @import BoundingSphere from "../Core/BoundingSphere.js"; */
12
14
  /** @import { TypedArray } from "../Core/globalTypes.js"; */
13
15
  /** @import Matrix4 from "../Core/Matrix4.js"; */
14
16
  /** @import FrameState from "./FrameState.js" */
@@ -80,9 +82,15 @@ class BufferPolygonCollection extends BufferPrimitiveCollection {
80
82
  * @param {number} [options.holeCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
81
83
  * @param {number} [options.triangleCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
82
84
  * @param {ComponentDatatype} [options.positionDatatype=ComponentDatatype.DOUBLE]
85
+ * @param {boolean} [options.positionNormalized=false]
83
86
  * @param {boolean} [options.show=true]
84
87
  * @param {boolean} [options.allowPicking=true] When <code>true</code>, primitives are pickable with {@link Scene#pick}. When <code>false</code>, memory and initialization cost are lower.
88
+ * @param {BoundingSphere} [options.boundingVolume] Bounding volume, in world space, for the collection. When
89
+ * unspecified, a bounding volume is computed automatically and updated when primitive positions change. When
90
+ * specified, users are responsible for updating bounding volume as needed. Pre-computing the bounding volume
91
+ * manually, and updating it only as needed, will improve performance for larger dynamic collections.
85
92
  * @param {boolean} [options.debugShowBoundingVolume=false]
93
+ * @param {BlendOption} [options.blendOption=BlendOption.TRANSLUCENT]
86
94
  */
87
95
  constructor(options = Frozen.EMPTY_OBJECT) {
88
96
  super(options);
@@ -107,6 +115,22 @@ class BufferPolygonCollection extends BufferPrimitiveCollection {
107
115
  */
108
116
  this._holeIndexView = null;
109
117
 
118
+ /**
119
+ * Per-vertex tile side flags used to suppress outlines along clipped tile
120
+ * boundaries. Undefined for collections that do not originate from MVT.
121
+ * @type {TypedArray|undefined}
122
+ * @ignore
123
+ */
124
+ this._polygonTileBoundaryFlags = undefined;
125
+
126
+ /**
127
+ * Whether the collection draws polygon outlines. Vector tile styling sets
128
+ * this when either outline color or width is present in the style.
129
+ * @type {boolean}
130
+ * @ignore
131
+ */
132
+ this._polygonOutlineEnabled = false;
133
+
110
134
  /**
111
135
  * @type {number}
112
136
  * @ignore
@@ -225,6 +249,8 @@ class BufferPolygonCollection extends BufferPrimitiveCollection {
225
249
  vertexCountMax: collection.vertexCountMax,
226
250
  holeCountMax: collection.holeCountMax,
227
251
  triangleCountMax: collection.triangleCountMax,
252
+ positionDatatype: collection.positionDatatype,
253
+ positionNormalized: collection.positionNormalized,
228
254
  });
229
255
  }
230
256
 
@@ -82,6 +82,8 @@ class BufferPolylineCollection extends BufferPrimitiveCollection {
82
82
  return new BufferPolylineCollection({
83
83
  primitiveCountMax: collection.primitiveCountMax,
84
84
  vertexCountMax: collection.vertexCountMax,
85
+ positionDatatype: collection.positionDatatype,
86
+ positionNormalized: collection.positionNormalized,
85
87
  });
86
88
  }
87
89
 
@@ -9,8 +9,11 @@ import assert from "../Core/assert.js";
9
9
  import ComponentDatatype from "../Core/ComponentDatatype.js";
10
10
  import defined from "../Core/defined.js";
11
11
  import Check from "../Core/Check.js";
12
+ import AttributeCompression from "../Core/AttributeCompression.js";
12
13
  import SceneMode from "./SceneMode.js";
14
+ import AttributeType from "./AttributeType.js";
13
15
  import oneTimeWarning from "../Core/oneTimeWarning.js";
16
+ import BlendOption from "../Scene/BlendOption.js";
14
17
 
15
18
  /** @import { Destroyable, TypedArray, TypedArrayConstructor } from "../Core/globalTypes.js"; */
16
19
  /** @import Context from "../Renderer/Context.js"; */
@@ -74,8 +77,16 @@ class BufferPrimitiveCollection {
74
77
  * @param {number} [options.vertexCountMax=BufferPrimitiveCollection.DEFAULT_CAPACITY]
75
78
  * @param {boolean} [options.show=true]
76
79
  * @param {ComponentDatatype} [options.positionDatatype=ComponentDatatype.DOUBLE]
80
+ * @param {boolean} [options.positionNormalized=false] When <code>true</code>, integer position values are treated as normalized,
81
+ * where the full integer range maps to [-1, 1] (signed) or [0, 1] (unsigned). Only relevant for integer position datatypes
82
+ * (BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT).
77
83
  * @param {boolean} [options.allowPicking=false] When <code>true</code>, primitives are pickable with {@link Scene#pick}. When <code>false</code>, memory and initialization cost are lower.
84
+ * @param {BoundingSphere} [options.boundingVolume] Bounding volume, in world space, for the collection. When
85
+ * unspecified, a bounding volume is computed automatically and updated when primitive positions change. When
86
+ * specified, users are responsible for updating bounding volume as needed. Pre-computing the bounding volume
87
+ * manually, and updating it only as needed, will improve performance for larger dynamic collections.
78
88
  * @param {boolean} [options.debugShowBoundingVolume=false]
89
+ * @param {BlendOption} [options.blendOption=BlendOption.TRANSLUCENT]
79
90
  */
80
91
  constructor(options = Frozen.EMPTY_OBJECT) {
81
92
  /**
@@ -86,6 +97,15 @@ class BufferPrimitiveCollection {
86
97
  this.show = options.show ?? true;
87
98
 
88
99
  /**
100
+ * Collection blend option; must be OPAQUE or TRANSLUCENT.
101
+ * @type {BlendOption}
102
+ * @readonly
103
+ * @ignore
104
+ */
105
+ this._blendOption = options.blendOption ?? BlendOption.TRANSLUCENT;
106
+
107
+ /**
108
+ * Transforms geometry from model to world coordinates.
89
109
  * @type {Matrix4}
90
110
  * @default Matrix4.IDENTITY
91
111
  * @readonly
@@ -98,14 +118,17 @@ class BufferPrimitiveCollection {
98
118
  * @readonly
99
119
  * @protected
100
120
  */
101
- this._boundingVolume = new BoundingSphere();
121
+ this._boundingVolume = BoundingSphere.clone(
122
+ options.boundingVolume ?? new BoundingSphere(),
123
+ new BoundingSphere(),
124
+ );
102
125
 
103
126
  /**
104
- * @type {BoundingSphere}
127
+ * @type {boolean}
105
128
  * @readonly
106
129
  * @protected
107
130
  */
108
- this._boundingVolumeWC = new BoundingSphere();
131
+ this._boundingVolumeAutoUpdate = !defined(options.boundingVolume);
109
132
 
110
133
  /**
111
134
  * When <code>true</code>, primitives are pickable with {@link Scene#pick}.
@@ -171,7 +194,6 @@ class BufferPrimitiveCollection {
171
194
 
172
195
  /**
173
196
  * @type {number}
174
- * @protected
175
197
  * @ignore
176
198
  */
177
199
  this._positionCountMax =
@@ -183,6 +205,21 @@ class BufferPrimitiveCollection {
183
205
  */
184
206
  this._positionView = null;
185
207
 
208
+ /**
209
+ * @type {ComponentDatatype}
210
+ * @ignore
211
+ */
212
+ this._positionDatatype =
213
+ options.positionDatatype ?? ComponentDatatype.DOUBLE;
214
+
215
+ /**
216
+ * When <code>true</code>, integer position values represent normalized floats
217
+ * in [-1, 1] (signed) or [0, 1] (unsigned). Only applicable to integer datatypes.
218
+ * @type {boolean}
219
+ * @ignore
220
+ */
221
+ this._positionNormalized = options.positionNormalized ?? false;
222
+
186
223
  /**
187
224
  * @type {DataView<ArrayBuffer>}
188
225
  * @ignore
@@ -211,10 +248,15 @@ class BufferPrimitiveCollection {
211
248
  */
212
249
  this._dirtyBoundingVolume = false;
213
250
 
251
+ /**
252
+ * Monotonically increasing counter, bumped each time collection is marked "clean".
253
+ * @type {number}
254
+ * @ignore
255
+ */
256
+ this._version = 0;
257
+
214
258
  this._allocatePrimitiveBuffer();
215
- this._allocatePositionBuffer(
216
- options.positionDatatype ?? ComponentDatatype.DOUBLE,
217
- );
259
+ this._allocatePositionBuffer();
218
260
  this._allocateMaterialBuffer();
219
261
  }
220
262
 
@@ -267,14 +309,13 @@ class BufferPrimitiveCollection {
267
309
  }
268
310
 
269
311
  /**
270
- * @param {ComponentDatatype} datatype
271
312
  * @private
272
313
  * @ignore
273
314
  */
274
- _allocatePositionBuffer(datatype) {
275
- // @ts-expect-error Requires https://github.com/CesiumGS/cesium/pull/13203.
315
+ _allocatePositionBuffer() {
316
+ // @ts-expect-error https://github.com/CesiumGS/cesium/issues/13420
276
317
  this._positionView = ComponentDatatype.createTypedArray(
277
- datatype,
318
+ this._positionDatatype,
278
319
  this._positionCountMax * 3,
279
320
  );
280
321
  }
@@ -471,28 +512,32 @@ class BufferPrimitiveCollection {
471
512
  * @ignore
472
513
  */
473
514
  _updateBoundingVolume() {
474
- const TypedArray = /** @type {TypedArrayConstructor} */ (
475
- this._positionView.constructor
476
- );
477
-
478
515
  // Exclude unused space in the position buffer.
479
- const vertices = new TypedArray(
480
- /** @type {ArrayBuffer} */ (this._positionView.buffer),
481
- this._positionView.byteOffset,
482
- this._positionCount * 3,
483
- );
516
+ let vertices = this._positionView.subarray(0, this._positionCount * 3);
517
+
518
+ if (this._positionNormalized) {
519
+ vertices = AttributeCompression.dequantize(
520
+ /** @type {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array} */ (
521
+ vertices
522
+ ),
523
+ this._positionDatatype,
524
+ AttributeType.VEC3,
525
+ this._positionCount,
526
+ );
527
+ }
484
528
 
485
529
  BoundingSphere.fromVertices(
486
530
  vertices,
487
531
  Cartesian3.ZERO,
488
532
  3,
489
- this.boundingVolume,
533
+ this._boundingVolume,
490
534
  );
491
535
  BoundingSphere.transform(
492
- this.boundingVolume,
493
- this.modelMatrix,
494
- this.boundingVolumeWC,
536
+ this._boundingVolume,
537
+ this._modelMatrix,
538
+ this._boundingVolume,
495
539
  );
540
+
496
541
  this._dirtyBoundingVolume = false;
497
542
  }
498
543
 
@@ -623,11 +668,26 @@ class BufferPrimitiveCollection {
623
668
  }
624
669
 
625
670
  /**
626
- * Marks collection bounding volume as 'dirty', to be updated on next render.
671
+ * Marks all primitives 'clean', and updates version counter.
672
+ * @ignore
673
+ */
674
+ _makeClean() {
675
+ if (this._dirtyCount > 0) {
676
+ this._dirtyCount = 0;
677
+ this._dirtyOffset = 0;
678
+ this._version++;
679
+ }
680
+ }
681
+
682
+ /**
683
+ * Marks collection bounding volume as 'dirty', to be updated on next render,
684
+ * if automatic bounding volume updates are enabled.
627
685
  * @ignore
628
686
  */
629
687
  _makeDirtyBoundingVolume() {
630
- this._dirtyBoundingVolume = true;
688
+ if (this._boundingVolumeAutoUpdate) {
689
+ this._dirtyBoundingVolume = true;
690
+ }
631
691
  }
632
692
 
633
693
  /////////////////////////////////////////////////////////////////////////////
@@ -724,23 +784,36 @@ class BufferPrimitiveCollection {
724
784
  }
725
785
 
726
786
  /**
727
- * Local bounding volume for all primitives in the collection, including both
787
+ * World-space bounding volume for all primitives in the collection, including both
728
788
  * shown and hidden primitives.
729
789
  * @type {BoundingSphere}
730
790
  * @readonly
731
791
  */
732
792
  get boundingVolume() {
793
+ if (this._dirtyBoundingVolume) {
794
+ this._updateBoundingVolume();
795
+ }
733
796
  return this._boundingVolume;
734
797
  }
735
798
 
736
799
  /**
737
- * World bounding volume for all primitives in the collection, including both
738
- * shown and hidden primitives.
739
- * @type {BoundingSphere}
800
+ * The component datatype used to store position values.
801
+ * @type {ComponentDatatype}
802
+ * @readonly
803
+ */
804
+ get positionDatatype() {
805
+ return this._positionDatatype;
806
+ }
807
+
808
+ /**
809
+ * When <code>true</code>, integer position values are treated as normalized
810
+ * values, where the full integer range maps to [-1, 1] (signed) or [0, 1]
811
+ * (unsigned).
812
+ * @type {boolean}
740
813
  * @readonly
741
814
  */
742
- get boundingVolumeWC() {
743
- return this._boundingVolumeWC;
815
+ get positionNormalized() {
816
+ return this._positionNormalized;
744
817
  }
745
818
 
746
819
  /////////////////////////////////////////////////////////////////////////////
@@ -3,6 +3,7 @@ import Cartesian2 from "../Core/Cartesian2.js";
3
3
  import Cartesian3 from "../Core/Cartesian3.js";
4
4
  import Cartesian4 from "../Core/Cartesian4.js";
5
5
  import Cartographic from "../Core/Cartographic.js";
6
+ import Check from "../Core/Check.js";
6
7
  import Frozen from "../Core/Frozen.js";
7
8
  import defined from "../Core/defined.js";
8
9
  import DeveloperError from "../Core/DeveloperError.js";
@@ -767,12 +768,12 @@ function updateMembers(camera) {
767
768
  camera._projection.unproject(positionENU, camera._positionCartographic);
768
769
 
769
770
  if (
770
- mode === SceneMode.COLUMBUS_VIEW &&
771
+ (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) &&
771
772
  camera._scene.columbusRepeatWorlds === true
772
773
  ) {
773
- // Columbus repeat worlds: the camera may sit on any world copy, which
774
- // unprojects to a longitude outside [-180°, 180°]; wrap it so
775
- // rectangle containment checks see the equivalent primary point.
774
+ // Repeat worlds: the camera may sit on any world copy, which unprojects
775
+ // to a longitude outside [-180°, 180°]; wrap it so rectangle
776
+ // containment checks see the equivalent primary point.
776
777
  camera._positionCartographic.longitude = CesiumMath.negativePiToPi(
777
778
  camera._positionCartographic.longitude,
778
779
  );
@@ -1387,6 +1388,16 @@ function setView2D(camera, position, hpr, convert) {
1387
1388
 
1388
1389
  Cartesian2.clone(position, camera.position);
1389
1390
 
1391
+ if (camera._scene.columbusRepeatWorlds === true) {
1392
+ // Repeat worlds: keep the destination on the camera's current world copy
1393
+ // instead of snapping the view back to the primary world.
1394
+ camera.position.x = ColumbusWorlds.nearestWorldU(
1395
+ camera.positionWC.y,
1396
+ camera.position.x,
1397
+ camera._projection,
1398
+ );
1399
+ }
1400
+
1390
1401
  const newLeft = -position.z * 0.5;
1391
1402
  const newRight = -newLeft;
1392
1403
 
@@ -2390,7 +2401,7 @@ const scratchLookAtHeadingPitchRangeQuaternion1 = new Quaternion();
2390
2401
  const scratchLookAtHeadingPitchRangeQuaternion2 = new Quaternion();
2391
2402
  const scratchHeadingPitchRangeMatrix3 = new Matrix3();
2392
2403
 
2393
- function offsetFromHeadingPitchRange(heading, pitch, range) {
2404
+ function offsetFromHeadingPitchRange(heading, pitch, range, result) {
2394
2405
  pitch = CesiumMath.clamp(
2395
2406
  pitch,
2396
2407
  -CesiumMath.PI_OVER_TWO,
@@ -2414,10 +2425,7 @@ function offsetFromHeadingPitchRange(heading, pitch, range) {
2414
2425
  scratchHeadingPitchRangeMatrix3,
2415
2426
  );
2416
2427
 
2417
- const offset = Cartesian3.clone(
2418
- Cartesian3.UNIT_X,
2419
- scratchLookAtHeadingPitchRangeOffset,
2420
- );
2428
+ const offset = Cartesian3.clone(Cartesian3.UNIT_X, result);
2421
2429
  Matrix3.multiplyByVector(rotMatrix, offset, offset);
2422
2430
  Cartesian3.negate(offset, offset);
2423
2431
  Cartesian3.multiplyByScalar(offset, range, offset);
@@ -2475,6 +2483,7 @@ Camera.prototype.lookAtTransform = function (transform, offset) {
2475
2483
  offset.heading,
2476
2484
  offset.pitch,
2477
2485
  offset.range,
2486
+ scratchLookAtHeadingPitchRangeOffset,
2478
2487
  );
2479
2488
  } else {
2480
2489
  cartesianOffset = offset;
@@ -2526,6 +2535,72 @@ Camera.prototype.lookAtTransform = function (transform, offset) {
2526
2535
  this._adjustOrthographicFrustum(true);
2527
2536
  };
2528
2537
 
2538
+ const scratchLookAtWorldPositionTransform = new Matrix4();
2539
+ const scratchLookAtWorldPositionDirection = new Cartesian3();
2540
+ const scratchLookAtWorldPositionWorldUp = new Cartesian3();
2541
+ const scratchLookAtWorldPositionRight = new Cartesian3();
2542
+
2543
+ /**
2544
+ * Sets the camera orientation to look at a target position in world coordinates. The camera's up vector will be oriented to the world up vector at the target position.
2545
+ * If the camera is at the target position, the camera will be oriented to the world up vector at the target position.
2546
+ * @param {Cartesian3} target The target position in world coordinates.
2547
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use for determining the world up.
2548
+ */
2549
+ Camera.prototype.lookAtWorldPosition = function (
2550
+ target,
2551
+ ellipsoid = Ellipsoid.default,
2552
+ ) {
2553
+ //>>includeStart('debug', pragmas.debug);
2554
+ Check.typeOf.object("target", target);
2555
+ Check.typeOf.object("ellipsoid", ellipsoid);
2556
+ //>>includeEnd('debug');
2557
+
2558
+ const transform = Matrix4.clone(
2559
+ this._transform,
2560
+ scratchLookAtWorldPositionTransform,
2561
+ );
2562
+
2563
+ this._setTransform(Matrix4.IDENTITY);
2564
+
2565
+ // Get direction to look at target
2566
+ let direction = Cartesian3.subtract(
2567
+ target,
2568
+ this.positionWC,
2569
+ scratchLookAtWorldPositionDirection,
2570
+ );
2571
+
2572
+ // If the camera is at the target position, we can't look at it, but we should still continue to re-orient the camera to the world up vector at the target position.
2573
+ if (Cartesian3.magnitudeSquared(direction) < CesiumMath.EPSILON8) {
2574
+ direction = Cartesian3.clone(
2575
+ this.directionWC,
2576
+ scratchLookAtWorldPositionDirection,
2577
+ );
2578
+ }
2579
+
2580
+ direction = Cartesian3.normalize(direction, this.direction);
2581
+
2582
+ // Orient the camera to the world up vector at the target position
2583
+ const worldUp = ellipsoid.geodeticSurfaceNormal(
2584
+ target,
2585
+ scratchLookAtWorldPositionWorldUp,
2586
+ );
2587
+
2588
+ let right = Cartesian3.cross(
2589
+ direction,
2590
+ worldUp,
2591
+ scratchLookAtWorldPositionRight,
2592
+ );
2593
+ if (Cartesian3.magnitudeSquared(right) < CesiumMath.EPSILON8) {
2594
+ right = Cartesian3.clone(this.rightWC, scratchLookAtWorldPositionRight);
2595
+ }
2596
+ Cartesian3.normalize(right, this.right);
2597
+
2598
+ const up = Cartesian3.cross(right, direction, this.up);
2599
+ Cartesian3.normalize(up, this.up);
2600
+
2601
+ this._setTransform(transform);
2602
+ };
2603
+
2529
2604
  const viewRectangle3DCartographic1 = new Cartographic();
2530
2605
  const viewRectangle3DCartographic2 = new Cartographic();
2531
2606
  const viewRectangle3DNorthEast = new Cartesian3();
@@ -3674,6 +3749,7 @@ Camera.prototype.flyToBoundingSphere = function (boundingSphere, options) {
3674
3749
  offset.heading,
3675
3750
  offset.pitch,
3676
3751
  offset.range,
3752
+ scratchflyToBoundingSphereDestination,
3677
3753
  );
3678
3754
  }
3679
3755