@cesium/engine 24.0.0 → 26.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 (362) hide show
  1. package/Build/Workers/{chunk-6WLHJFD3.js → chunk-3VFEWOBI.js} +59 -32
  2. package/Build/Workers/{chunk-UQU4RXLT.js → chunk-424RNO3D.js} +50 -45
  3. package/Build/Workers/chunk-4MGMYHOO.js +147 -0
  4. package/Build/Workers/{chunk-AMIHNSST.js → chunk-4S7IE3LB.js} +2 -2
  5. package/Build/Workers/{chunk-J6AW5YHS.js → chunk-52JDLOEM.js} +14 -14
  6. package/Build/Workers/{chunk-6RMS4S72.js → chunk-54I6Y66F.js} +6 -6
  7. package/Build/Workers/{chunk-C6P4IG5P.js → chunk-6YEE6JDR.js} +6 -6
  8. package/Build/Workers/{chunk-72VYSVEW.js → chunk-7J2HKPRH.js} +11 -10
  9. package/Build/Workers/{chunk-7O5XJTVE.js → chunk-7WM2PX4V.js} +5 -5
  10. package/Build/Workers/{chunk-5A2SW66E.js → chunk-ACXQXN46.js} +16 -16
  11. package/Build/Workers/{chunk-VLDEUTOP.js → chunk-AYKR4VBR.js} +2 -2
  12. package/Build/Workers/{chunk-YQFTYQMZ.js → chunk-C6J67V5A.js} +3 -2
  13. package/Build/Workers/{chunk-D4EJ2NXG.js → chunk-C6KNZ7T4.js} +17 -17
  14. package/Build/Workers/{chunk-7MDYBRYJ.js → chunk-CFQP6LYM.js} +4 -4
  15. package/Build/Workers/{chunk-YAOZMOFL.js → chunk-CXOYE2WM.js} +5 -5
  16. package/Build/Workers/{chunk-B6SCUUFP.js → chunk-CZEYZU4N.js} +10 -10
  17. package/Build/Workers/{chunk-NPF7SSHZ.js → chunk-DBOEKL43.js} +7 -7
  18. package/Build/Workers/{chunk-44EMEGKW.js → chunk-DDWSZVMY.js} +5 -5
  19. package/Build/Workers/{chunk-7X322WP2.js → chunk-DOBXCNC3.js} +13 -13
  20. package/Build/Workers/{chunk-JCI63T3K.js → chunk-E7VQ76KE.js} +6 -6
  21. package/Build/Workers/{chunk-7TYLCBGK.js → chunk-EBSIOBXY.js} +12 -10
  22. package/Build/Workers/{chunk-GQUNK2XC.js → chunk-EF2QYXGA.js} +14 -14
  23. package/Build/Workers/{chunk-BJD6QGXZ.js → chunk-EPYXRCDB.js} +12 -12
  24. package/Build/Workers/{chunk-63SIWPLS.js → chunk-F6QDY6HU.js} +13 -13
  25. package/Build/Workers/{chunk-XY6HMDGI.js → chunk-FRQZECAO.js} +5 -5
  26. package/Build/Workers/{chunk-VMVOUQ5J.js → chunk-G7PXZRVF.js} +7 -7
  27. package/Build/Workers/{chunk-N65BAKSH.js → chunk-INUEEEQA.js} +8 -8
  28. package/Build/Workers/{chunk-7QRFIKWQ.js → chunk-IRBKFCEJ.js} +2 -2
  29. package/Build/Workers/{chunk-UIGVOKKI.js → chunk-IYOUHCZB.js} +3 -2
  30. package/Build/Workers/{chunk-5GXYJQ2K.js → chunk-J6BWOHUF.js} +3 -3
  31. package/Build/Workers/{chunk-A47HVBC5.js → chunk-KFSTQKNM.js} +7 -7
  32. package/Build/Workers/{chunk-EV3VGO6Y.js → chunk-KKOSKAZB.js} +17 -17
  33. package/Build/Workers/{chunk-6MPGQEHA.js → chunk-KSSWJIZW.js} +2 -2
  34. package/Build/Workers/{chunk-DHKPFLSJ.js → chunk-M3B5JKSM.js} +3 -2
  35. package/Build/Workers/chunk-MPZHGZU6.js +2342 -0
  36. package/Build/Workers/{chunk-YJZGW74L.js → chunk-MYP774IS.js} +2213 -1349
  37. package/Build/Workers/{chunk-LIB2H534.js → chunk-O3EA5HS7.js} +12 -11
  38. package/Build/Workers/{chunk-ILMFADZA.js → chunk-P3CK7MCY.js} +27 -5
  39. package/Build/Workers/chunk-Q3PY526V.js +3201 -0
  40. package/Build/Workers/chunk-QN67VG36.js +973 -0
  41. package/Build/Workers/{chunk-XJRBB253.js → chunk-QRWGUWI6.js} +11 -11
  42. package/Build/Workers/{chunk-AF3MU2RL.js → chunk-S4MCOY6I.js} +7 -6
  43. package/Build/Workers/{chunk-Y7HNNPNK.js → chunk-SMQZZOW6.js} +10 -10
  44. package/Build/Workers/{chunk-PVV64VFW.js → chunk-TKKIREQ6.js} +3 -2
  45. package/Build/Workers/{chunk-MKM27KGV.js → chunk-U3ZA64U7.js} +2 -2
  46. package/Build/Workers/{chunk-2N4KDHS3.js → chunk-UA25D5MX.js} +12 -11
  47. package/Build/Workers/{chunk-RQNJD3O4.js → chunk-UOOIQ3KX.js} +12 -12
  48. package/Build/Workers/{chunk-GOQBUCXH.js → chunk-V7VQKN6N.js} +709 -431
  49. package/Build/Workers/{chunk-LXMCPFFS.js → chunk-VQYETPWC.js} +4 -4
  50. package/Build/Workers/{chunk-NKT5K3K3.js → chunk-VWV2IJRB.js} +13 -12
  51. package/Build/Workers/chunk-XZMBNNDX.js +1287 -0
  52. package/Build/Workers/{chunk-ISY4EZCA.js → chunk-Y57HREW5.js} +4 -4
  53. package/Build/Workers/{chunk-EDXL4W76.js → chunk-Y5BF6AFU.js} +2 -2
  54. package/Build/Workers/{chunk-Q3C6VQH6.js → chunk-YLY7NKAB.js} +4 -4
  55. package/Build/Workers/{chunk-4TIG36AW.js → chunk-ZK3CF7ZD.js} +12 -12
  56. package/Build/Workers/{chunk-AJLTU6PF.js → chunk-ZP7JMQV4.js} +4 -1
  57. package/Build/Workers/{chunk-HXJMS2ZI.js → chunk-ZZ46LWL6.js} +1 -1
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +175 -118
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +24 -23
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +24 -24
  100. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +10 -10
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +12 -9
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/ArcType.js +6 -1
  112. package/Source/Core/ArticulationStageType.js +5 -1
  113. package/Source/Core/AssociativeArray.js +100 -94
  114. package/Source/Core/BoundingSphere.js +1296 -1300
  115. package/Source/Core/Cartesian2.js +1 -1
  116. package/Source/Core/Cartesian3.js +2 -3
  117. package/Source/Core/Cartesian4.js +1 -1
  118. package/Source/Core/Cartographic.js +257 -249
  119. package/Source/Core/ClockRange.js +6 -1
  120. package/Source/Core/ClockStep.js +6 -1
  121. package/Source/Core/Color.js +844 -835
  122. package/Source/Core/ComponentDatatype.js +39 -1
  123. package/Source/Core/CornerType.js +6 -1
  124. package/Source/Core/Credit.js +121 -124
  125. package/Source/Core/Ellipsoid.js +637 -660
  126. package/Source/Core/ExtrapolationType.js +6 -1
  127. package/Source/Core/GeocodeType.js +6 -1
  128. package/Source/Core/GeographicProjection.js +74 -74
  129. package/Source/Core/GeographicTilingScheme.js +179 -198
  130. package/Source/Core/GeometryOffsetAttribute.js +7 -1
  131. package/Source/Core/GeometryType.js +7 -1
  132. package/Source/Core/HeightmapEncoding.js +6 -1
  133. package/Source/Core/Iau2006XysData.js +24 -13
  134. package/Source/Core/IndexDatatype.js +3 -1
  135. package/Source/Core/InterpolationType.js +5 -1
  136. package/Source/Core/Intersect.js +6 -1
  137. package/Source/Core/Ion.js +1 -1
  138. package/Source/Core/IonGeocodeProviderType.js +5 -1
  139. package/Source/Core/JulianDate.js +850 -848
  140. package/Source/Core/KeyboardEventModifier.js +6 -1
  141. package/Source/Core/MapProjection.js +40 -44
  142. package/Source/Core/Matrix2.js +906 -893
  143. package/Source/Core/Matrix3.js +1643 -1575
  144. package/Source/Core/Matrix4.js +2903 -2872
  145. package/Source/Core/PixelFormat.js +3 -1
  146. package/Source/Core/PrimitiveType.js +11 -1
  147. package/Source/Core/Ray.js +62 -60
  148. package/Source/Core/Rectangle.js +913 -904
  149. package/Source/Core/ReferenceFrame.js +6 -1
  150. package/Source/Core/RequestScheduler.js +8 -3
  151. package/Source/Core/RequestState.js +6 -1
  152. package/Source/Core/RequestType.js +6 -1
  153. package/Source/Core/Resource.js +1 -1
  154. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  155. package/Source/Core/ScreenSpaceEventType.js +6 -1
  156. package/Source/Core/TerrainQuantization.js +6 -1
  157. package/Source/Core/TilingScheme.js +100 -98
  158. package/Source/Core/TimeConstants.js +6 -1
  159. package/Source/Core/TimeStandard.js +6 -1
  160. package/Source/Core/TrackingReferenceFrame.js +6 -1
  161. package/Source/Core/Visibility.js +6 -1
  162. package/Source/Core/VulkanConstants.js +6 -1
  163. package/Source/Core/WebGLConstants.js +6 -1
  164. package/Source/Core/WebMercatorProjection.js +108 -109
  165. package/Source/Core/WebMercatorTilingScheme.js +246 -242
  166. package/Source/Core/WindingOrder.js +3 -1
  167. package/Source/Core/createColorRamp.js +37 -0
  168. package/Source/Core/globalTypes.js +25 -0
  169. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +1 -0
  170. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +1 -0
  171. package/Source/DataSources/StripeOrientation.js +6 -1
  172. package/Source/Renderer/BufferUsage.js +20 -9
  173. package/Source/Renderer/Context.js +2 -29
  174. package/Source/Renderer/DrawCommand.js +435 -403
  175. package/Source/Renderer/MipmapHint.js +5 -1
  176. package/Source/Renderer/Pass.js +10 -3
  177. package/Source/Renderer/PickId.js +44 -0
  178. package/Source/Renderer/PixelDatatype.js +3 -1
  179. package/Source/Renderer/RenderbufferFormat.js +5 -1
  180. package/Source/Renderer/ShaderDestination.js +4 -1
  181. package/Source/Renderer/TextureMagnificationFilter.js +3 -1
  182. package/Source/Renderer/TextureMinificationFilter.js +3 -1
  183. package/Source/Renderer/TextureWrap.js +5 -1
  184. package/Source/Renderer/createUniform.js +346 -239
  185. package/Source/Renderer/createUniformArray.js +494 -381
  186. package/Source/Scene/AlphaMode.js +5 -1
  187. package/Source/Scene/ArcGisBaseMapType.js +6 -1
  188. package/Source/Scene/ArcGisMapService.js +1 -1
  189. package/Source/Scene/AttributeType.js +3 -1
  190. package/Source/Scene/Axis.js +3 -1
  191. package/Source/Scene/BingMapsStyle.js +6 -1
  192. package/Source/Scene/BlendEquation.js +6 -1
  193. package/Source/Scene/BlendFunction.js +6 -1
  194. package/Source/Scene/BlendOption.js +6 -1
  195. package/Source/Scene/BlendingState.js +6 -1
  196. package/Source/Scene/BufferLoader.js +0 -2
  197. package/Source/Scene/BufferPoint.js +1 -0
  198. package/Source/Scene/BufferPointCollection.js +17 -1
  199. package/Source/Scene/BufferPolygon.js +3 -2
  200. package/Source/Scene/BufferPolygonCollection.js +13 -1
  201. package/Source/Scene/BufferPolyline.js +1 -0
  202. package/Source/Scene/BufferPolylineCollection.js +5 -1
  203. package/Source/Scene/BufferPrimitiveCollection.js +210 -43
  204. package/Source/Scene/CameraEventAggregator.js +30 -18
  205. package/Source/Scene/CameraEventType.js +6 -1
  206. package/Source/Scene/Cesium3DTile.js +54 -1
  207. package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
  208. package/Source/Scene/Cesium3DTileContent.js +195 -254
  209. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  210. package/Source/Scene/Cesium3DTileContentState.js +6 -1
  211. package/Source/Scene/Cesium3DTileContentType.js +3 -1
  212. package/Source/Scene/Cesium3DTileFeature.js +289 -306
  213. package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
  214. package/Source/Scene/Cesium3DTilePass.js +5 -1
  215. package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
  216. package/Source/Scene/Cesium3DTileRefine.js +6 -1
  217. package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
  218. package/Source/Scene/Cesium3DTileset.js +46 -6
  219. package/Source/Scene/ClassificationType.js +3 -1
  220. package/Source/Scene/CloudType.js +3 -1
  221. package/Source/Scene/ColorBlendMode.js +4 -1
  222. package/Source/Scene/Composite3DTileContent.js +254 -292
  223. package/Source/Scene/CullFace.js +6 -1
  224. package/Source/Scene/DepthFunction.js +6 -1
  225. package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
  226. package/Source/Scene/EdgeDisplayMode.js +50 -0
  227. package/Source/Scene/Empty3DTileContent.js +100 -132
  228. package/Source/Scene/EquirectangularPanorama.js +1 -0
  229. package/Source/Scene/ExpressionNodeType.js +6 -1
  230. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  231. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  232. package/Source/Scene/Geometry3DTileContent.js +151 -185
  233. package/Source/Scene/GltfBufferViewLoader.js +0 -2
  234. package/Source/Scene/GltfDracoLoader.js +0 -2
  235. package/Source/Scene/GltfImageLoader.js +0 -3
  236. package/Source/Scene/GltfIndexBufferLoader.js +0 -4
  237. package/Source/Scene/GltfJsonLoader.js +0 -2
  238. package/Source/Scene/GltfLoader.js +109 -5
  239. package/Source/Scene/GltfLoaderUtil.js +14 -0
  240. package/Source/Scene/GltfSpzLoader.js +0 -2
  241. package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
  242. package/Source/Scene/GltfTextureLoader.js +0 -2
  243. package/Source/Scene/GltfVertexBufferLoader.js +0 -4
  244. package/Source/Scene/HeightReference.js +5 -1
  245. package/Source/Scene/HorizontalOrigin.js +6 -1
  246. package/Source/Scene/ImageryProvider.js +1 -1
  247. package/Source/Scene/ImageryState.js +6 -1
  248. package/Source/Scene/Implicit3DTileContent.js +179 -214
  249. package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
  250. package/Source/Scene/InstanceAttributeSemantic.js +3 -1
  251. package/Source/Scene/IonWorldImageryStyle.js +6 -1
  252. package/Source/Scene/JobType.js +6 -1
  253. package/Source/Scene/LabelStyle.js +6 -1
  254. package/Source/Scene/MVTDataProvider.js +147 -0
  255. package/Source/Scene/MapMode2D.js +6 -1
  256. package/Source/Scene/MetadataComponentType.js +3 -1
  257. package/Source/Scene/MetadataSchemaLoader.js +0 -2
  258. package/Source/Scene/MetadataSemantic.js +6 -2
  259. package/Source/Scene/MetadataType.js +3 -1
  260. package/Source/Scene/Model/B3dmLoader.js +0 -3
  261. package/Source/Scene/Model/CustomShaderMode.js +3 -1
  262. package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
  263. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +78 -337
  264. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
  265. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
  266. package/Source/Scene/Model/GeoJsonLoader.js +0 -2
  267. package/Source/Scene/Model/I3dmLoader.js +0 -3
  268. package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
  269. package/Source/Scene/Model/LightingModel.js +5 -1
  270. package/Source/Scene/Model/MaterialPipelineStage.js +184 -3
  271. package/Source/Scene/Model/Model.js +34 -0
  272. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  273. package/Source/Scene/Model/ModelDrawCommand.js +31 -3
  274. package/Source/Scene/Model/ModelReader.js +474 -3
  275. package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
  276. package/Source/Scene/Model/ModelType.js +3 -1
  277. package/Source/Scene/Model/ModelUtility.js +4 -0
  278. package/Source/Scene/Model/PntsLoader.js +4 -3
  279. package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
  280. package/Source/Scene/Model/UniformType.js +5 -1
  281. package/Source/Scene/Model/VaryingType.js +5 -1
  282. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +500 -139
  283. package/Source/Scene/Model/pickModel.js +94 -299
  284. package/Source/Scene/ModelAnimationLoop.js +6 -1
  285. package/Source/Scene/ModelAnimationState.js +6 -1
  286. package/Source/Scene/ModelComponents.js +47 -2
  287. package/Source/Scene/Multiple3DTileContent.js +291 -334
  288. package/Source/Scene/PrimitiveState.js +7 -1
  289. package/Source/Scene/QuadtreeOccluders.js +20 -15
  290. package/Source/Scene/QuadtreeTile.js +547 -541
  291. package/Source/Scene/QuadtreeTileLoadState.js +6 -1
  292. package/Source/Scene/QuadtreeTileProvider.js +159 -175
  293. package/Source/Scene/ResourceLoader.js +0 -1
  294. package/Source/Scene/ResourceLoaderState.js +7 -1
  295. package/Source/Scene/Scene.js +26 -0
  296. package/Source/Scene/SceneMode.js +4 -1
  297. package/Source/Scene/ShadowMode.js +3 -1
  298. package/Source/Scene/SkyBox.js +1 -1
  299. package/Source/Scene/SplitDirection.js +6 -1
  300. package/Source/Scene/StencilFunction.js +6 -1
  301. package/Source/Scene/StencilOperation.js +6 -1
  302. package/Source/Scene/TerrainState.js +7 -1
  303. package/Source/Scene/TileState.js +7 -1
  304. package/Source/Scene/Tileset3DTileContent.js +113 -146
  305. package/Source/Scene/Tonemapper.js +5 -1
  306. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +499 -0
  307. package/Source/Scene/Vector3DTileContent.js +205 -234
  308. package/Source/Scene/VectorGltf3DTileContent.js +131 -61
  309. package/Source/Scene/VertexAttributeSemantic.js +3 -1
  310. package/Source/Scene/VerticalOrigin.js +6 -1
  311. package/Source/Scene/VoxelBoxShape.js +12 -6
  312. package/Source/Scene/VoxelContent.js +2 -0
  313. package/Source/Scene/VoxelCylinderShape.js +39 -38
  314. package/Source/Scene/VoxelEllipsoidShape.js +46 -96
  315. package/Source/Scene/VoxelMetadataOrder.js +6 -1
  316. package/Source/Scene/VoxelPrimitive.js +159 -175
  317. package/Source/Scene/VoxelProvider.js +64 -90
  318. package/Source/Scene/VoxelShapeType.js +3 -1
  319. package/Source/Scene/buildVectorGltfFromMVT.js +1059 -0
  320. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  321. package/Source/Scene/decodeMVT.js +634 -0
  322. package/Source/Scene/renderBufferPointCollection.js +124 -127
  323. package/Source/Scene/renderBufferPolygonCollection.js +122 -122
  324. package/Source/Scene/renderBufferPolylineCollection.js +386 -238
  325. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  326. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  327. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  328. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  329. package/Source/Shaders/BufferPolygonMaterialVS.glsl +13 -4
  330. package/Source/Shaders/BufferPolygonMaterialVS.js +14 -5
  331. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  332. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  333. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  334. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  335. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  336. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  337. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  338. package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
  339. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  340. package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
  341. package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
  342. package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
  343. package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
  344. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  345. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  346. package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
  347. package/Source/Shaders/Model/MaterialStageFS.js +46 -20
  348. package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
  349. package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
  350. package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
  351. package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
  352. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
  353. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
  354. package/Source/Widget/CesiumWidget.js +11 -4
  355. package/index.d.ts +595 -343
  356. package/index.js +392 -378
  357. package/package.json +3 -3
  358. package/Build/Workers/chunk-DVB56LG7.js +0 -114
  359. package/Build/Workers/chunk-HKUES6UG.js +0 -2357
  360. package/Build/Workers/chunk-HRHRYFHS.js +0 -940
  361. package/Build/Workers/chunk-KLPGTXS3.js +0 -642
  362. package/Build/Workers/chunk-ZBZRTRJB.js +0 -1829
