@cesium/engine 1.0.0 → 2.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 (472) hide show
  1. package/Build/Workers/{AttributeCompression-4589338a.js → AttributeCompression-b646d393.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-bfb1234f.js → AxisAlignedBoundingBox-47525601.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-7ffc2153.js → BoundingRectangle-93b263ac.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-93f344a3.js → BoxGeometry-8c4b4125.js} +1 -1
  5. package/Build/Workers/{Color-0c5aaf47.js → Color-52c60ed7.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-6597982a.js → CoplanarPolygonGeometryLibrary-33c4c1f8.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-2119580e.js → CorridorGeometryLibrary-5039cd8e.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-f9503c6d.js → CylinderGeometry-3ac44974.js} +1 -1
  9. package/Build/Workers/{EllipseGeometry-fedf72d5.js → EllipseGeometry-a9c9b3be.js} +1 -1
  10. package/Build/Workers/{EllipseGeometryLibrary-4ea68687.js → EllipseGeometryLibrary-855d4681.js} +1 -1
  11. package/Build/Workers/{EllipseOutlineGeometry-e2ae6a35.js → EllipseOutlineGeometry-017a5929.js} +1 -1
  12. package/Build/Workers/{EllipsoidGeodesic-16de63ea.js → EllipsoidGeodesic-98c62a56.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeometry-95c0330e.js → EllipsoidGeometry-826e7bce.js} +1 -1
  14. package/Build/Workers/{EllipsoidOutlineGeometry-d6d2ceec.js → EllipsoidOutlineGeometry-784dcdb5.js} +1 -1
  15. package/Build/Workers/{EllipsoidRhumbLine-ae5e65e0.js → EllipsoidRhumbLine-19756602.js} +1 -1
  16. package/Build/Workers/{EllipsoidTangentPlane-bfc674bf.js → EllipsoidTangentPlane-ed9443a1.js} +1 -1
  17. package/Build/Workers/{EncodedCartesian3-f473ea18.js → EncodedCartesian3-81f70735.js} +1 -1
  18. package/Build/Workers/{FrustumGeometry-3bf2e4eb.js → FrustumGeometry-9f1ee4d8.js} +1 -1
  19. package/Build/Workers/{GeometryAttribute-df5f473e.js → GeometryAttribute-334718f8.js} +1 -1
  20. package/Build/Workers/{GeometryInstance-aa75b4cf.js → GeometryInstance-451dc1cd.js} +1 -1
  21. package/Build/Workers/{GeometryPipeline-f0e46c42.js → GeometryPipeline-8fb0db69.js} +1 -1
  22. package/Build/Workers/{IntersectionTests-9de29d51.js → IntersectionTests-27d49265.js} +1 -1
  23. package/Build/Workers/{Matrix2-ce637455.js → Matrix2-13178034.js} +4 -2
  24. package/Build/Workers/{Matrix3-4f4df527.js → Matrix3-315394f6.js} +2 -1
  25. package/Build/Workers/{OrientedBoundingBox-d3ff3d4d.js → OrientedBoundingBox-79ee7cbb.js} +5 -5
  26. package/Build/Workers/{Plane-b81241c2.js → Plane-900aa728.js} +1 -1
  27. package/Build/Workers/{PolygonGeometryLibrary-6f4937bb.js → PolygonGeometryLibrary-6b5a29e9.js} +1 -1
  28. package/Build/Workers/PolygonPipeline-21668b3f.js +1345 -0
  29. package/Build/Workers/{PolylinePipeline-2e2b015c.js → PolylinePipeline-5e2e1b21.js} +1 -1
  30. package/Build/Workers/{PolylineVolumeGeometryLibrary-7ee1d449.js → PolylineVolumeGeometryLibrary-97f0b94e.js} +1 -1
  31. package/Build/Workers/{PrimitivePipeline-a9b7aae0.js → PrimitivePipeline-5640850a.js} +1 -1
  32. package/Build/Workers/{RectangleGeometryLibrary-9aa6c8f6.js → RectangleGeometryLibrary-d5457f7b.js} +1 -1
  33. package/Build/Workers/{TerrainEncoding-b52dcfc5.js → TerrainEncoding-bfdf2021.js} +1 -1
  34. package/Build/Workers/{Transforms-2f755df8.js → Transforms-a05e5e6e.js} +114 -83
  35. package/Build/Workers/{WallGeometryLibrary-ab19a93d.js → WallGeometryLibrary-6db0ebb6.js} +1 -1
  36. package/Build/Workers/{WebMercatorProjection-9f25de49.js → WebMercatorProjection-13a90d41.js} +1 -1
  37. package/Build/Workers/cesiumWorkerBootstrapper.js +92 -2
  38. package/Build/Workers/combineGeometry.js +1 -1
  39. package/Build/Workers/createBoxGeometry.js +1 -1
  40. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  41. package/Build/Workers/createCircleGeometry.js +1 -1
  42. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  43. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  44. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCorridorGeometry.js +1 -1
  46. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCylinderGeometry.js +1 -1
  48. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  49. package/Build/Workers/createEllipseGeometry.js +1 -1
  50. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  51. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  52. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  53. package/Build/Workers/createFrustumGeometry.js +1 -1
  54. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  55. package/Build/Workers/createGeometry.js +1 -1
  56. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  57. package/Build/Workers/createPlaneGeometry.js +1 -1
  58. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  59. package/Build/Workers/createPolygonGeometry.js +1 -1
  60. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  61. package/Build/Workers/createPolylineGeometry.js +1 -1
  62. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  63. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  64. package/Build/Workers/createRectangleGeometry.js +1 -1
  65. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  66. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  67. package/Build/Workers/createSphereGeometry.js +1 -1
  68. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  69. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  70. package/Build/Workers/createVectorTileGeometries.js +1 -1
  71. package/Build/Workers/createVectorTilePoints.js +1 -1
  72. package/Build/Workers/createVectorTilePolygons.js +1 -1
  73. package/Build/Workers/createVectorTilePolylines.js +1 -1
  74. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  75. package/Build/Workers/createVerticesFromHeightmap.js +7 -3
  76. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
  77. package/Build/Workers/createWallGeometry.js +1 -1
  78. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  79. package/Build/Workers/decodeDraco.js +9 -1
  80. package/Build/Workers/decodeI3S.js +1 -1
  81. package/Build/Workers/package.js +25 -1
  82. package/Build/Workers/transcodeKTX2.js +22 -2
  83. package/Build/Workers/transferTypedArrayTest.js +25 -1
  84. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  85. package/README.md +14 -16
  86. package/Source/Core/EarthOrientationParameters.js +67 -63
  87. package/Source/Core/FeatureDetection.js +18 -0
  88. package/Source/Core/Ion.js +1 -2
  89. package/Source/Core/Matrix2.js +2 -1
  90. package/Source/Core/Matrix3.js +2 -1
  91. package/Source/Core/Matrix4.js +1 -0
  92. package/Source/Core/OrientedBoundingBox.js +4 -4
  93. package/Source/Core/PixelFormat.js +22 -2
  94. package/Source/Core/S2Cell.js +3 -3
  95. package/Source/Core/Transforms.js +3 -7
  96. package/Source/Core/sampleTerrain.js +5 -0
  97. package/Source/DataSources/GpxDataSource.js +4 -6
  98. package/Source/DataSources/KmlDataSource.js +3 -5
  99. package/Source/Renderer/AutomaticUniforms.js +3 -3
  100. package/Source/Renderer/Context.js +20 -12
  101. package/Source/Renderer/Pass.js +3 -2
  102. package/Source/Renderer/ShaderBuilder.js +13 -12
  103. package/Source/Renderer/ShaderSource.js +31 -26
  104. package/Source/Renderer/demodernizeShader.js +76 -0
  105. package/Source/Scene/AutoExposure.js +5 -5
  106. package/Source/Scene/BatchTable.js +5 -5
  107. package/Source/Scene/BillboardCollection.js +2 -2
  108. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  109. package/Source/Scene/Cesium3DTile.js +8 -2
  110. package/Source/Scene/Cesium3DTileBatchTable.js +28 -28
  111. package/Source/Scene/Cesium3DTileContentType.js +19 -0
  112. package/Source/Scene/Cesium3DTilesVoxelProvider.js +494 -0
  113. package/Source/Scene/Cesium3DTileset.js +6 -1
  114. package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
  115. package/Source/Scene/ClassificationPrimitive.js +3 -8
  116. package/Source/Scene/ContentMetadata.js +2 -2
  117. package/Source/Scene/DebugAppearance.js +7 -9
  118. package/Source/Scene/DebugInspector.js +5 -5
  119. package/Source/Scene/DepthPlane.js +0 -6
  120. package/Source/Scene/DerivedCommand.js +15 -22
  121. package/Source/Scene/EllipsoidPrimitive.js +0 -7
  122. package/Source/Scene/Expression.js +1 -1
  123. package/Source/Scene/Globe.js +10 -0
  124. package/Source/Scene/GlobeSurfaceTileProvider.js +7 -0
  125. package/Source/Scene/GlobeTranslucencyState.js +6 -6
  126. package/Source/Scene/GltfImageLoader.js +1 -1
  127. package/Source/Scene/GltfVertexBufferLoader.js +10 -2
  128. package/Source/Scene/GroundPolylinePrimitive.js +2 -4
  129. package/Source/Scene/GroupMetadata.js +2 -2
  130. package/Source/Scene/ImplicitMetadataView.js +2 -2
  131. package/Source/Scene/ImplicitSubtreeCache.js +127 -0
  132. package/Source/Scene/ImplicitSubtreeMetadata.js +2 -2
  133. package/Source/Scene/ImplicitTileset.js +3 -2
  134. package/Source/Scene/InvertClassification.js +9 -10
  135. package/Source/Scene/KeyframeNode.js +47 -0
  136. package/Source/Scene/Material.js +6 -6
  137. package/Source/Scene/Megatexture.js +490 -0
  138. package/Source/Scene/MetadataClass.js +60 -25
  139. package/Source/Scene/MetadataClassProperty.js +132 -68
  140. package/Source/Scene/MetadataComponentType.js +78 -57
  141. package/Source/Scene/MetadataEnum.js +59 -23
  142. package/Source/Scene/MetadataEnumValue.js +49 -15
  143. package/Source/Scene/MetadataSchema.js +53 -24
  144. package/Source/Scene/MetadataSchemaLoader.js +2 -2
  145. package/Source/Scene/MetadataSemantic.js +8 -0
  146. package/Source/Scene/MetadataTableProperty.js +2 -2
  147. package/Source/Scene/MetadataType.js +6 -14
  148. package/Source/Scene/Model/CustomShader.js +1 -1
  149. package/Source/Scene/Model/FeatureIdPipelineStage.js +4 -4
  150. package/Source/Scene/Model/GeoJsonLoader.js +1 -1
  151. package/Source/Scene/Model/LightingModel.js +1 -1
  152. package/Source/Scene/Model/MetadataPipelineStage.js +1 -1
  153. package/Source/Scene/Model/Model.js +2 -3
  154. package/Source/Scene/Model/PickingPipelineStage.js +1 -1
  155. package/Source/Scene/Model/buildDrawCommand.js +19 -11
  156. package/Source/Scene/OIT.js +211 -119
  157. package/Source/Scene/PickDepth.js +2 -2
  158. package/Source/Scene/PointCloud.js +12 -12
  159. package/Source/Scene/PointCloudEyeDomeLighting.js +9 -4
  160. package/Source/Scene/PolylineCollection.js +2 -7
  161. package/Source/Scene/PolylineMaterialAppearance.js +2 -3
  162. package/Source/Scene/PostProcessStage.js +13 -13
  163. package/Source/Scene/PostProcessStageLibrary.js +3 -3
  164. package/Source/Scene/Primitive.js +22 -31
  165. package/Source/Scene/PropertyAttribute.js +2 -2
  166. package/Source/Scene/PropertyAttributeProperty.js +2 -2
  167. package/Source/Scene/PropertyTable.js +2 -2
  168. package/Source/Scene/PropertyTexture.js +2 -2
  169. package/Source/Scene/PropertyTextureProperty.js +2 -2
  170. package/Source/Scene/ResourceCache.js +9 -1
  171. package/Source/Scene/ResourceCacheKey.js +9 -1
  172. package/Source/Scene/Scene.js +17 -0
  173. package/Source/Scene/ShadowMap.js +7 -7
  174. package/Source/Scene/ShadowMapShader.js +9 -9
  175. package/Source/Scene/ShadowVolumeAppearance.js +1 -1
  176. package/Source/Scene/SpatialNode.js +375 -0
  177. package/Source/Scene/StructuralMetadata.js +2 -2
  178. package/Source/Scene/TextureAtlas.js +5 -3
  179. package/Source/Scene/TileMetadata.js +2 -2
  180. package/Source/Scene/TilesetMetadata.js +2 -2
  181. package/Source/Scene/Vector3DTilePolylines.js +1 -1
  182. package/Source/Scene/Vector3DTilePrimitive.js +2 -2
  183. package/Source/Scene/VoxelBoxShape.js +527 -0
  184. package/Source/Scene/VoxelContent.js +169 -0
  185. package/Source/Scene/VoxelCylinderShape.js +937 -0
  186. package/Source/Scene/VoxelEllipsoidShape.js +945 -0
  187. package/Source/Scene/VoxelPrimitive.js +1919 -0
  188. package/Source/Scene/VoxelProvider.js +255 -0
  189. package/Source/Scene/VoxelRenderResources.js +224 -0
  190. package/Source/Scene/VoxelShape.js +152 -0
  191. package/Source/Scene/VoxelShapeType.js +105 -0
  192. package/Source/Scene/VoxelTraversal.js +1144 -0
  193. package/Source/Scene/buildVoxelDrawCommands.js +116 -0
  194. package/Source/Scene/computeFlyToLocationForRectangle.js +10 -1
  195. package/Source/Scene/createElevationBandMaterial.js +10 -15
  196. package/Source/Scene/getClipAndStyleCode.js +1 -1
  197. package/Source/Scene/getClippingFunction.js +3 -3
  198. package/Source/Scene/parseBatchTable.js +18 -2
  199. package/Source/Scene/preprocess3DTileContent.js +8 -0
  200. package/Source/Scene/processVoxelProperties.js +455 -0
  201. package/Source/Shaders/AdjustTranslucentFS.glsl +9 -6
  202. package/Source/Shaders/AdjustTranslucentFS.js +9 -6
  203. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.glsl +7 -7
  204. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.js +7 -7
  205. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.glsl +12 -12
  206. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.js +12 -12
  207. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.glsl +4 -4
  208. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.js +4 -4
  209. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.glsl +6 -6
  210. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.js +6 -6
  211. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.glsl +5 -5
  212. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js +5 -5
  213. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.glsl +7 -7
  214. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js +7 -7
  215. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.glsl +4 -4
  216. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.js +4 -4
  217. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.glsl +8 -8
  218. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.js +8 -8
  219. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.glsl +2 -2
  220. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js +2 -2
  221. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.glsl +5 -5
  222. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js +5 -5
  223. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.glsl +10 -10
  224. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.js +10 -10
  225. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.glsl +12 -12
  226. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.js +12 -12
  227. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.glsl +5 -5
  228. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.js +5 -5
  229. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.glsl +8 -8
  230. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.js +8 -8
  231. package/Source/Shaders/BillboardCollectionFS.glsl +15 -15
  232. package/Source/Shaders/BillboardCollectionFS.js +15 -15
  233. package/Source/Shaders/BillboardCollectionVS.glsl +24 -24
  234. package/Source/Shaders/BillboardCollectionVS.js +24 -24
  235. package/Source/Shaders/BrdfLutGeneratorFS.glsl +2 -2
  236. package/Source/Shaders/BrdfLutGeneratorFS.js +2 -2
  237. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  238. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  239. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +9 -0
  240. package/Source/Shaders/Builtin/Constants/passVoxels.js +11 -0
  241. package/Source/Shaders/Builtin/CzmBuiltins.js +19 -15
  242. package/Source/Shaders/Builtin/Functions/depthClamp.glsl +3 -3
  243. package/Source/Shaders/Builtin/Functions/depthClamp.js +3 -3
  244. package/Source/Shaders/Builtin/Functions/getWaterNoise.glsl +4 -4
  245. package/Source/Shaders/Builtin/Functions/getWaterNoise.js +4 -4
  246. package/Source/Shaders/Builtin/Functions/phong.glsl +1 -1
  247. package/Source/Shaders/Builtin/Functions/phong.js +1 -1
  248. package/Source/Shaders/Builtin/Functions/readDepth.glsl +1 -1
  249. package/Source/Shaders/Builtin/Functions/readDepth.js +1 -1
  250. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +5 -5
  251. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +5 -5
  252. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.glsl +3 -3
  253. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.js +3 -3
  254. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.glsl +1 -1
  255. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.js +1 -1
  256. package/Source/Shaders/Builtin/Functions/textureCube.glsl +17 -0
  257. package/Source/Shaders/Builtin/Functions/textureCube.js +18 -0
  258. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.glsl +2 -2
  259. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.js +2 -2
  260. package/Source/Shaders/Builtin/Functions/vertexLogDepth.glsl +2 -2
  261. package/Source/Shaders/Builtin/Functions/vertexLogDepth.js +2 -2
  262. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +55 -43
  263. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +55 -43
  264. package/Source/Shaders/Builtin/Functions/writeDepthClamp.glsl +5 -8
  265. package/Source/Shaders/Builtin/Functions/writeDepthClamp.js +5 -8
  266. package/Source/Shaders/Builtin/Functions/writeLogDepth.glsl +6 -6
  267. package/Source/Shaders/Builtin/Functions/writeLogDepth.js +6 -6
  268. package/Source/Shaders/CloudCollectionFS.glsl +18 -18
  269. package/Source/Shaders/CloudCollectionFS.js +18 -18
  270. package/Source/Shaders/CloudCollectionVS.glsl +11 -11
  271. package/Source/Shaders/CloudCollectionVS.js +11 -11
  272. package/Source/Shaders/CloudNoiseFS.glsl +5 -5
  273. package/Source/Shaders/CloudNoiseFS.js +5 -5
  274. package/Source/Shaders/CloudNoiseVS.glsl +2 -2
  275. package/Source/Shaders/CloudNoiseVS.js +2 -2
  276. package/Source/Shaders/CompareAndPackTranslucentDepth.glsl +4 -4
  277. package/Source/Shaders/CompareAndPackTranslucentDepth.js +4 -4
  278. package/Source/Shaders/CompositeOITFS.glsl +6 -6
  279. package/Source/Shaders/CompositeOITFS.js +6 -6
  280. package/Source/Shaders/DepthPlaneFS.glsl +2 -2
  281. package/Source/Shaders/DepthPlaneFS.js +2 -2
  282. package/Source/Shaders/DepthPlaneVS.glsl +2 -2
  283. package/Source/Shaders/DepthPlaneVS.js +2 -2
  284. package/Source/Shaders/EllipsoidFS.glsl +5 -13
  285. package/Source/Shaders/EllipsoidFS.js +6 -14
  286. package/Source/Shaders/EllipsoidVS.glsl +2 -2
  287. package/Source/Shaders/EllipsoidVS.js +2 -2
  288. package/Source/Shaders/FXAA3_11.glsl +4 -4
  289. package/Source/Shaders/FXAA3_11.js +4 -4
  290. package/Source/Shaders/GlobeFS.glsl +17 -16
  291. package/Source/Shaders/GlobeFS.js +17 -16
  292. package/Source/Shaders/GlobeVS.glsl +17 -17
  293. package/Source/Shaders/GlobeVS.js +17 -17
  294. package/Source/Shaders/Materials/AspectRampMaterial.glsl +1 -1
  295. package/Source/Shaders/Materials/AspectRampMaterial.js +1 -1
  296. package/Source/Shaders/Materials/BumpMapMaterial.glsl +3 -3
  297. package/Source/Shaders/Materials/BumpMapMaterial.js +3 -3
  298. package/Source/Shaders/Materials/ElevationBandMaterial.glsl +3 -3
  299. package/Source/Shaders/Materials/ElevationBandMaterial.js +3 -3
  300. package/Source/Shaders/Materials/ElevationContourMaterial.glsl +2 -1
  301. package/Source/Shaders/Materials/ElevationContourMaterial.js +2 -1
  302. package/Source/Shaders/Materials/ElevationRampMaterial.glsl +1 -1
  303. package/Source/Shaders/Materials/ElevationRampMaterial.js +1 -1
  304. package/Source/Shaders/Materials/GridMaterial.glsl +3 -2
  305. package/Source/Shaders/Materials/GridMaterial.js +3 -2
  306. package/Source/Shaders/Materials/NormalMapMaterial.glsl +1 -1
  307. package/Source/Shaders/Materials/NormalMapMaterial.js +1 -1
  308. package/Source/Shaders/Materials/PolylineArrowMaterial.glsl +3 -2
  309. package/Source/Shaders/Materials/PolylineArrowMaterial.js +3 -2
  310. package/Source/Shaders/Materials/PolylineDashMaterial.glsl +1 -1
  311. package/Source/Shaders/Materials/PolylineDashMaterial.js +1 -1
  312. package/Source/Shaders/Materials/PolylineOutlineMaterial.glsl +1 -1
  313. package/Source/Shaders/Materials/PolylineOutlineMaterial.js +1 -1
  314. package/Source/Shaders/Materials/SlopeRampMaterial.glsl +1 -1
  315. package/Source/Shaders/Materials/SlopeRampMaterial.js +1 -1
  316. package/Source/Shaders/Materials/Water.glsl +1 -1
  317. package/Source/Shaders/Materials/Water.js +1 -1
  318. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +3 -3
  319. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +3 -3
  320. package/Source/Shaders/Model/MaterialStageFS.glsl +10 -10
  321. package/Source/Shaders/Model/MaterialStageFS.js +10 -10
  322. package/Source/Shaders/Model/ModelClippingPlanesStageFS.glsl +3 -3
  323. package/Source/Shaders/Model/ModelClippingPlanesStageFS.js +3 -3
  324. package/Source/Shaders/Model/ModelFS.glsl +1 -1
  325. package/Source/Shaders/Model/ModelFS.js +1 -1
  326. package/Source/Shaders/Model/PrimitiveOutlineStageFS.glsl +3 -3
  327. package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +3 -3
  328. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.glsl +1 -1
  329. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.js +1 -1
  330. package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +8 -8
  331. package/Source/Shaders/OctahedralProjectionAtlasFS.js +8 -8
  332. package/Source/Shaders/OctahedralProjectionFS.glsl +4 -4
  333. package/Source/Shaders/OctahedralProjectionFS.js +4 -4
  334. package/Source/Shaders/OctahedralProjectionVS.glsl +3 -3
  335. package/Source/Shaders/OctahedralProjectionVS.js +3 -3
  336. package/Source/Shaders/PointPrimitiveCollectionFS.glsl +6 -6
  337. package/Source/Shaders/PointPrimitiveCollectionFS.js +6 -6
  338. package/Source/Shaders/PointPrimitiveCollectionVS.glsl +17 -14
  339. package/Source/Shaders/PointPrimitiveCollectionVS.js +17 -14
  340. package/Source/Shaders/PolylineFS.glsl +3 -3
  341. package/Source/Shaders/PolylineFS.js +3 -3
  342. package/Source/Shaders/PolylineShadowVolumeFS.glsl +12 -16
  343. package/Source/Shaders/PolylineShadowVolumeFS.js +12 -16
  344. package/Source/Shaders/PolylineShadowVolumeMorphFS.glsl +8 -8
  345. package/Source/Shaders/PolylineShadowVolumeMorphFS.js +8 -8
  346. package/Source/Shaders/PolylineShadowVolumeMorphVS.glsl +20 -20
  347. package/Source/Shaders/PolylineShadowVolumeMorphVS.js +20 -20
  348. package/Source/Shaders/PolylineShadowVolumeVS.glsl +20 -20
  349. package/Source/Shaders/PolylineShadowVolumeVS.js +20 -20
  350. package/Source/Shaders/PolylineVS.glsl +17 -17
  351. package/Source/Shaders/PolylineVS.js +17 -17
  352. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -4
  353. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -4
  354. package/Source/Shaders/PostProcessStages/AdditiveBlend.glsl +4 -4
  355. package/Source/Shaders/PostProcessStages/AdditiveBlend.js +4 -4
  356. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +4 -4
  357. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +4 -4
  358. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +4 -4
  359. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +4 -4
  360. package/Source/Shaders/PostProcessStages/BlackAndWhite.glsl +4 -4
  361. package/Source/Shaders/PostProcessStages/BlackAndWhite.js +4 -4
  362. package/Source/Shaders/PostProcessStages/BloomComposite.glsl +5 -5
  363. package/Source/Shaders/PostProcessStages/BloomComposite.js +5 -5
  364. package/Source/Shaders/PostProcessStages/BrightPass.glsl +3 -3
  365. package/Source/Shaders/PostProcessStages/BrightPass.js +3 -3
  366. package/Source/Shaders/PostProcessStages/Brightness.glsl +3 -3
  367. package/Source/Shaders/PostProcessStages/Brightness.js +3 -3
  368. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.glsl +5 -5
  369. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.js +5 -5
  370. package/Source/Shaders/PostProcessStages/ContrastBias.glsl +3 -3
  371. package/Source/Shaders/PostProcessStages/ContrastBias.js +3 -3
  372. package/Source/Shaders/PostProcessStages/DepthOfField.glsl +2 -2
  373. package/Source/Shaders/PostProcessStages/DepthOfField.js +2 -2
  374. package/Source/Shaders/PostProcessStages/DepthView.glsl +2 -2
  375. package/Source/Shaders/PostProcessStages/DepthView.js +2 -2
  376. package/Source/Shaders/PostProcessStages/DepthViewPacked.glsl +3 -3
  377. package/Source/Shaders/PostProcessStages/DepthViewPacked.js +3 -3
  378. package/Source/Shaders/PostProcessStages/EdgeDetection.glsl +7 -7
  379. package/Source/Shaders/PostProcessStages/EdgeDetection.js +7 -7
  380. package/Source/Shaders/PostProcessStages/FXAA.glsl +3 -3
  381. package/Source/Shaders/PostProcessStages/FXAA.js +3 -3
  382. package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -4
  383. package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -4
  384. package/Source/Shaders/PostProcessStages/GaussianBlur1D.glsl +5 -5
  385. package/Source/Shaders/PostProcessStages/GaussianBlur1D.js +5 -5
  386. package/Source/Shaders/PostProcessStages/LensFlare.glsl +13 -13
  387. package/Source/Shaders/PostProcessStages/LensFlare.js +13 -13
  388. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -4
  389. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -4
  390. package/Source/Shaders/PostProcessStages/NightVision.glsl +3 -3
  391. package/Source/Shaders/PostProcessStages/NightVision.js +3 -3
  392. package/Source/Shaders/PostProcessStages/PassThrough.glsl +2 -2
  393. package/Source/Shaders/PostProcessStages/PassThrough.js +2 -2
  394. package/Source/Shaders/PostProcessStages/PassThroughDepth.glsl +2 -2
  395. package/Source/Shaders/PostProcessStages/PassThroughDepth.js +2 -2
  396. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.glsl +7 -9
  397. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.js +8 -10
  398. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -4
  399. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -4
  400. package/Source/Shaders/PostProcessStages/Silhouette.glsl +4 -4
  401. package/Source/Shaders/PostProcessStages/Silhouette.js +4 -4
  402. package/Source/Shaders/ReprojectWebMercatorFS.glsl +2 -2
  403. package/Source/Shaders/ReprojectWebMercatorFS.js +2 -2
  404. package/Source/Shaders/ReprojectWebMercatorVS.glsl +3 -3
  405. package/Source/Shaders/ReprojectWebMercatorVS.js +3 -3
  406. package/Source/Shaders/ShadowVolumeAppearanceFS.glsl +19 -23
  407. package/Source/Shaders/ShadowVolumeAppearanceFS.js +20 -24
  408. package/Source/Shaders/ShadowVolumeAppearanceVS.glsl +12 -12
  409. package/Source/Shaders/ShadowVolumeAppearanceVS.js +12 -12
  410. package/Source/Shaders/ShadowVolumeFS.glsl +2 -6
  411. package/Source/Shaders/ShadowVolumeFS.js +3 -7
  412. package/Source/Shaders/SkyAtmosphereFS.glsl +6 -6
  413. package/Source/Shaders/SkyAtmosphereFS.js +6 -6
  414. package/Source/Shaders/SkyAtmosphereVS.glsl +6 -6
  415. package/Source/Shaders/SkyAtmosphereVS.js +6 -6
  416. package/Source/Shaders/SkyBoxFS.glsl +3 -3
  417. package/Source/Shaders/SkyBoxFS.js +3 -3
  418. package/Source/Shaders/SkyBoxVS.glsl +2 -2
  419. package/Source/Shaders/SkyBoxVS.js +2 -2
  420. package/Source/Shaders/SunFS.glsl +3 -3
  421. package/Source/Shaders/SunFS.js +3 -3
  422. package/Source/Shaders/SunTextureFS.glsl +2 -2
  423. package/Source/Shaders/SunTextureFS.js +2 -2
  424. package/Source/Shaders/SunVS.glsl +2 -2
  425. package/Source/Shaders/SunVS.js +2 -2
  426. package/Source/Shaders/Vector3DTileClampedPolylinesFS.glsl +9 -13
  427. package/Source/Shaders/Vector3DTileClampedPolylinesFS.js +9 -13
  428. package/Source/Shaders/Vector3DTileClampedPolylinesVS.glsl +12 -12
  429. package/Source/Shaders/Vector3DTileClampedPolylinesVS.js +12 -12
  430. package/Source/Shaders/Vector3DTilePolylinesVS.glsl +5 -5
  431. package/Source/Shaders/Vector3DTilePolylinesVS.js +5 -5
  432. package/Source/Shaders/VectorTileVS.glsl +2 -2
  433. package/Source/Shaders/VectorTileVS.js +2 -2
  434. package/Source/Shaders/ViewportQuadFS.glsl +2 -2
  435. package/Source/Shaders/ViewportQuadFS.js +2 -2
  436. package/Source/Shaders/ViewportQuadVS.glsl +3 -3
  437. package/Source/Shaders/ViewportQuadVS.js +3 -3
  438. package/Source/Shaders/Voxels/IntersectBox.glsl +79 -0
  439. package/Source/Shaders/Voxels/IntersectBox.js +81 -0
  440. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +70 -0
  441. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +72 -0
  442. package/Source/Shaders/Voxels/IntersectCylinder.glsl +273 -0
  443. package/Source/Shaders/Voxels/IntersectCylinder.js +275 -0
  444. package/Source/Shaders/Voxels/IntersectDepth.glsl +23 -0
  445. package/Source/Shaders/Voxels/IntersectDepth.js +25 -0
  446. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +347 -0
  447. package/Source/Shaders/Voxels/IntersectEllipsoid.js +349 -0
  448. package/Source/Shaders/Voxels/Intersection.glsl +54 -0
  449. package/Source/Shaders/Voxels/Intersection.js +56 -0
  450. package/Source/Shaders/Voxels/IntersectionUtils.glsl +151 -0
  451. package/Source/Shaders/Voxels/IntersectionUtils.js +153 -0
  452. package/Source/Shaders/Voxels/Megatexture.glsl +136 -0
  453. package/Source/Shaders/Voxels/Megatexture.js +138 -0
  454. package/Source/Shaders/Voxels/Octree.glsl +221 -0
  455. package/Source/Shaders/Voxels/Octree.js +223 -0
  456. package/Source/Shaders/Voxels/VoxelFS.glsl +150 -0
  457. package/Source/Shaders/Voxels/VoxelFS.js +152 -0
  458. package/Source/Shaders/Voxels/VoxelVS.glsl +11 -0
  459. package/Source/Shaders/Voxels/VoxelVS.js +13 -0
  460. package/Source/Shaders/Voxels/convertUvToBox.glsl +16 -0
  461. package/Source/Shaders/Voxels/convertUvToBox.js +18 -0
  462. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +75 -0
  463. package/Source/Shaders/Voxels/convertUvToCylinder.js +77 -0
  464. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +130 -0
  465. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +132 -0
  466. package/Source/ThirdParty/Workers/z-worker-pako.js +0 -0
  467. package/Source/WorkersES6/decodeDraco.js +9 -1
  468. package/index.d.ts +3148 -2297
  469. package/index.js +1118 -1085
  470. package/package.json +3 -4
  471. package/Build/Workers/PolygonPipeline-774a8aaf.js +0 -1341
  472. package/Source/Renderer/modernizeShader.js +0 -242