@@ -10,7 +10,6 @@ import BufferPolyline from "./BufferPolyline.js";
10
10
  import BufferPolylineCollection from "./BufferPolylineCollection.js";
11
11
  import BufferPolylineMaterial from "./BufferPolylineMaterial.js";
12
12
  import Cesium3DTileStyle from "./Cesium3DTileStyle.js";
13
- import Color from "../Core/Color.js";
14
13
  import Matrix4 from "../Core/Matrix4.js";
15
14
  import Model from "./Model/Model.js";
16
15
  import ModelUtility from "./Model/ModelUtility.js";
@@ -18,6 +17,7 @@ import Pass from "../Renderer/Pass.js";
18
17
  import createVectorTileBuffersFromModelComponents from "./Model/createVectorTileBuffersFromModelComponents.js";
19
18
  import defined from "../Core/defined.js";
20
19
  import destroyObject from "../Core/destroyObject.js";
20
+ import DeveloperError from "../Core/DeveloperError.js";
21
21
 
22
22
  /** @import BufferPrimitive from "./BufferPrimitive.js"; */
23
23
  /** @import BufferPrimitiveCollection from "./BufferPrimitiveCollection.js"; */
@@ -25,8 +25,9 @@ import destroyObject from "../Core/destroyObject.js";
25
25
  /** @import Cesium3DContentGroup from "./Cesium3DContentGroup.js"; */
26
26
  /** @import Cesium3DTile from "./Cesium3DTile.js"; */
27
27
  /** @import Cesium3DTileBatchTable from "./Cesium3DTileBatchTable.js"; */
28
- /** @import Cesium3DTileFeature from "./Cesium3DTileFeature.js"; */
28
+ /** @import Cesium3DTileVectorFeature from "./Cesium3DTileVectorFeature.js";*/
29
29
  /** @import Cesium3DTileset from "./Cesium3DTileset.js"; */
30
+ /** @import Color from "../Core/Color.js"; */
30
31
  /** @import FrameState from "./FrameState.js"; */
31
32
  /** @import ImplicitMetadataView from "./ImplicitMetadataView.js"; */
32
33
  /** @import Ray from "../Core/Ray.js"; */
@@ -70,14 +71,33 @@ class VectorGltf3DTileContent {
70
71
  this._resource = resource;
71
72
 
72
73
  /** @type {Model} */
73
- this._decodeModel = undefined;
74
+ this._model = undefined;
74
75
 
75
- /** @type {Array<BufferPrimitiveCollection<BufferPrimitive>>} */
76
+ /**
77
+ * List of all vector primitive collections.
78
+ * @type {Array<BufferPrimitiveCollection<BufferPrimitive>>}
79
+ */
76
80
  this._collections = [];
77
81
 
78
- /** @type {Array<Matrix4>} */
82
+ /**
83
+ * List of transform matrices for each collection; order matches 'collections'.
84
+ * @type {Array<Matrix4>}
85
+ */
79
86
  this._collectionLocalMatrices = [];
80
87
 
88
+ /**
89
+ * Maps vector primitive collection -> propertyTableId.
90
+ * @type {Map<BufferPrimitiveCollection<BufferPrimitive>, number>}
91
+ */
92
+ this._collectionFeatureTableIds = new Map();
93
+
94
+ /**
95
+ * Maps propertyTableId -> featureId -> feature. Note that Feature IDs are
96
+ * unique within their assigned property table, but not globally unique.
97
+ * @type {Map<number, Map<number, Cesium3DTileVectorFeature>>}
98
+ */
99
+ this._featuresByTableId = new Map();
100
+
81
101
  /** @type {ImplicitMetadataView} */
82
102
  this._metadata = undefined;
83
103
  /** @type {Cesium3DContentGroup} */
@@ -94,25 +114,27 @@ class VectorGltf3DTileContent {
94
114
  }
95
115
 
96
116
  get featuresLength() {
97
- return this._collections.reduce((totalCount, collection) => {
98
- return totalCount + collection.primitiveCount;
99
- }, 0);
117
+ return this.batchTables.reduce(
118
+ (acc, batchTable) => acc + batchTable.featuresLength,
119
+ 0,
120
+ );
100
121
  }
101
122
 
102
123
  get pointsLength() {
103
124
  return this._collections
104
125
  .filter((collection) => collection instanceof BufferPointCollection)
105
- .reduce((totalPoints, collection) => {
106
- return totalPoints + collection.primitiveCount;
107
- }, 0);
126
+ .reduce((acc, collection) => acc + collection.primitiveCount, 0);
108
127
  }
109
128
 
110
129
  get trianglesLength() {
111
- return this._collections
112
- .filter((collection) => collection instanceof BufferPolygonCollection)
113
- .reduce((totalPoints, collection) => {
114
- return totalPoints + collection.triangleCount;
115
- }, 0);
130
+ return this._collections.reduce((acc, collection) => {
131
+ if (collection instanceof BufferPolygonCollection) {
132
+ return acc + collection.triangleCount;
133
+ } else if (collection instanceof BufferPolylineCollection) {
134
+ return acc + (collection.vertexCount - collection.primitiveCount) * 2;
135
+ }
136
+ return acc;
137
+ }, 0);
116
138
  }
117
139
 
118
140
  get geometryByteLength() {
@@ -126,7 +148,11 @@ class VectorGltf3DTileContent {
126
148
  }
127
149
 
128
150
  get batchTableByteLength() {
129
- return 0;
151
+ return this.batchTables.reduce(
152
+ // @ts-expect-error Missing types.
153
+ (acc, batchTable) => acc + batchTable.batchTableByteLength,
154
+ 0,
155
+ );
130
156
  }
131
157
 
132
158
  /** @returns {undefined} */
@@ -150,9 +176,17 @@ class VectorGltf3DTileContent {
150
176
  return this._resource.getUrlComponent(true);
151
177
  }
152
178
 
153
- /** @type {Cesium3DTileBatchTable} */
179
+ /** @type {Cesium3DTileBatchTable[]} */
180
+ get batchTables() {
181
+ return this._model._featureTables;
182
+ }
183
+
184
+ /**
185
+ * @type {Cesium3DTileBatchTable}
186
+ * @deprecated See {@link batchTables}.
187
+ */
154
188
  get batchTable() {
155
- return undefined;
189
+ throw new DeveloperError("Deprecated: Use `content.batchTables`.");
156
190
  }
157
191
 
158
192
  /** @type {ImplicitMetadataView} */
@@ -174,20 +208,23 @@ class VectorGltf3DTileContent {
174
208
  }
175
209
 
176
210
  /**
177
- * @param {number} _featureId
178
- * @returns {Cesium3DTileFeature}
211
+ * @param {number} featureId
212
+ * @param {number} [featureTableId]
213
+ * @returns {Cesium3DTileVectorFeature}
179
214
  */
180
- getFeature(_featureId) {
181
- return undefined;
215
+ getFeature(featureId, featureTableId) {
216
+ return this._featuresByTableId.get(featureTableId)?.get(featureId);
182
217
  }
183
218
 
184
219
  /**
185
- * @param {number} _featureId
186
- * @param {string} _name
220
+ * @param {number} featureId
221
+ * @param {string} name
222
+ * @param {number} [featureTableId]
187
223
  * @returns {boolean}
188
224
  */
189
- hasProperty(_featureId, _name) {
190
- return false;
225
+ hasProperty(featureId, name, featureTableId) {
226
+ const feature = this.getFeature(featureId, featureTableId);
227
+ return feature ? feature.hasProperty(name) : false;
191
228
  }
192
229
 
193
230
  /**
@@ -195,17 +232,16 @@ class VectorGltf3DTileContent {
195
232
  * @param {Color} color
196
233
  */
197
234
  applyDebugSettings(enabled, color) {
198
- color = enabled ? color : Color.WHITE;
199
- this.applyStyle(new Cesium3DTileStyle({ color }));
235
+ const colorString = enabled
236
+ ? `color("${color.toCssHexString()}", 1.0)`
237
+ : 'color("white", 1.0)';
238
+ this.applyStyle(new Cesium3DTileStyle({ color: colorString }));
200
239
  }
201
240
 
202
241
  /**
203
242
  * @param {*} style
204
243
  */
205
244
  applyStyle(style) {
206
- const show = style.show?.evaluate(null) ?? true;
207
- const color = style.color?.evaluate(null, new Color());
208
-
209
245
  const isPointCollection = /** @param {unknown} c */ (c) =>
210
246
  c instanceof BufferPointCollection;
211
247
  const isPolylineCollection = /** @param {unknown} c */ (c) =>
@@ -213,33 +249,66 @@ class VectorGltf3DTileContent {
213
249
  const isPolygonCollection = /** @param {unknown} c */ (c) =>
214
250
  c instanceof BufferPolygonCollection;
215
251
 
216
- Color.clone(color, pointMaterial.color);
217
- pointMaterial.size = style.pointSize?.evaluate(null);
218
- pointMaterial.outlineWidth = style.pointOutlineWidth?.evaluate(null);
219
- style.pointOutlineColor?.evaluate(null, pointMaterial.outlineColor);
220
252
  for (const collection of this._collections.filter(isPointCollection)) {
253
+ const featureTableId = this._collectionFeatureTableIds.get(collection);
221
254
  for (let i = 0, il = collection.primitiveCount; i < il; i++) {
222
255
  collection.get(i, point);
223
- point.show = show;
256
+ const feature = this.getFeature(point.featureId, featureTableId);
257
+
258
+ if (defined(style.show)) {
259
+ point.show = style.show.evaluate(feature);
260
+ }
261
+ if (defined(style.color)) {
262
+ style.color.evaluate(feature, pointMaterial.color);
263
+ }
264
+ if (defined(style.pointSize)) {
265
+ pointMaterial.size = style.pointSize.evaluate(feature);
266
+ }
267
+ if (defined(style.pointOutlineWidth)) {
268
+ pointMaterial.outlineWidth =
269
+ style.pointOutlineWidth.evaluate(feature);
270
+ }
271
+ if (defined(style.pointOutlineColor)) {
272
+ style.pointOutlineColor.evaluate(feature, pointMaterial.outlineColor);
273
+ }
274
+
224
275
  point.setMaterial(pointMaterial);
225
276
  }
226
277
  }
227
278
 
228
- Color.clone(color, polylineMaterial.color);
229
- polylineMaterial.width = style.lineWidth?.evaluate(null) ?? 1;
230
279
  for (const collection of this._collections.filter(isPolylineCollection)) {
280
+ const featureTableId = this._collectionFeatureTableIds.get(collection);
231
281
  for (let i = 0, il = collection.primitiveCount; i < il; i++) {
232
282
  collection.get(i, polyline);
233
- polyline.show = show;
283
+ const feature = this.getFeature(polyline.featureId, featureTableId);
284
+
285
+ if (defined(style.show)) {
286
+ polyline.show = style.show.evaluate(feature);
287
+ }
288
+ if (defined(style.color)) {
289
+ style.color.evaluate(feature, polylineMaterial.color);
290
+ }
291
+ if (defined(style.lineWidth)) {
292
+ polylineMaterial.width = style.lineWidth.evaluate(feature);
293
+ }
294
+
234
295
  polyline.setMaterial(polylineMaterial);
235
296
  }
236
297
  }
237
298
 
238
- Color.clone(color, polygonMaterial.color);
239
299
  for (const collection of this._collections.filter(isPolygonCollection)) {
300
+ const featureTableId = this._collectionFeatureTableIds.get(collection);
240
301
  for (let i = 0, il = collection.primitiveCount; i < il; i++) {
241
302
  collection.get(i, polygon);
242
- polygon.show = show;
303
+ const feature = this.getFeature(polygon.featureId, featureTableId);
304
+
305
+ if (defined(style.show)) {
306
+ polygon.show = style.show.evaluate(feature);
307
+ }
308
+ if (defined(style.color)) {
309
+ style.color.evaluate(feature, polygonMaterial.color);
310
+ }
311
+
243
312
  polygon.setMaterial(polygonMaterial);
244
313
  }
245
314
  }
@@ -250,18 +319,14 @@ class VectorGltf3DTileContent {
250
319
  * @param {FrameState} frameState
251
320
  */
252
321
  update(_tileset, frameState) {
253
- if (defined(this._decodeModel) && !this._ready) {
254
- const model = this._decodeModel;
322
+ if (defined(this._model) && !this._ready) {
323
+ const model = this._model;
255
324
  model.modelMatrix = this._tile.computedTransform;
256
325
  model.update(frameState);
257
326
 
258
327
  // @ts-expect-error Requires Model conversion to ES6 class.
259
328
  if (model.ready) {
260
329
  initializeVectorPrimitives(this);
261
- if (this._decodeModel) {
262
- this._decodeModel.destroy();
263
- this._decodeModel = undefined;
264
- }
265
330
  this._ready = true;
266
331
  }
267
332
  }
@@ -297,8 +362,8 @@ class VectorGltf3DTileContent {
297
362
  }
298
363
 
299
364
  destroy() {
300
- this._decodeModel?.destroy();
301
- this._decodeModel = undefined;
365
+ this._model?.destroy();
366
+ this._model = undefined;
302
367
  this._collections.forEach((collection) => collection.destroy());
303
368
  this._collections.length = 0;
304
369
  return destroyObject(this);
@@ -308,16 +373,16 @@ class VectorGltf3DTileContent {
308
373
  * @param {Cesium3DTileset} tileset
309
374
  * @param {Cesium3DTile} tile
310
375
  * @param {Resource} resource
311
- * @param {unknown} gltf
376
+ * @param {Uint8Array} glb GLB binary produced by buildVectorGltfFromMVT
312
377
  * @returns {Promise<VectorGltf3DTileContent>}
313
378
  */
314
- static async fromGltf(tileset, tile, resource, gltf) {
379
+ static async fromGltf(tileset, tile, resource, glb) {
315
380
  const content = new VectorGltf3DTileContent(tileset, tile, resource);
316
- const modelOptions = makeDecodeModelOptions(tileset, tile, content, gltf);
317
- const decodeModel = await Model.fromGltfAsync(modelOptions);
381
+ const modelOptions = makeModelOptions(tileset, tile, content, glb);
382
+ const model = await Model.fromGltfAsync(modelOptions);
318
383
  // @ts-expect-error Requires Model conversion to ES6 class.
319
- decodeModel.show = false;
320
- content._decodeModel = decodeModel;
384
+ model.show = false;
385
+ content._model = model;
321
386
  return content;
322
387
  }
323
388
  }
@@ -326,13 +391,13 @@ class VectorGltf3DTileContent {
326
391
  * @param {Cesium3DTileset} tileset
327
392
  * @param {Cesium3DTile} tile
328
393
  * @param {VectorGltf3DTileContent} content
329
- * @param {unknown} gltf
394
+ * @param {Uint8Array} glb
330
395
  * @returns {*}
331
396
  * @ignore
332
397
  */
333
- function makeDecodeModelOptions(tileset, tile, content, gltf) {
398
+ function makeModelOptions(tileset, tile, content, glb) {
334
399
  return {
335
- gltf: gltf,
400
+ gltf: glb,
336
401
  basePath: content._resource,
337
402
  cull: false,
338
403
  releaseGltfJson: true,
@@ -359,7 +424,7 @@ function makeDecodeModelOptions(tileset, tile, content, gltf) {
359
424
  */
360
425
  function initializeVectorPrimitives(content) {
361
426
  // @ts-expect-error Requires Model conversion to ES6 class.
362
- const components = content._decodeModel.sceneGraph.components;
427
+ const components = content._model.sceneGraph.components;
363
428
 
364
429
  const axisCorrection = ModelUtility.getAxisCorrectionMatrix(
365
430
  components.upAxis,
@@ -373,10 +438,15 @@ function initializeVectorPrimitives(content) {
373
438
  content._modelMatrix,
374
439
  );
375
440
 
376
- const result = createVectorTileBuffersFromModelComponents(this, components);
441
+ const result = createVectorTileBuffersFromModelComponents(
442
+ content,
443
+ components,
444
+ );
377
445
 
378
446
  content._collections = result.collections;
379
447
  content._collectionLocalMatrices = result.collectionLocalMatrices;
448
+ content._collectionFeatureTableIds = result.collectionFeatureTableIds;
449
+ content._featuresByTableId = result.featuresByTableId;
380
450
  }
381
451
 
382
452
  export default VectorGltf3DTileContent;
@@ -316,4 +316,6 @@ VertexAttributeSemantic.getVariableName = function (semantic, setIndex) {
316
316
  return variableName;
317
317
  };
318
318
 
319
- export default Object.freeze(VertexAttributeSemantic);
319
+ Object.freeze(VertexAttributeSemantic);
320
+
321
+ export default VertexAttributeSemantic;
@@ -1,3 +1,5 @@
1
+ // @ts-check
2
+
1
3
  /**
2
4
  * The vertical location of an origin relative to an object, e.g., a {@link Billboard}
3
5
  * or {@link Label}. For example, setting the vertical origin to <code>TOP</code>
@@ -46,4 +48,7 @@ const VerticalOrigin = {
46
48
  */
47
49
  TOP: -1,
48
50
  };
49
- export default Object.freeze(VerticalOrigin);
51
+
52
+ Object.freeze(VerticalOrigin);
53
+
54
+ export default VerticalOrigin;
@@ -76,10 +76,16 @@ function VoxelBoxShape() {
76
76
 
77
77
  this._renderBoundPlanes = new VoxelBoundsCollection({ planes: boundPlanes });
78
78
 
79
+ /**
80
+ * UV space transformation translation (JS-only, not a shader uniform)
81
+ * @type {Cartesian3}
82
+ * @private
83
+ */
84
+ this._localToShapeUvTranslate = new Cartesian3();
85
+
79
86
  this._shaderUniforms = {
80
87
  boxEcToXyz: new Matrix3(),
81
88
  boxLocalToShapeUvScale: new Cartesian3(),
82
- boxLocalToShapeUvTranslate: new Cartesian3(),
83
89
  };
84
90
 
85
91
  this._shaderDefines = {
@@ -321,13 +327,13 @@ VoxelBoxShape.prototype.update = function (
321
327
  boundScale(min.z, max.z),
322
328
  shaderUniforms.boxLocalToShapeUvScale,
323
329
  );
324
- shaderUniforms.boxLocalToShapeUvTranslate = Cartesian3.negate(
330
+ this._localToShapeUvTranslate = Cartesian3.negate(
325
331
  Cartesian3.multiplyComponents(
326
332
  boxLocalToShapeUvScale,
327
333
  min,
328
- shaderUniforms.boxLocalToShapeUvTranslate,
334
+ this._localToShapeUvTranslate,
329
335
  ),
330
- shaderUniforms.boxLocalToShapeUvTranslate,
336
+ this._localToShapeUvTranslate,
331
337
  );
332
338
 
333
339
  this._shaderMaximumIntersectionsLength = intersectionCount;
@@ -381,8 +387,8 @@ VoxelBoxShape.prototype.convertLocalToShapeUvSpace = function (
381
387
  Check.typeOf.object("result", result);
382
388
  //>>includeEnd('debug');
383
389
 
384
- const { boxLocalToShapeUvScale, boxLocalToShapeUvTranslate } =
385
- this._shaderUniforms;
390
+ const { boxLocalToShapeUvScale } = this._shaderUniforms;
391
+ const boxLocalToShapeUvTranslate = this._localToShapeUvTranslate;
386
392
 
387
393
  return Cartesian3.add(
388
394
  Cartesian3.multiplyComponents(
@@ -66,6 +66,8 @@ Object.defineProperties(VoxelContent.prototype, {
66
66
  * The metadata for this voxel content.
67
67
  * The metadata is an array of typed arrays, one for each field.
68
68
  * The data for one field is a flattened 3D array ordered by X, then Y, then Z.
69
+ *
70
+ * @memberof VoxelContent.prototype
69
71
  * @type {Int8Array[]|Uint8Array[]|Int16Array[]|Uint16Array[]|Int32Array[]|Uint32Array[]|Float32Array[]|Float64Array[]}
70
72
  * @readonly
71
73
  */
@@ -54,14 +54,20 @@ function VoxelCylinderShape() {
54
54
 
55
55
  this._renderBoundPlanes = new VoxelBoundsCollection({ planes: boundPlanes });
56
56
 
57
+ /**
58
+ * UV space transformation translations (JS-only, not shader uniforms)
59
+ * Components: [radius, angle, height] translation
60
+ * @type {Cartesian3}
61
+ * @private
62
+ */
63
+ this._localToShapeUvTranslate = new Cartesian3();
64
+
57
65
  this._shaderUniforms = {
58
66
  cameraShapePosition: new Cartesian3(),
59
67
  cylinderEcToRadialTangentUp: new Matrix3(),
60
68
  cylinderRenderRadiusMinMax: new Cartesian2(),
61
69
  cylinderRenderAngleMinMax: new Cartesian2(),
62
- cylinderLocalToShapeUvRadius: new Cartesian2(),
63
- cylinderLocalToShapeUvAngle: new Cartesian2(),
64
- cylinderLocalToShapeUvHeight: new Cartesian2(),
70
+ cylinderLocalToShapeUvScale: new Cartesian3(),
65
71
  cylinderShapeUvAngleRangeOrigin: 0.0,
66
72
  };
67
73
 
@@ -359,30 +365,22 @@ VoxelCylinderShape.prototype.update = function (
359
365
  }
360
366
 
361
367
  const radiusRange = maxBounds.x - minBounds.x;
368
+ // Defaults are for the case where radiusRange is zero, to avoid division by zero.
362
369
  let radialScale = 0.0;
363
370
  let radialOffset = 1.0;
364
371
  if (radiusRange !== 0.0) {
365
372
  radialScale = 1.0 / radiusRange;
366
373
  radialOffset = -minBounds.x * radialScale;
367
374
  }
368
- shaderUniforms.cylinderLocalToShapeUvRadius = Cartesian2.fromElements(
369
- radialScale,
370
- radialOffset,
371
- shaderUniforms.cylinderLocalToShapeUvRadius,
372
- );
373
375
 
374
376
  const heightRange = maxBounds.z - minBounds.z; // Default 2.0
377
+ // Defaults are for the case where heightRange is zero, to avoid division by zero.
375
378
  let heightScale = 0.0;
376
379
  let heightOffset = 1.0;
377
380
  if (heightRange !== 0.0) {
378
381
  heightScale = 1.0 / heightRange;
379
382
  heightOffset = -minBounds.z * heightScale;
380
383
  }
381
- shaderUniforms.cylinderLocalToShapeUvHeight = Cartesian2.fromElements(
382
- heightScale,
383
- heightOffset,
384
- shaderUniforms.cylinderLocalToShapeUvHeight,
385
- );
386
384
 
387
385
  if (renderHasAngle) {
388
386
  shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE"] = true;
@@ -414,23 +412,31 @@ VoxelCylinderShape.prototype.update = function (
414
412
  const uvAngleRangeOrigin = (uvMaxAngle + 0.5 * uvAngleRangeZero) % 1.0;
415
413
  shaderUniforms.cylinderShapeUvAngleRangeOrigin = uvAngleRangeOrigin;
416
414
 
417
- if (shapeAngleRange <= epsilonAngle) {
418
- shaderUniforms.cylinderLocalToShapeUvAngle = Cartesian2.fromElements(
419
- 0.0,
420
- 1.0,
421
- shaderUniforms.cylinderLocalToShapeUvAngle,
422
- );
423
- } else {
424
- const scale = defaultAngleRange / shapeAngleRange;
415
+ // Defaults are for the case where shapeAngleRange is zero, to avoid division by zero.
416
+ let angleScale = 0.0;
417
+ let angleOffset = 1.0;
418
+ if (shapeAngleRange > epsilonAngle) {
419
+ angleScale = defaultAngleRange / shapeAngleRange;
425
420
  const shiftedMinAngle = uvMinAngle - uvAngleRangeOrigin;
426
- const offset = -scale * (shiftedMinAngle - Math.floor(shiftedMinAngle));
427
- shaderUniforms.cylinderLocalToShapeUvAngle = Cartesian2.fromElements(
428
- scale,
429
- offset,
430
- shaderUniforms.cylinderLocalToShapeUvAngle,
431
- );
421
+ angleOffset = -angleScale * (shiftedMinAngle - Math.floor(shiftedMinAngle));
432
422
  }
433
423
 
424
+ // Store scales in shader uniforms (GPU)
425
+ shaderUniforms.cylinderLocalToShapeUvScale = Cartesian3.fromElements(
426
+ radialScale,
427
+ angleScale,
428
+ heightScale,
429
+ shaderUniforms.cylinderLocalToShapeUvScale,
430
+ );
431
+
432
+ // Store translations in private property (JS-only)
433
+ this._localToShapeUvTranslate = Cartesian3.fromElements(
434
+ radialOffset,
435
+ angleOffset,
436
+ heightOffset,
437
+ this._localToShapeUvTranslate,
438
+ );
439
+
434
440
  this._shaderMaximumIntersectionsLength = intersectionCount;
435
441
 
436
442
  return true;
@@ -523,25 +529,20 @@ VoxelCylinderShape.prototype.convertLocalToShapeUvSpace = function (
523
529
  let angle = Math.atan2(positionLocal.y, positionLocal.x);
524
530
  let height = positionLocal.z;
525
531
 
526
- const {
527
- cylinderLocalToShapeUvRadius,
528
- cylinderLocalToShapeUvAngle,
529
- cylinderShapeUvAngleRangeOrigin,
530
- cylinderLocalToShapeUvHeight,
531
- } = this._shaderUniforms;
532
+ const { cylinderLocalToShapeUvScale, cylinderShapeUvAngleRangeOrigin } =
533
+ this._shaderUniforms;
534
+ const localToShapeUvTranslate = this._localToShapeUvTranslate;
532
535
 
533
- radius =
534
- radius * cylinderLocalToShapeUvRadius.x + cylinderLocalToShapeUvRadius.y;
536
+ radius = radius * cylinderLocalToShapeUvScale.x + localToShapeUvTranslate.x;
535
537
 
536
538
  // Convert angle to a "UV" in [0,1] with 0 defined at the center of the unoccupied space.
537
539
  angle = (angle + Math.PI) / (2.0 * Math.PI);
538
540
  angle -= cylinderShapeUvAngleRangeOrigin;
539
541
  angle = angle - Math.floor(angle);
540
542
  // Scale and shift so [0,1] covers the occupied space.
541
- angle = angle * cylinderLocalToShapeUvAngle.x + cylinderLocalToShapeUvAngle.y;
543
+ angle = angle * cylinderLocalToShapeUvScale.y + localToShapeUvTranslate.y;
542
544
 
543
- height =
544
- height * cylinderLocalToShapeUvHeight.x + cylinderLocalToShapeUvHeight.y;
545
+ height = height * cylinderLocalToShapeUvScale.z + localToShapeUvTranslate.z;
545
546
 
546
547
  return Cartesian3.fromElements(radius, angle, height, result);
547
548
  };