@@ -0,0 +1,945 @@
1
+ import BoundingSphere from "../Core/BoundingSphere.js";
2
+ import Cartesian2 from "../Core/Cartesian2.js";
3
+ import Cartesian3 from "../Core/Cartesian3.js";
4
+ import Check from "../Core/Check.js";
5
+ import Ellipsoid from "../Core/Ellipsoid.js";
6
+ import CesiumMath from "../Core/Math.js";
7
+ import Matrix3 from "../Core/Matrix3.js";
8
+ import Matrix4 from "../Core/Matrix4.js";
9
+ import OrientedBoundingBox from "../Core/OrientedBoundingBox.js";
10
+ import Rectangle from "../Core/Rectangle.js";
11
+ import defaultValue from "../Core/defaultValue.js";
12
+
13
+ /**
14
+ * An ellipsoid {@link VoxelShape}.
15
+ *
16
+ * @alias VoxelEllipsoidShape
17
+ * @constructor
18
+ *
19
+ * @see VoxelShape
20
+ * @see VoxelBoxShape
21
+ * @see VoxelCylinderShape
22
+ * @see VoxelShapeType
23
+ *
24
+ * @private
25
+ */
26
+ function VoxelEllipsoidShape() {
27
+ /**
28
+ * An oriented bounding box containing the bounded shape.
29
+ * The update function must be called before accessing this value.
30
+ * @type {OrientedBoundingBox}
31
+ * @readonly
32
+ */
33
+ this.orientedBoundingBox = new OrientedBoundingBox();
34
+
35
+ /**
36
+ * A bounding sphere containing the bounded shape.
37
+ * The update function must be called before accessing this value.
38
+ * @type {BoundingSphere}
39
+ * @readonly
40
+ */
41
+ this.boundingSphere = new BoundingSphere();
42
+
43
+ /**
44
+ * A transformation matrix containing the bounded shape.
45
+ * The update function must be called before accessing this value.
46
+ * @type {Matrix4}
47
+ * @readonly
48
+ */
49
+ this.boundTransform = new Matrix4();
50
+
51
+ /**
52
+ * A transformation matrix containing the shape, ignoring the bounds.
53
+ * The update function must be called before accessing this value.
54
+ * @type {Matrix4}
55
+ * @readonly
56
+ */
57
+ this.shapeTransform = new Matrix4();
58
+
59
+ /**
60
+ * @type {Rectangle}
61
+ */
62
+ this._rectangle = new Rectangle();
63
+
64
+ /**
65
+ * @type {Number}
66
+ * @private
67
+ */
68
+ this._minimumHeight = VoxelEllipsoidShape.DefaultMinBounds.z;
69
+
70
+ /**
71
+ * @type {Number}
72
+ * @private
73
+ */
74
+ this._maximumHeight = VoxelEllipsoidShape.DefaultMaxBounds.z;
75
+
76
+ /**
77
+ * @type {Ellipsoid}
78
+ * @private
79
+ */
80
+ this._ellipsoid = new Ellipsoid();
81
+
82
+ /**
83
+ * @type {Cartesian3}
84
+ */
85
+ this._translation = new Cartesian3();
86
+
87
+ /**
88
+ * @type {Matrix3}
89
+ */
90
+ this._rotation = new Matrix3();
91
+
92
+ /**
93
+ * @type {Object.<string, any>}
94
+ * @readonly
95
+ */
96
+ this.shaderUniforms = {
97
+ ellipsoidRadiiUv: new Cartesian3(),
98
+ ellipsoidInverseRadiiSquaredUv: new Cartesian3(),
99
+ ellipsoidRenderLongitudeMinMax: new Cartesian2(),
100
+ ellipsoidShapeUvLongitudeMinMaxMid: new Cartesian3(),
101
+ ellipsoidUvToShapeUvLongitude: new Cartesian2(),
102
+ ellipsoidUvToShapeUvLatitude: new Cartesian2(),
103
+ ellipsoidRenderLatitudeCosSqrHalfMinMax: new Cartesian2(),
104
+ ellipsoidInverseHeightDifferenceUv: 0.0,
105
+ ellipseInnerRadiiUv: new Cartesian2(),
106
+ ellipsoidInverseInnerScaleUv: 0.0,
107
+ ellipsoidInverseOuterScaleUv: 0.0,
108
+ };
109
+
110
+ /**
111
+ * @type {Object.<string, any>}
112
+ * @readonly
113
+ */
114
+ this.shaderDefines = {
115
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE: undefined,
116
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO: undefined,
117
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF: undefined,
118
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF: undefined,
119
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF: undefined,
120
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY: undefined,
121
+ ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY: undefined,
122
+ ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE: undefined,
123
+ ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO: undefined,
124
+ ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED: undefined,
125
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE: undefined,
126
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF: undefined,
127
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF: undefined,
128
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF: undefined,
129
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF: undefined,
130
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF: undefined,
131
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF: undefined,
132
+ ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO: undefined,
133
+ ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE: undefined,
134
+ ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO: undefined,
135
+ ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX: undefined,
136
+ ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN: undefined,
137
+ ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT: undefined,
138
+ ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN: undefined,
139
+ ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT: undefined,
140
+ ELLIPSOID_IS_SPHERE: undefined,
141
+ ELLIPSOID_INTERSECTION_INDEX_LONGITUDE: undefined,
142
+ ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX: undefined,
143
+ ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN: undefined,
144
+ ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX: undefined,
145
+ ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN: undefined,
146
+ };
147
+
148
+ /**
149
+ * The maximum number of intersections against the shape for any ray direction.
150
+ * @type {Number}
151
+ * @readonly
152
+ */
153
+ this.shaderMaximumIntersectionsLength = 0; // not known until update
154
+ }
155
+
156
+ const scratchScale = new Cartesian3();
157
+ const scratchRotationScale = new Matrix3();
158
+ const scratchShapeOuterExtent = new Cartesian3();
159
+ const scratchShapeInnerExtent = new Cartesian3();
160
+ const scratchRenderOuterExtent = new Cartesian3();
161
+ const scratchRenderInnerExtent = new Cartesian3();
162
+ const scratchRenderRectangle = new Rectangle();
163
+
164
+ /**
165
+ * Update the shape's state.
166
+ *
167
+ * @param {Matrix4} modelMatrix The model matrix.
168
+ * @param {Cartesian3} minBounds The minimum bounds.
169
+ * @param {Cartesian3} maxBounds The maximum bounds.
170
+ * @param {Cartesian3} [clipMinBounds=VoxelEllipsoidShape.DefaultMinBounds] The minimum clip bounds.
171
+ * @param {Cartesian3} [clipMaxBounds=VoxelEllipsoidShape.DefaultMaxBounds] The maximum clip bounds.
172
+ * @returns {Boolean} Whether the shape is visible.
173
+ */
174
+ VoxelEllipsoidShape.prototype.update = function (
175
+ modelMatrix,
176
+ minBounds,
177
+ maxBounds,
178
+ clipMinBounds,
179
+ clipMaxBounds
180
+ ) {
181
+ clipMinBounds = defaultValue(
182
+ clipMinBounds,
183
+ VoxelEllipsoidShape.DefaultMinBounds
184
+ );
185
+ clipMaxBounds = defaultValue(
186
+ clipMaxBounds,
187
+ VoxelEllipsoidShape.DefaultMaxBounds
188
+ );
189
+ //>>includeStart('debug', pragmas.debug);
190
+ Check.typeOf.object("modelMatrix", modelMatrix);
191
+ Check.typeOf.object("minBounds", minBounds);
192
+ Check.typeOf.object("maxBounds", maxBounds);
193
+ //>>includeEnd('debug');
194
+
195
+ const defaultMinLongitude = VoxelEllipsoidShape.DefaultMinBounds.x;
196
+ const defaultMaxLongitude = VoxelEllipsoidShape.DefaultMaxBounds.x;
197
+ const defaultLongitudeRange = defaultMaxLongitude - defaultMinLongitude;
198
+ const defaultLongitudeRangeHalf = 0.5 * defaultLongitudeRange;
199
+ const defaultMinLatitude = VoxelEllipsoidShape.DefaultMinBounds.y;
200
+ const defaultMaxLatitude = VoxelEllipsoidShape.DefaultMaxBounds.y;
201
+ const defaultLatitudeRange = defaultMaxLatitude - defaultMinLatitude;
202
+
203
+ const epsilonZeroScale = CesiumMath.EPSILON10;
204
+ const epsilonLongitudeDiscontinuity = CesiumMath.EPSILON3; // 0.001 radians = 0.05729578 degrees
205
+ const epsilonLongitude = CesiumMath.EPSILON10;
206
+ const epsilonLatitude = CesiumMath.EPSILON10;
207
+ const epsilonLatitudeFlat = CesiumMath.EPSILON3; // 0.001 radians = 0.05729578 degrees
208
+
209
+ // Clamp the longitude / latitude to the valid range
210
+ const shapeMinLongitude = CesiumMath.clamp(
211
+ minBounds.x,
212
+ defaultMinLongitude,
213
+ defaultMaxLongitude
214
+ );
215
+ const shapeMaxLongitude = CesiumMath.clamp(
216
+ maxBounds.x,
217
+ defaultMinLongitude,
218
+ defaultMaxLongitude
219
+ );
220
+ const clipMinLongitude = CesiumMath.clamp(
221
+ clipMinBounds.x,
222
+ defaultMinLongitude,
223
+ defaultMaxLongitude
224
+ );
225
+ const clipMaxLongitude = CesiumMath.clamp(
226
+ clipMaxBounds.x,
227
+ defaultMinLongitude,
228
+ defaultMaxLongitude
229
+ );
230
+ const renderMinLongitude = Math.max(shapeMinLongitude, clipMinLongitude);
231
+ const renderMaxLongitude = Math.min(shapeMaxLongitude, clipMaxLongitude);
232
+
233
+ const shapeMinLatitude = CesiumMath.clamp(
234
+ minBounds.y,
235
+ defaultMinLatitude,
236
+ defaultMaxLatitude
237
+ );
238
+ const shapeMaxLatitude = CesiumMath.clamp(
239
+ maxBounds.y,
240
+ defaultMinLatitude,
241
+ defaultMaxLatitude
242
+ );
243
+ const clipMinLatitude = CesiumMath.clamp(
244
+ clipMinBounds.y,
245
+ defaultMinLatitude,
246
+ defaultMaxLatitude
247
+ );
248
+ const clipMaxLatitude = CesiumMath.clamp(
249
+ clipMaxBounds.y,
250
+ defaultMinLatitude,
251
+ defaultMaxLatitude
252
+ );
253
+
254
+ const renderMinLatitude = Math.max(shapeMinLatitude, clipMinLatitude);
255
+ const renderMaxLatitude = Math.min(shapeMaxLatitude, clipMaxLatitude);
256
+
257
+ // Don't let the height go below the center of the ellipsoid.
258
+ const radii = Matrix4.getScale(modelMatrix, scratchScale);
259
+ const isSphere = radii.x === radii.y && radii.y === radii.z;
260
+ const minRadius = Cartesian3.minimumComponent(radii);
261
+ const shapeMinHeight = Math.max(minBounds.z, -minRadius);
262
+ const shapeMaxHeight = Math.max(maxBounds.z, -minRadius);
263
+ const clipMinHeight = Math.max(clipMinBounds.z, -minRadius);
264
+ const clipMaxHeight = Math.max(clipMaxBounds.z, -minRadius);
265
+ const renderMinHeight = Math.max(shapeMinHeight, clipMinHeight);
266
+ const renderMaxHeight = Math.min(shapeMaxHeight, clipMaxHeight);
267
+
268
+ // Compute the closest and farthest a point can be from the center of the ellipsoid.
269
+ const shapeInnerExtent = Cartesian3.add(
270
+ radii,
271
+ Cartesian3.fromElements(
272
+ shapeMinHeight,
273
+ shapeMinHeight,
274
+ shapeMinHeight,
275
+ scratchShapeInnerExtent
276
+ ),
277
+ scratchShapeInnerExtent
278
+ );
279
+ const shapeOuterExtent = Cartesian3.add(
280
+ radii,
281
+ Cartesian3.fromElements(
282
+ shapeMaxHeight,
283
+ shapeMaxHeight,
284
+ shapeMaxHeight,
285
+ scratchShapeOuterExtent
286
+ ),
287
+ scratchShapeOuterExtent
288
+ );
289
+ const shapeMaxExtent = Cartesian3.maximumComponent(shapeOuterExtent);
290
+
291
+ const renderInnerExtent = Cartesian3.add(
292
+ radii,
293
+ Cartesian3.fromElements(
294
+ renderMinHeight,
295
+ renderMinHeight,
296
+ renderMinHeight,
297
+ scratchRenderInnerExtent
298
+ ),
299
+ scratchRenderInnerExtent
300
+ );
301
+ const renderOuterExtent = Cartesian3.add(
302
+ radii,
303
+ Cartesian3.fromElements(
304
+ renderMaxHeight,
305
+ renderMaxHeight,
306
+ renderMaxHeight,
307
+ scratchRenderOuterExtent
308
+ ),
309
+ scratchRenderOuterExtent
310
+ );
311
+
312
+ // Exit early if the shape is not visible.
313
+ // Note that minLongitude may be greater than maxLongitude when crossing the 180th meridian.
314
+ if (
315
+ renderMinLatitude > renderMaxLatitude ||
316
+ renderMinLatitude === defaultMaxLatitude ||
317
+ renderMaxLatitude === defaultMinLatitude ||
318
+ renderMinHeight > renderMaxHeight ||
319
+ CesiumMath.equalsEpsilon(
320
+ renderOuterExtent,
321
+ Cartesian3.ZERO,
322
+ undefined,
323
+ epsilonZeroScale
324
+ )
325
+ ) {
326
+ return false;
327
+ }
328
+
329
+ this._rectangle = Rectangle.fromRadians(
330
+ shapeMinLongitude,
331
+ shapeMinLatitude,
332
+ shapeMaxLongitude,
333
+ shapeMaxLatitude
334
+ );
335
+ this._translation = Matrix4.getTranslation(modelMatrix, this._translation);
336
+ this._rotation = Matrix4.getRotation(modelMatrix, this._rotation);
337
+ this._ellipsoid = Ellipsoid.fromCartesian3(radii, this._ellipsoid);
338
+ this._minimumHeight = shapeMinHeight;
339
+ this._maximumHeight = shapeMaxHeight;
340
+
341
+ const renderRectangle = Rectangle.fromRadians(
342
+ renderMinLongitude,
343
+ renderMinLatitude,
344
+ renderMaxLongitude,
345
+ renderMaxLatitude,
346
+ scratchRenderRectangle
347
+ );
348
+
349
+ this.orientedBoundingBox = getEllipsoidChunkObb(
350
+ renderRectangle,
351
+ renderMinHeight,
352
+ renderMaxHeight,
353
+ this._ellipsoid,
354
+ this._translation,
355
+ this._rotation,
356
+ this.orientedBoundingBox
357
+ );
358
+
359
+ this.shapeTransform = Matrix4.fromRotationTranslation(
360
+ Matrix3.setScale(this._rotation, shapeOuterExtent, scratchRotationScale),
361
+ this._translation,
362
+ this.shapeTransform
363
+ );
364
+
365
+ this.boundTransform = Matrix4.fromRotationTranslation(
366
+ this.orientedBoundingBox.halfAxes,
367
+ this.orientedBoundingBox.center,
368
+ this.boundTransform
369
+ );
370
+
371
+ this.boundingSphere = BoundingSphere.fromOrientedBoundingBox(
372
+ this.orientedBoundingBox,
373
+ this.boundingSphere
374
+ );
375
+
376
+ // Longitude
377
+ const renderIsLongitudeReversed = renderMaxLongitude < renderMinLongitude;
378
+ const renderLongitudeRange =
379
+ renderMaxLongitude -
380
+ renderMinLongitude +
381
+ renderIsLongitudeReversed * defaultLongitudeRange;
382
+ const renderIsLongitudeRangeZero = renderLongitudeRange <= epsilonLongitude;
383
+ const renderIsLongitudeRangeUnderHalf =
384
+ renderLongitudeRange > defaultLongitudeRangeHalf + epsilonLongitude &&
385
+ renderLongitudeRange < defaultLongitudeRange - epsilonLongitude;
386
+ const renderIsLongitudeRangeHalf =
387
+ renderLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&
388
+ renderLongitudeRange <= defaultLongitudeRangeHalf + epsilonLongitude;
389
+ const renderIsLongitudeRangeOverHalf =
390
+ renderLongitudeRange > epsilonLongitude &&
391
+ renderLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;
392
+ const renderHasLongitude =
393
+ renderIsLongitudeRangeZero ||
394
+ renderIsLongitudeRangeUnderHalf ||
395
+ renderIsLongitudeRangeHalf ||
396
+ renderIsLongitudeRangeOverHalf;
397
+
398
+ const shapeIsLongitudeReversed = shapeMaxLongitude < shapeMinLongitude;
399
+ const shapeLongitudeRange =
400
+ shapeMaxLongitude -
401
+ shapeMinLongitude +
402
+ shapeIsLongitudeReversed * defaultLongitudeRange;
403
+ const shapeIsLongitudeRangeZero = shapeLongitudeRange <= epsilonLongitude;
404
+ const shapeIsLongitudeRangeUnderHalf =
405
+ shapeLongitudeRange > defaultLongitudeRangeHalf + epsilonLongitude &&
406
+ shapeLongitudeRange < defaultLongitudeRange - epsilonLongitude;
407
+ const shapeIsLongitudeRangeHalf =
408
+ shapeLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&
409
+ shapeLongitudeRange <= defaultLongitudeRangeHalf + epsilonLongitude;
410
+ const shapeIsLongitudeRangeOverHalf =
411
+ shapeLongitudeRange > epsilonLongitude &&
412
+ shapeLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;
413
+ const shapeHasLongitude =
414
+ shapeIsLongitudeRangeZero ||
415
+ shapeIsLongitudeRangeUnderHalf ||
416
+ shapeIsLongitudeRangeHalf ||
417
+ shapeIsLongitudeRangeOverHalf;
418
+
419
+ // Latitude
420
+ const renderIsLatitudeMaxUnderHalf = renderMaxLatitude < -epsilonLatitudeFlat;
421
+ const renderIsLatitudeMaxHalf =
422
+ renderMaxLatitude >= -epsilonLatitudeFlat &&
423
+ renderMaxLatitude <= +epsilonLatitudeFlat;
424
+ const renderIsLatitudeMaxOverHalf =
425
+ renderMaxLatitude > +epsilonLatitudeFlat &&
426
+ renderMaxLatitude < defaultMaxLatitude - epsilonLatitude;
427
+ const renderHasLatitudeMax =
428
+ renderIsLatitudeMaxUnderHalf ||
429
+ renderIsLatitudeMaxHalf ||
430
+ renderIsLatitudeMaxOverHalf;
431
+ const renderIsLatitudeMinUnderHalf =
432
+ renderMinLatitude > defaultMinLatitude + epsilonLatitude &&
433
+ renderMinLatitude < -epsilonLatitudeFlat;
434
+ const renderIsLatitudeMinHalf =
435
+ renderMinLatitude >= -epsilonLatitudeFlat &&
436
+ renderMinLatitude <= +epsilonLatitudeFlat;
437
+ const renderIsLatitudeMinOverHalf = renderMinLatitude > +epsilonLatitudeFlat;
438
+ const renderHasLatitudeMin =
439
+ renderIsLatitudeMinUnderHalf ||
440
+ renderIsLatitudeMinHalf ||
441
+ renderIsLatitudeMinOverHalf;
442
+ const renderHasLatitude = renderHasLatitudeMax || renderHasLatitudeMin;
443
+
444
+ const shapeLatitudeRange = shapeMaxLatitude - shapeMinLatitude;
445
+ const shapeIsLatitudeMaxUnderHalf = shapeMaxLatitude < -epsilonLatitudeFlat;
446
+ const shapeIsLatitudeMaxHalf =
447
+ shapeMaxLatitude >= -epsilonLatitudeFlat &&
448
+ shapeMaxLatitude <= +epsilonLatitudeFlat;
449
+ const shapeIsLatitudeMaxOverHalf =
450
+ shapeMaxLatitude > +epsilonLatitudeFlat &&
451
+ shapeMaxLatitude < defaultMaxLatitude - epsilonLatitude;
452
+ const shapeHasLatitudeMax =
453
+ shapeIsLatitudeMaxUnderHalf ||
454
+ shapeIsLatitudeMaxHalf ||
455
+ shapeIsLatitudeMaxOverHalf;
456
+ const shapeIsLatitudeMinUnderHalf =
457
+ shapeMinLatitude > defaultMinLatitude + epsilonLatitude &&
458
+ shapeMinLatitude < -epsilonLatitudeFlat;
459
+ const shapeIsLatitudeMinHalf =
460
+ shapeMinLatitude >= -epsilonLatitudeFlat &&
461
+ shapeMinLatitude <= +epsilonLatitudeFlat;
462
+ const shapeIsLatitudeMinOverHalf = shapeMinLatitude > +epsilonLatitudeFlat;
463
+ const shapeHasLatitudeMin =
464
+ shapeIsLatitudeMinUnderHalf ||
465
+ shapeIsLatitudeMinHalf ||
466
+ shapeIsLatitudeMinOverHalf;
467
+ const shapeHasLatitude = shapeHasLatitudeMax || shapeHasLatitudeMin;
468
+
469
+ // Height
470
+ const renderHasMinHeight = !Cartesian3.equals(
471
+ renderInnerExtent,
472
+ Cartesian3.ZERO
473
+ );
474
+ const renderHasMaxHeight = !Cartesian3.equals(
475
+ renderOuterExtent,
476
+ Cartesian3.ZERO
477
+ );
478
+ const renderHasHeight = renderHasMinHeight || renderHasMaxHeight;
479
+ const renderHeightRange = renderMaxHeight - renderMinHeight;
480
+ const shapeHasMinHeight = !Cartesian3.equals(
481
+ shapeInnerExtent,
482
+ Cartesian3.ZERO
483
+ );
484
+ const shapeHasMaxHeight = !Cartesian3.equals(
485
+ shapeOuterExtent,
486
+ Cartesian3.ZERO
487
+ );
488
+ const shapeHasHeight = shapeHasMinHeight || shapeHasMaxHeight;
489
+
490
+ const shaderUniforms = this.shaderUniforms;
491
+ const shaderDefines = this.shaderDefines;
492
+
493
+ // To keep things simple, clear the defines every time
494
+ for (const key in shaderDefines) {
495
+ if (shaderDefines.hasOwnProperty(key)) {
496
+ shaderDefines[key] = undefined;
497
+ }
498
+ }
499
+
500
+ // The ellipsoid radii scaled to [0,1]. The max ellipsoid radius will be 1.0 and others will be less.
501
+ shaderUniforms.ellipsoidRadiiUv = Cartesian3.divideByScalar(
502
+ shapeOuterExtent,
503
+ shapeMaxExtent,
504
+ shaderUniforms.ellipsoidRadiiUv
505
+ );
506
+
507
+ // Used to compute geodetic surface normal.
508
+ shaderUniforms.ellipsoidInverseRadiiSquaredUv = Cartesian3.divideComponents(
509
+ Cartesian3.ONE,
510
+ Cartesian3.multiplyComponents(
511
+ shaderUniforms.ellipsoidRadiiUv,
512
+ shaderUniforms.ellipsoidRadiiUv,
513
+ shaderUniforms.ellipsoidInverseRadiiSquaredUv
514
+ ),
515
+ shaderUniforms.ellipsoidInverseRadiiSquaredUv
516
+ );
517
+
518
+ // Keep track of how many intersections there are going to be.
519
+ let intersectionCount = 0;
520
+
521
+ // Intersects an outer ellipsoid for the max height.
522
+ shaderDefines["ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX"] = intersectionCount;
523
+ intersectionCount += 1;
524
+
525
+ if (renderHasHeight) {
526
+ if (renderHeightRange === 0.0) {
527
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT"] = true;
528
+ }
529
+
530
+ if (renderHasMinHeight) {
531
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN"] = true;
532
+ shaderDefines[
533
+ "ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN"
534
+ ] = intersectionCount;
535
+ intersectionCount += 1;
536
+
537
+ // The inverse of the percent of space that is taken up by the inner ellipsoid, relative to the shape bounds
538
+ // 1.0 / (1.0 - thickness) // thickness = percent of space that is between the min and max height.
539
+ // 1.0 / (1.0 - (shapeMaxHeight - renderMinHeight) / shapeMaxExtent)
540
+ // shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight))
541
+ shaderUniforms.ellipsoidInverseInnerScaleUv =
542
+ shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight));
543
+ }
544
+
545
+ if (renderHasMaxHeight) {
546
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX"] = true;
547
+ shaderUniforms.ellipsoidInverseOuterScaleUv =
548
+ shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMaxHeight));
549
+ }
550
+ }
551
+
552
+ if (shapeHasHeight) {
553
+ if (shapeHasMinHeight) {
554
+ shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN"] = true;
555
+
556
+ // The percent of space that is between the inner and outer ellipsoid.
557
+ const thickness = (shapeMaxHeight - shapeMinHeight) / shapeMaxExtent;
558
+ shaderUniforms.ellipsoidInverseHeightDifferenceUv = 1.0 / thickness;
559
+ shaderUniforms.ellipseInnerRadiiUv = Cartesian2.fromElements(
560
+ shaderUniforms.ellipsoidRadiiUv.x * (1.0 - thickness),
561
+ shaderUniforms.ellipsoidRadiiUv.z * (1.0 - thickness),
562
+ shaderUniforms.ellipseInnerRadiiUv
563
+ );
564
+ }
565
+ if (shapeMinHeight === shapeMaxHeight) {
566
+ shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT"] = true;
567
+ }
568
+ }
569
+
570
+ // Intersects a wedge for the min and max longitude.
571
+ if (renderHasLongitude) {
572
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE"] = true;
573
+ shaderDefines["ELLIPSOID_INTERSECTION_INDEX_LONGITUDE"] = intersectionCount;
574
+
575
+ if (renderIsLongitudeRangeUnderHalf) {
576
+ shaderDefines[
577
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF"
578
+ ] = true;
579
+ intersectionCount += 1;
580
+ } else if (renderIsLongitudeRangeOverHalf) {
581
+ shaderDefines[
582
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF"
583
+ ] = true;
584
+ intersectionCount += 2;
585
+ } else if (renderIsLongitudeRangeHalf) {
586
+ shaderDefines[
587
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF"
588
+ ] = true;
589
+ intersectionCount += 1;
590
+ } else if (renderIsLongitudeRangeZero) {
591
+ shaderDefines[
592
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO"
593
+ ] = true;
594
+ intersectionCount += 2;
595
+ }
596
+
597
+ shaderUniforms.ellipsoidRenderLongitudeMinMax = Cartesian2.fromElements(
598
+ renderMinLongitude,
599
+ renderMaxLongitude,
600
+ shaderUniforms.ellipsoidRenderLongitudeMinMax
601
+ );
602
+ }
603
+
604
+ if (shapeHasLongitude) {
605
+ shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE"] = true;
606
+
607
+ const shapeIsLongitudeReversed = shapeMaxLongitude < shapeMinLongitude;
608
+
609
+ if (shapeIsLongitudeReversed) {
610
+ shaderDefines[
611
+ "ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED"
612
+ ] = true;
613
+ }
614
+
615
+ // delerp(longitudeUv, minLongitudeUv, maxLongitudeUv)
616
+ // (longitudeUv - minLongitudeUv) / (maxLongitudeUv - minLongitudeUv)
617
+ // longitudeUv / (maxLongitudeUv - minLongitudeUv) - minLongitudeUv / (maxLongitudeUv - minLongitudeUv)
618
+ // scale = 1.0 / (maxLongitudeUv - minLongitudeUv)
619
+ // scale = 1.0 / (((maxLongitude - pi) / (2.0 * pi)) - ((minLongitude - pi) / (2.0 * pi)))
620
+ // scale = 2.0 * pi / (maxLongitude - minLongitude)
621
+ // offset = -minLongitudeUv / (maxLongitudeUv - minLongitudeUv)
622
+ // offset = -((minLongitude - pi) / (2.0 * pi)) / (((maxLongitude - pi) / (2.0 * pi)) - ((minLongitude - pi) / (2.0 * pi)))
623
+ // offset = -(minLongitude - pi) / (maxLongitude - minLongitude)
624
+ const scale = defaultLongitudeRange / shapeLongitudeRange;
625
+ const offset =
626
+ -(shapeMinLongitude - defaultMinLongitude) / shapeLongitudeRange;
627
+ shaderUniforms.ellipsoidUvToShapeUvLongitude = Cartesian2.fromElements(
628
+ scale,
629
+ offset,
630
+ shaderUniforms.ellipsoidUvToShapeUvLongitude
631
+ );
632
+ }
633
+
634
+ if (renderHasLongitude) {
635
+ const renderIsMinLongitudeDiscontinuity = CesiumMath.equalsEpsilon(
636
+ renderMinLongitude,
637
+ defaultMinLongitude,
638
+ undefined,
639
+ epsilonLongitudeDiscontinuity
640
+ );
641
+ const renderIsMaxLongitudeDiscontinuity = CesiumMath.equalsEpsilon(
642
+ renderMaxLongitude,
643
+ defaultMaxLongitude,
644
+ undefined,
645
+ epsilonLongitudeDiscontinuity
646
+ );
647
+
648
+ if (renderIsMinLongitudeDiscontinuity) {
649
+ shaderDefines[
650
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY"
651
+ ] = true;
652
+ }
653
+ if (renderIsMaxLongitudeDiscontinuity) {
654
+ shaderDefines[
655
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY"
656
+ ] = true;
657
+ }
658
+ const uvShapeMinLongitude =
659
+ (shapeMinLongitude - defaultMinLongitude) / defaultLongitudeRange;
660
+ const uvShapeMaxLongitude =
661
+ (shapeMaxLongitude - defaultMinLongitude) / defaultLongitudeRange;
662
+
663
+ const uvRenderMaxLongitude =
664
+ (renderMaxLongitude - defaultMinLongitude) / defaultLongitudeRange;
665
+ const uvRenderLongitudeRangeZero =
666
+ 1.0 - renderLongitudeRange / defaultLongitudeRange;
667
+ const uvRenderLongitudeRangeZeroMid =
668
+ (uvRenderMaxLongitude + 0.5 * uvRenderLongitudeRangeZero) % 1.0;
669
+
670
+ shaderUniforms.ellipsoidShapeUvLongitudeMinMaxMid = Cartesian3.fromElements(
671
+ uvShapeMinLongitude,
672
+ uvShapeMaxLongitude,
673
+ uvRenderLongitudeRangeZeroMid,
674
+ shaderUniforms.ellipsoidShapeUvLongitudeMinMaxMid
675
+ );
676
+ }
677
+
678
+ if (renderHasLatitude) {
679
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE"] = true;
680
+
681
+ // Intersects a cone for min latitude
682
+ if (renderHasLatitudeMin) {
683
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN"] = true;
684
+ shaderDefines[
685
+ "ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN"
686
+ ] = intersectionCount;
687
+
688
+ if (renderIsLatitudeMinUnderHalf) {
689
+ shaderDefines[
690
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF"
691
+ ] = true;
692
+ intersectionCount += 1;
693
+ } else if (renderIsLatitudeMinHalf) {
694
+ shaderDefines[
695
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF"
696
+ ] = true;
697
+ intersectionCount += 1;
698
+ } else if (renderIsLatitudeMinOverHalf) {
699
+ shaderDefines[
700
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF"
701
+ ] = true;
702
+ intersectionCount += 2;
703
+ }
704
+ }
705
+
706
+ // Intersects a cone for max latitude
707
+ if (renderHasLatitudeMax) {
708
+ shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX"] = true;
709
+ shaderDefines[
710
+ "ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX"
711
+ ] = intersectionCount;
712
+
713
+ if (renderIsLatitudeMaxUnderHalf) {
714
+ shaderDefines[
715
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF"
716
+ ] = true;
717
+ intersectionCount += 2;
718
+ } else if (renderIsLatitudeMaxHalf) {
719
+ shaderDefines[
720
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF"
721
+ ] = true;
722
+ intersectionCount += 1;
723
+ } else if (renderIsLatitudeMaxOverHalf) {
724
+ shaderDefines[
725
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF"
726
+ ] = true;
727
+ intersectionCount += 1;
728
+ }
729
+ }
730
+
731
+ if (renderMinLatitude === renderMaxLatitude) {
732
+ shaderDefines[
733
+ "ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO"
734
+ ] = true;
735
+ }
736
+
737
+ const minCosHalfAngleSqr = Math.pow(
738
+ Math.cos(CesiumMath.PI_OVER_TWO - Math.abs(renderMinLatitude)),
739
+ 2.0
740
+ );
741
+ const maxCosHalfAngleSqr = Math.pow(
742
+ Math.cos(CesiumMath.PI_OVER_TWO - Math.abs(renderMaxLatitude)),
743
+ 2.0
744
+ );
745
+ shaderUniforms.ellipsoidRenderLatitudeCosSqrHalfMinMax = Cartesian2.fromElements(
746
+ minCosHalfAngleSqr,
747
+ maxCosHalfAngleSqr,
748
+ shaderUniforms.ellipsoidRenderLatitudeCosSqrHalfMinMax
749
+ );
750
+ }
751
+
752
+ if (shapeHasLatitude) {
753
+ shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE"] = true;
754
+
755
+ if (shapeMinLatitude === shapeMaxLatitude) {
756
+ shaderDefines[
757
+ "ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO"
758
+ ] = true;
759
+ }
760
+
761
+ // delerp(latitudeUv, minLatitudeUv, maxLatitudeUv)
762
+ // (latitudeUv - minLatitudeUv) / (maxLatitudeUv - minLatitudeUv)
763
+ // latitudeUv / (maxLatitudeUv - minLatitudeUv) - minLatitudeUv / (maxLatitudeUv - minLatitudeUv)
764
+ // scale = 1.0 / (maxLatitudeUv - minLatitudeUv)
765
+ // scale = 1.0 / (((maxLatitude - pi) / (2.0 * pi)) - ((minLatitude - pi) / (2.0 * pi)))
766
+ // scale = 2.0 * pi / (maxLatitude - minLatitude)
767
+ // offset = -minLatitudeUv / (maxLatitudeUv - minLatitudeUv)
768
+ // offset = -((minLatitude - -pi) / (2.0 * pi)) / (((maxLatitude - pi) / (2.0 * pi)) - ((minLatitude - pi) / (2.0 * pi)))
769
+ // offset = -(minLatitude - -pi) / (maxLatitude - minLatitude)
770
+ // offset = (-pi - minLatitude) / (maxLatitude - minLatitude)
771
+ const scale = defaultLatitudeRange / shapeLatitudeRange;
772
+ const offset = (defaultMinLatitude - shapeMinLatitude) / shapeLatitudeRange;
773
+ shaderUniforms.ellipsoidUvToShapeUvLatitude = Cartesian2.fromElements(
774
+ scale,
775
+ offset,
776
+ shaderUniforms.ellipsoidUvToShapeUvLatitude
777
+ );
778
+ }
779
+
780
+ if (isSphere) {
781
+ shaderDefines["ELLIPSOID_IS_SPHERE"] = true;
782
+ }
783
+
784
+ this.shaderMaximumIntersectionsLength = intersectionCount;
785
+
786
+ return true;
787
+ };
788
+
789
+ const scratchRectangle = new Rectangle();
790
+
791
+ /**
792
+ * Computes an oriented bounding box for a specified tile.
793
+ * The update function must be called before calling this function.
794
+ *
795
+ * @param {Number} tileLevel The tile's level.
796
+ * @param {Number} tileX The tile's x coordinate.
797
+ * @param {Number} tileY The tile's y coordinate.
798
+ * @param {Number} tileZ The tile's z coordinate.
799
+ * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified tile
800
+ * @returns {OrientedBoundingBox} The oriented bounding box.
801
+ */
802
+ VoxelEllipsoidShape.prototype.computeOrientedBoundingBoxForTile = function (
803
+ tileLevel,
804
+ tileX,
805
+ tileY,
806
+ tileZ,
807
+ result
808
+ ) {
809
+ //>>includeStart('debug', pragmas.debug);
810
+ Check.typeOf.number("tileLevel", tileLevel);
811
+ Check.typeOf.number("tileX", tileX);
812
+ Check.typeOf.number("tileY", tileY);
813
+ Check.typeOf.number("tileZ", tileZ);
814
+ Check.typeOf.object("result", result);
815
+ //>>includeEnd('debug');
816
+
817
+ const sizeAtLevel = 1.0 / Math.pow(2.0, tileLevel);
818
+ const minLongitudeLerp = tileX * sizeAtLevel;
819
+ const maxLongitudeLerp = (tileX + 1) * sizeAtLevel;
820
+ const minLatitudeLerp = tileY * sizeAtLevel;
821
+ const maxLatitudeLerp = (tileY + 1) * sizeAtLevel;
822
+ const minHeightLerp = tileZ * sizeAtLevel;
823
+ const maxHeightLerp = (tileZ + 1) * sizeAtLevel;
824
+
825
+ const rectangle = Rectangle.subsection(
826
+ this._rectangle,
827
+ minLongitudeLerp,
828
+ minLatitudeLerp,
829
+ maxLongitudeLerp,
830
+ maxLatitudeLerp,
831
+ scratchRectangle
832
+ );
833
+
834
+ const minHeight = CesiumMath.lerp(
835
+ this._minimumHeight,
836
+ this._maximumHeight,
837
+ minHeightLerp
838
+ );
839
+
840
+ const maxHeight = CesiumMath.lerp(
841
+ this._minimumHeight,
842
+ this._maximumHeight,
843
+ maxHeightLerp
844
+ );
845
+
846
+ return getEllipsoidChunkObb(
847
+ rectangle,
848
+ minHeight,
849
+ maxHeight,
850
+ this._ellipsoid,
851
+ this._translation,
852
+ this._rotation,
853
+ result
854
+ );
855
+ };
856
+
857
+ /**
858
+ * Computes an approximate step size for raymarching the root tile of a voxel grid.
859
+ * The update function must be called before calling this function.
860
+ *
861
+ * @param {Cartesian3} dimensions The voxel grid dimensions for a tile.
862
+ * @returns {Number} The step size.
863
+ */
864
+ VoxelEllipsoidShape.prototype.computeApproximateStepSize = function (
865
+ dimensions
866
+ ) {
867
+ //>>includeStart('debug', pragmas.debug);
868
+ Check.typeOf.object("dimensions", dimensions);
869
+ //>>includeEnd('debug');
870
+
871
+ const ellipsoid = this._ellipsoid;
872
+ const ellipsoidMaximumRadius = ellipsoid.maximumRadius;
873
+ const minimumHeight = this._minimumHeight;
874
+ const maximumHeight = this._maximumHeight;
875
+
876
+ const shellToEllipsoidRatio =
877
+ (maximumHeight - minimumHeight) / (ellipsoidMaximumRadius + maximumHeight);
878
+ const stepSize = (0.5 * shellToEllipsoidRatio) / dimensions.z;
879
+ return stepSize;
880
+ };
881
+
882
+ /**
883
+ * Computes an {@link OrientedBoundingBox} for a subregion of the shape.
884
+ *
885
+ * @function
886
+ *
887
+ * @param {Rectangle} rectangle The rectangle.
888
+ * @param {Number} minHeight The minimumZ.
889
+ * @param {Number} maxHeight The maximumZ.
890
+ * @param {Ellipsoid} ellipsoid The ellipsoid.
891
+ * @param {Cartesian3} translation The translation applied to the shape
892
+ * @param {Matrix3} rotation The rotation applied to the shape
893
+ * @param {OrientedBoundingBox} result The object onto which to store the result.
894
+ * @returns {OrientedBoundingBox} The oriented bounding box that contains this subregion.
895
+ *
896
+ * @private
897
+ */
898
+ function getEllipsoidChunkObb(
899
+ rectangle,
900
+ minHeight,
901
+ maxHeight,
902
+ ellipsoid,
903
+ translation,
904
+ rotation,
905
+ result
906
+ ) {
907
+ result = OrientedBoundingBox.fromRectangle(
908
+ rectangle,
909
+ minHeight,
910
+ maxHeight,
911
+ ellipsoid,
912
+ result
913
+ );
914
+ result.center = Cartesian3.add(result.center, translation, result.center);
915
+ result.halfAxes = Matrix3.multiply(
916
+ result.halfAxes,
917
+ rotation,
918
+ result.halfAxes
919
+ );
920
+ return result;
921
+ }
922
+
923
+ /**
924
+ * Defines the minimum bounds of the shape. Corresponds to minimum longitude, latitude, height.
925
+ *
926
+ * @type {Cartesian3}
927
+ * @constant
928
+ * @readonly
929
+ */
930
+ VoxelEllipsoidShape.DefaultMinBounds = Object.freeze(
931
+ new Cartesian3(-CesiumMath.PI, -CesiumMath.PI_OVER_TWO, -Number.MAX_VALUE)
932
+ );
933
+
934
+ /**
935
+ * Defines the maximum bounds of the shape. Corresponds to maximum longitude, latitude, height.
936
+ *
937
+ * @type {Cartesian3}
938
+ * @constant
939
+ * @readonly
940
+ */
941
+ VoxelEllipsoidShape.DefaultMaxBounds = Object.freeze(
942
+ new Cartesian3(+CesiumMath.PI, +CesiumMath.PI_OVER_TWO, +Number.MAX_VALUE)
943
+ );
944
+
945
+ export default VoxelEllipsoidShape;