@cesium/engine 7.0.0 → 9.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 (200) hide show
  1. package/Build/ThirdParty/Workers/z-worker-pako.js +1 -5
  2. package/Build/Workers/{chunk-7XEAYGZK.js → chunk-24YTYWNB.js} +10 -10
  3. package/Build/Workers/{chunk-IQBYFRVW.js → chunk-2632RVPI.js} +7 -7
  4. package/Build/Workers/chunk-2KACWKS4.js +501 -0
  5. package/Build/Workers/{chunk-QZAD5O7I.js → chunk-2XPLH3JY.js} +7 -7
  6. package/Build/Workers/{chunk-JY5YEZFA.js → chunk-2ZBL3MVO.js} +8 -8
  7. package/Build/Workers/{chunk-ZK5JOS3D.js → chunk-3NCVAGDA.js} +14 -14
  8. package/Build/Workers/{chunk-AR5DNBJ4.js → chunk-5R6VWLMH.js} +6 -6
  9. package/Build/Workers/{chunk-PTQQUQC3.js → chunk-5TIV3L26.js} +13 -13
  10. package/Build/Workers/{chunk-BZP4T2JJ.js → chunk-6WF3KIF5.js} +10 -10
  11. package/Build/Workers/{chunk-5WQ523AW.js → chunk-73FKKY52.js} +5 -5
  12. package/Build/Workers/{chunk-F6SE42BK.js → chunk-7COR472O.js} +15 -472
  13. package/Build/Workers/{chunk-72SANQJV.js → chunk-ADOVHYWO.js} +9 -5
  14. package/Build/Workers/{chunk-5YLJ77FF.js → chunk-BCU2LH5T.js} +12 -11
  15. package/Build/Workers/{chunk-4EBHOMFX.js → chunk-C3XBUYBO.js} +17 -17
  16. package/Build/Workers/{chunk-IX2JCCNM.js → chunk-C6OI26DR.js} +1 -1
  17. package/Build/Workers/{chunk-2HJWSU7B.js → chunk-CO35JNNE.js} +4 -4
  18. package/Build/Workers/{chunk-OVLG3FRS.js → chunk-DGDUKCJJ.js} +6 -6
  19. package/Build/Workers/{chunk-DTAIXKTO.js → chunk-DPUSFA7S.js} +6 -6
  20. package/Build/Workers/{chunk-R5X4OQT4.js → chunk-E6WXPSJS.js} +7 -7
  21. package/Build/Workers/{chunk-VK3EJHWI.js → chunk-EOXYZ34O.js} +2 -2
  22. package/Build/Workers/{chunk-RAEV7K66.js → chunk-EPKE7GE3.js} +5 -5
  23. package/Build/Workers/{chunk-GV56Q4LU.js → chunk-GFA4SMXV.js} +11 -11
  24. package/Build/Workers/{chunk-NKPBIX7F.js → chunk-GXUXEOE2.js} +1 -1
  25. package/Build/Workers/{chunk-NY3K4IM3.js → chunk-HBQPB6IH.js} +12 -12
  26. package/Build/Workers/{chunk-6HZQPRUS.js → chunk-I37B3MZ2.js} +1 -1
  27. package/Build/Workers/{chunk-VRGFV2UO.js → chunk-L4BW3RUA.js} +10 -10
  28. package/Build/Workers/{chunk-6VJVYK2V.js → chunk-LAQP3SCC.js} +2 -2
  29. package/Build/Workers/{chunk-PNBGBETF.js → chunk-LQJ5FFFR.js} +10 -10
  30. package/Build/Workers/{chunk-UAEW6HKG.js → chunk-M2AYBTNH.js} +13 -13
  31. package/Build/Workers/{chunk-YUCVWAY6.js → chunk-MWV7IZK4.js} +7 -7
  32. package/Build/Workers/{chunk-JXDC723O.js → chunk-N4KXMWQU.js} +2 -2
  33. package/Build/Workers/{chunk-XWXM2O2R.js → chunk-NP2GYYE5.js} +6 -6
  34. package/Build/Workers/{chunk-GEJTYLCO.js → chunk-NZWNZA6S.js} +5 -5
  35. package/Build/Workers/{chunk-LZGHD6NY.js → chunk-P2YAAMT2.js} +15 -15
  36. package/Build/Workers/{chunk-S6SKF6DT.js → chunk-P4XKB3QZ.js} +5 -5
  37. package/Build/Workers/{chunk-U2VCRRQW.js → chunk-PXB7T27O.js} +6 -6
  38. package/Build/Workers/{chunk-RV7ZYPFT.js → chunk-QCQUZGXI.js} +4 -4
  39. package/Build/Workers/{chunk-JJ4VBOQ3.js → chunk-QKBGRKKG.js} +4 -4
  40. package/Build/Workers/{chunk-ODW7WYM4.js → chunk-RMOEYCZW.js} +2 -2
  41. package/Build/Workers/{chunk-ZUA2UUNV.js → chunk-RSJXEO2A.js} +2 -2
  42. package/Build/Workers/{chunk-UDO6BFSF.js → chunk-RV7ZOSS6.js} +13 -13
  43. package/Build/Workers/{chunk-LZ7JIV3K.js → chunk-SE4PXOEA.js} +17 -17
  44. package/Build/Workers/{chunk-S4MAZ3SS.js → chunk-SS4ESNE3.js} +2 -2
  45. package/Build/Workers/{chunk-AIPU2VSX.js → chunk-TJBU6GML.js} +6 -6
  46. package/Build/Workers/{chunk-5M3U6ZMA.js → chunk-TZORKRNK.js} +1 -1
  47. package/Build/Workers/{chunk-MY3VNFGQ.js → chunk-VR5RBW52.js} +7 -7
  48. package/Build/Workers/{chunk-FP6GYBFX.js → chunk-WHUSTDIB.js} +10 -10
  49. package/Build/Workers/{chunk-5HDYHG3F.js → chunk-X2F6BEPY.js} +13 -13
  50. package/Build/Workers/{chunk-WZU2YLWG.js → chunk-X6XOMPWL.js} +3 -3
  51. package/Build/Workers/{chunk-UGK3FCDY.js → chunk-YDVSBWEO.js} +1 -1
  52. package/Build/Workers/{chunk-46UD5ABS.js → chunk-YV4H2Y7M.js} +4 -4
  53. package/Build/Workers/{chunk-WBQCVXR3.js → chunk-Z7FQLK6N.js} +4 -4
  54. package/Build/Workers/{chunk-L2ZN645J.js → chunk-ZNVSKMQ2.js} +6 -6
  55. package/Build/Workers/{chunk-JCNXK6EL.js → chunk-ZYPTP7GS.js} +11 -11
  56. package/Build/Workers/combineGeometry.js +24 -23
  57. package/Build/Workers/createBoxGeometry.js +18 -17
  58. package/Build/Workers/createBoxOutlineGeometry.js +16 -15
  59. package/Build/Workers/createCircleGeometry.js +26 -25
  60. package/Build/Workers/createCircleOutlineGeometry.js +19 -18
  61. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -32
  62. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -30
  63. package/Build/Workers/createCorridorGeometry.js +29 -28
  64. package/Build/Workers/createCorridorOutlineGeometry.js +28 -27
  65. package/Build/Workers/createCylinderGeometry.js +20 -19
  66. package/Build/Workers/createCylinderOutlineGeometry.js +18 -17
  67. package/Build/Workers/createEllipseGeometry.js +26 -25
  68. package/Build/Workers/createEllipseOutlineGeometry.js +19 -18
  69. package/Build/Workers/createEllipsoidGeometry.js +19 -18
  70. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -17
  71. package/Build/Workers/createFrustumGeometry.js +18 -17
  72. package/Build/Workers/createFrustumOutlineGeometry.js +18 -17
  73. package/Build/Workers/createGeometry.js +54 -33
  74. package/Build/Workers/createGroundPolylineGeometry.js +22 -21
  75. package/Build/Workers/createPlaneGeometry.js +16 -15
  76. package/Build/Workers/createPlaneOutlineGeometry.js +15 -14
  77. package/Build/Workers/createPolygonGeometry.js +33 -32
  78. package/Build/Workers/createPolygonOutlineGeometry.js +30 -29
  79. package/Build/Workers/createPolylineGeometry.js +25 -24
  80. package/Build/Workers/createPolylineVolumeGeometry.js +31 -30
  81. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -26
  82. package/Build/Workers/createRectangleGeometry.js +27 -26
  83. package/Build/Workers/createRectangleOutlineGeometry.js +20 -19
  84. package/Build/Workers/createSimplePolylineGeometry.js +23 -22
  85. package/Build/Workers/createSphereGeometry.js +19 -18
  86. package/Build/Workers/createSphereOutlineGeometry.js +18 -17
  87. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  88. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  89. package/Build/Workers/createVectorTileGeometries.js +24 -23
  90. package/Build/Workers/createVectorTilePoints.js +12 -12
  91. package/Build/Workers/createVectorTilePolygons.js +22 -21
  92. package/Build/Workers/createVectorTilePolylines.js +14 -14
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -21
  94. package/Build/Workers/createVerticesFromHeightmap.js +22 -21
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -18
  96. package/Build/Workers/createWallGeometry.js +24 -23
  97. package/Build/Workers/createWallOutlineGeometry.js +23 -22
  98. package/Build/Workers/decodeDraco.js +11 -11
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  100. package/Build/Workers/decodeI3S.js +601 -92
  101. package/Build/Workers/transcodeKTX2.js +7 -7
  102. package/Build/Workers/transferTypedArrayTest.js +1 -1
  103. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -21
  104. package/Source/Core/Check.d.ts +127 -0
  105. package/Source/Core/Check.js +0 -1
  106. package/Source/Core/Ellipsoid.js +6 -0
  107. package/Source/Core/Geometry.js +1 -1
  108. package/Source/Core/IntersectionTests.js +6 -3
  109. package/Source/Core/Ion.js +1 -1
  110. package/Source/Core/PixelFormat.js +5 -0
  111. package/Source/Core/PolygonGeometry.js +1 -1
  112. package/Source/Core/Transforms.js +3 -0
  113. package/Source/Core/VerticalExaggeration.js +2 -1
  114. package/Source/Core/srgbToLinear.js +32 -0
  115. package/Source/DataSources/CzmlDataSource.js +51 -23
  116. package/Source/DataSources/DataSourceDisplay.js +27 -0
  117. package/Source/DataSources/Entity.js +20 -2
  118. package/Source/DataSources/GeometryUpdaterSet.js +114 -0
  119. package/Source/DataSources/GeometryVisualizer.js +19 -83
  120. package/Source/Renderer/Context.js +10 -0
  121. package/Source/Renderer/ContextLimits.js +2 -0
  122. package/Source/Renderer/demodernizeShader.js +4 -1
  123. package/Source/Scene/ArcGisMapService.js +1 -1
  124. package/Source/Scene/Axis.js +12 -7
  125. package/Source/Scene/Billboard.js +32 -0
  126. package/Source/Scene/BillboardCollection.js +1 -1
  127. package/Source/Scene/BingMapsImageryProvider.js +4 -0
  128. package/Source/Scene/Camera.js +46 -4
  129. package/Source/Scene/Cesium3DTilesVoxelProvider.js +2 -9
  130. package/Source/Scene/Cesium3DTileset.js +10 -7
  131. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +2 -4
  132. package/Source/Scene/FrameState.js +5 -0
  133. package/Source/Scene/Globe.js +0 -67
  134. package/Source/Scene/GlobeTranslucencyState.js +1 -1
  135. package/Source/Scene/GltfPipeline/updateVersion.js +69 -68
  136. package/Source/Scene/I3SDataProvider.js +270 -53
  137. package/Source/Scene/I3SDecoder.js +8 -1
  138. package/Source/Scene/I3SFeature.js +2 -5
  139. package/Source/Scene/I3SField.js +136 -31
  140. package/Source/Scene/I3SGeometry.js +70 -2
  141. package/Source/Scene/I3SLayer.js +55 -10
  142. package/Source/Scene/I3SNode.js +175 -18
  143. package/Source/Scene/I3SStatistics.js +94 -0
  144. package/Source/Scene/I3SSublayer.js +176 -0
  145. package/Source/Scene/I3SSymbology.js +337 -0
  146. package/Source/Scene/KeyframeNode.js +1 -1
  147. package/Source/Scene/Label.js +33 -0
  148. package/Source/Scene/LabelCollection.js +2 -1
  149. package/Source/Scene/Model/pickModel.js +25 -7
  150. package/Source/Scene/PickFramebuffer.js +37 -2
  151. package/Source/Scene/Picking.js +113 -39
  152. package/Source/Scene/Primitive.js +6 -5
  153. package/Source/Scene/Scene.js +126 -42
  154. package/Source/Scene/ScreenSpaceCameraController.js +21 -7
  155. package/Source/Scene/SensorVolumePortionToDisplay.js +69 -0
  156. package/Source/Scene/SpatialNode.js +12 -19
  157. package/Source/Scene/StructuralMetadata.js +1 -1
  158. package/Source/Scene/VoxelBoxShape.js +67 -6
  159. package/Source/Scene/VoxelCell.js +273 -0
  160. package/Source/Scene/VoxelCylinderShape.js +117 -163
  161. package/Source/Scene/VoxelEllipsoidShape.js +255 -304
  162. package/Source/Scene/VoxelPrimitive.js +109 -15
  163. package/Source/Scene/VoxelRenderResources.js +12 -3
  164. package/Source/Scene/VoxelShape.js +7 -4
  165. package/Source/Scene/VoxelTraversal.js +76 -54
  166. package/Source/Scene/buildVoxelDrawCommands.js +23 -0
  167. package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -0
  168. package/Source/Scene/processVoxelProperties.js +3 -0
  169. package/Source/Shaders/Voxels/IntersectBox.glsl +21 -47
  170. package/Source/Shaders/Voxels/IntersectBox.js +21 -47
  171. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +1 -1
  172. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +1 -1
  173. package/Source/Shaders/Voxels/IntersectCylinder.glsl +76 -203
  174. package/Source/Shaders/Voxels/IntersectCylinder.js +76 -203
  175. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +220 -229
  176. package/Source/Shaders/Voxels/IntersectEllipsoid.js +220 -229
  177. package/Source/Shaders/Voxels/IntersectLongitude.glsl +102 -0
  178. package/Source/Shaders/Voxels/IntersectLongitude.js +104 -0
  179. package/Source/Shaders/Voxels/IntersectionUtils.glsl +33 -11
  180. package/Source/Shaders/Voxels/IntersectionUtils.js +33 -11
  181. package/Source/Shaders/Voxels/Megatexture.glsl +1 -2
  182. package/Source/Shaders/Voxels/Megatexture.js +1 -2
  183. package/Source/Shaders/Voxels/Octree.glsl +14 -9
  184. package/Source/Shaders/Voxels/Octree.js +14 -9
  185. package/Source/Shaders/Voxels/VoxelFS.glsl +128 -40
  186. package/Source/Shaders/Voxels/VoxelFS.js +128 -40
  187. package/Source/Shaders/Voxels/VoxelUtils.glsl +31 -0
  188. package/Source/Shaders/Voxels/VoxelUtils.js +33 -0
  189. package/Source/Shaders/Voxels/convertUvToBox.glsl +24 -3
  190. package/Source/Shaders/Voxels/convertUvToBox.js +24 -4
  191. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +64 -40
  192. package/Source/Shaders/Voxels/convertUvToCylinder.js +64 -40
  193. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +100 -91
  194. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +100 -91
  195. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  196. package/Source/Workers/createGeometry.js +40 -11
  197. package/Source/Workers/decodeI3S.js +720 -94
  198. package/index.d.ts +542 -40
  199. package/index.js +75 -66
  200. package/package.json +2 -2
@@ -96,9 +96,8 @@ function VoxelCylinderShape() {
96
96
  * @readonly
97
97
  */
98
98
  this.shaderUniforms = {
99
- cylinderUvToRenderBoundsScale: new Cartesian3(),
100
- cylinderUvToRenderBoundsTranslate: new Cartesian3(),
101
- cylinderUvToRenderRadiusMin: 0.0,
99
+ cylinderRenderHeightMinMax: new Cartesian2(),
100
+ cylinderRenderRadiusMinMax: new Cartesian2(),
102
101
  cylinderRenderAngleMinMax: new Cartesian2(),
103
102
  cylinderUvToShapeUvRadius: new Cartesian2(),
104
103
  cylinderUvToShapeUvHeight: new Cartesian2(),
@@ -113,22 +112,15 @@ function VoxelCylinderShape() {
113
112
  */
114
113
  this.shaderDefines = {
115
114
  CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN: undefined,
116
- CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX: undefined,
117
115
  CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT: undefined,
118
- CYLINDER_HAS_RENDER_BOUNDS_HEIGHT: undefined,
119
- CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT: undefined,
120
116
  CYLINDER_HAS_RENDER_BOUNDS_ANGLE: undefined,
121
117
  CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO: undefined,
122
118
  CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF: undefined,
123
- CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF: undefined,
124
119
  CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF: undefined,
125
120
 
126
121
  CYLINDER_HAS_SHAPE_BOUNDS_RADIUS: undefined,
127
- CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT: undefined,
128
122
  CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT: undefined,
129
- CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT: undefined,
130
123
  CYLINDER_HAS_SHAPE_BOUNDS_ANGLE: undefined,
131
- CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO: undefined,
132
124
  CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY: undefined,
133
125
  CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY: undefined,
134
126
  CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED: undefined,
@@ -147,17 +139,6 @@ function VoxelCylinderShape() {
147
139
  }
148
140
 
149
141
  const scratchScale = new Cartesian3();
150
- const scratchBoundsTranslation = new Cartesian3();
151
- const scratchBoundsScale = new Cartesian3();
152
- const scratchBoundsScaleMatrix = new Matrix3();
153
- const scratchTransformLocalToBounds = new Matrix4();
154
- const scratchTransformUvToBounds = new Matrix4();
155
-
156
- const transformUvToLocal = Matrix4.fromRotationTranslation(
157
- Matrix3.fromUniformScale(2.0, new Matrix3()),
158
- new Cartesian3(-1.0, -1.0, -1.0),
159
- new Matrix4()
160
- );
161
142
 
162
143
  /**
163
144
  * Update the shape's state.
@@ -324,17 +305,12 @@ VoxelCylinderShape.prototype.update = function (
324
305
  shapeAngleRange > defaultAngleRangeHalf + epsilonAngle &&
325
306
  shapeAngleRange < defaultAngleRange - epsilonAngle;
326
307
  const shapeIsAngleFlipped =
327
- shapeAngleRange > epsilonAngle &&
328
308
  shapeAngleRange < defaultAngleRangeHalf - epsilonAngle;
329
309
  const shapeIsAngleRangeHalf =
330
310
  shapeAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
331
311
  shapeAngleRange <= defaultAngleRangeHalf + epsilonAngle;
332
- const shapeIsAngleRangeZero = shapeAngleRange <= epsilonAngle;
333
312
  const shapeHasAngle =
334
- shapeIsAngleRegular ||
335
- shapeIsAngleFlipped ||
336
- shapeIsAngleRangeHalf ||
337
- shapeIsAngleRangeZero;
313
+ shapeIsAngleRegular || shapeIsAngleFlipped || shapeIsAngleRangeHalf;
338
314
  const shapeIsMinAngleDiscontinuity = CesiumMath.equalsEpsilon(
339
315
  shapeMinAngle,
340
316
  defaultMinAngle,
@@ -348,32 +324,21 @@ VoxelCylinderShape.prototype.update = function (
348
324
  epsilonAngleDiscontinuity
349
325
  );
350
326
 
351
- const renderIsDefaultMaxRadius = renderMaxRadius === defaultMaxRadius;
352
327
  const renderIsDefaultMinRadius = renderMinRadius === defaultMinRadius;
353
- const renderIsDefaultHeight =
354
- renderMinHeight === defaultMinHeight &&
355
- renderMaxHeight === defaultMaxHeight;
356
328
  const renderIsAngleReversed = renderMaxAngle < renderMinAngle;
357
329
  const renderAngleRange =
358
330
  renderMaxAngle - renderMinAngle + renderIsAngleReversed * defaultAngleRange;
359
331
  const renderIsAngleRegular =
360
- renderAngleRange > defaultAngleRangeHalf + epsilonAngle &&
332
+ renderAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
361
333
  renderAngleRange < defaultAngleRange - epsilonAngle;
362
334
  const renderIsAngleFlipped =
363
335
  renderAngleRange > epsilonAngle &&
364
336
  renderAngleRange < defaultAngleRangeHalf - epsilonAngle;
365
- const renderIsAngleRangeHalf =
366
- renderAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
367
- renderAngleRange <= defaultAngleRangeHalf + epsilonAngle;
368
337
  const renderIsAngleRangeZero = renderAngleRange <= epsilonAngle;
369
338
  const renderHasAngle =
370
- renderIsAngleRegular ||
371
- renderIsAngleFlipped ||
372
- renderIsAngleRangeHalf ||
373
- renderIsAngleRangeZero;
339
+ renderIsAngleRegular || renderIsAngleFlipped || renderIsAngleRangeZero;
374
340
 
375
- const shaderUniforms = this.shaderUniforms;
376
- const shaderDefines = this.shaderDefines;
341
+ const { shaderUniforms, shaderDefines } = this;
377
342
 
378
343
  // To keep things simple, clear the defines every time
379
344
  for (const key in shaderDefines) {
@@ -392,28 +357,16 @@ VoxelCylinderShape.prototype.update = function (
392
357
  shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN"] = true;
393
358
  shaderDefines["CYLINDER_INTERSECTION_INDEX_RADIUS_MIN"] = intersectionCount;
394
359
  intersectionCount += 1;
395
-
396
- shaderUniforms.cylinderUvToRenderRadiusMin =
397
- renderMaxRadius / renderMinRadius;
398
- }
399
- if (!renderIsDefaultMaxRadius) {
400
- shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX"] = true;
401
360
  }
361
+ shaderUniforms.cylinderRenderRadiusMinMax = Cartesian2.fromElements(
362
+ renderMinRadius,
363
+ renderMaxRadius,
364
+ shaderUniforms.cylinderRenderRadiusMinMax
365
+ );
366
+
402
367
  if (renderMinRadius === renderMaxRadius) {
403
368
  shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT"] = true;
404
369
  }
405
- if (!renderIsDefaultHeight) {
406
- shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_HEIGHT"] = true;
407
- }
408
- if (renderMinHeight === renderMaxHeight) {
409
- shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT"] = true;
410
- }
411
- if (shapeMinHeight === shapeMaxHeight) {
412
- shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT"] = true;
413
- }
414
- if (shapeMinRadius === shapeMaxRadius) {
415
- shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT"] = true;
416
- }
417
370
  if (!shapeIsDefaultRadius) {
418
371
  shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_RADIUS"] = true;
419
372
 
@@ -423,8 +376,13 @@ VoxelCylinderShape.prototype.update = function (
423
376
  // scale = 1.0 / (maxRadius - minRadius)
424
377
  // offset = -minRadius / (maxRadius - minRadius)
425
378
  // offset = minRadius / (minRadius - maxRadius)
426
- const scale = 1.0 / (shapeMaxRadius - shapeMinRadius);
427
- const offset = shapeMinRadius / (shapeMinRadius - shapeMaxRadius);
379
+ const radiusRange = shapeMaxRadius - shapeMinRadius;
380
+ let scale = 0.0;
381
+ let offset = 1.0;
382
+ if (radiusRange !== 0.0) {
383
+ scale = 1.0 / radiusRange;
384
+ offset = -shapeMinRadius / radiusRange;
385
+ }
428
386
  shaderUniforms.cylinderUvToShapeUvRadius = Cartesian2.fromElements(
429
387
  scale,
430
388
  offset,
@@ -446,50 +404,24 @@ VoxelCylinderShape.prototype.update = function (
446
404
  // offset = -2.0 * (minHeight * 0.5 + 0.5) / (maxHeight - minHeight)
447
405
  // offset = -(minHeight + 1.0) / (maxHeight - minHeight)
448
406
  // offset = (minHeight + 1.0) / (minHeight - maxHeight)
449
- const scale = 2.0 / (shapeMaxHeight - shapeMinHeight);
450
- const offset = (shapeMinHeight + 1.0) / (shapeMinHeight - shapeMaxHeight);
407
+ const heightRange = shapeMaxHeight - shapeMinHeight;
408
+ let scale = 0.0;
409
+ let offset = 1.0;
410
+ if (heightRange !== 0.0) {
411
+ scale = 2.0 / heightRange;
412
+ offset = -(shapeMinHeight + 1.0) / heightRange;
413
+ }
451
414
  shaderUniforms.cylinderUvToShapeUvHeight = Cartesian2.fromElements(
452
415
  scale,
453
416
  offset,
454
417
  shaderUniforms.cylinderUvToShapeUvHeight
455
418
  );
456
419
  }
457
-
458
- if (!renderIsDefaultMaxRadius || !renderIsDefaultHeight) {
459
- const heightScale = 0.5 * (renderMaxHeight - renderMinHeight);
460
- const scaleLocalToBounds = Cartesian3.fromElements(
461
- 1.0 / renderMaxRadius,
462
- 1.0 / renderMaxRadius,
463
- 1.0 / (heightScale === 0.0 ? 1.0 : heightScale),
464
- scratchBoundsScale
465
- );
466
- // -inverse(scale) * translation // affine inverse
467
- // -inverse(scale) * 0.5 * (minHeight + maxHeight)
468
- const translateLocalToBounds = Cartesian3.fromElements(
469
- 0.0,
470
- 0.0,
471
- -scaleLocalToBounds.z * 0.5 * (renderMinHeight + renderMaxHeight),
472
- scratchBoundsTranslation
473
- );
474
- const transformLocalToBounds = Matrix4.fromRotationTranslation(
475
- Matrix3.fromScale(scaleLocalToBounds, scratchBoundsScaleMatrix),
476
- translateLocalToBounds,
477
- scratchTransformLocalToBounds
478
- );
479
- const transformUvToBounds = Matrix4.multiplyTransformation(
480
- transformLocalToBounds,
481
- transformUvToLocal,
482
- scratchTransformUvToBounds
483
- );
484
- shaderUniforms.cylinderUvToRenderBoundsScale = Matrix4.getScale(
485
- transformUvToBounds,
486
- shaderUniforms.cylinderUvToRenderBoundsScale
487
- );
488
- shaderUniforms.cylinderUvToRenderBoundsTranslate = Matrix4.getTranslation(
489
- transformUvToBounds,
490
- shaderUniforms.cylinderUvToRenderBoundsTranslate
491
- );
492
- }
420
+ shaderUniforms.cylinderRenderHeightMinMax = Cartesian2.fromElements(
421
+ renderMinHeight,
422
+ renderMaxHeight,
423
+ shaderUniforms.cylinderRenderHeightMinMax
424
+ );
493
425
 
494
426
  if (shapeIsAngleReversed) {
495
427
  shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED"] = true;
@@ -505,9 +437,6 @@ VoxelCylinderShape.prototype.update = function (
505
437
  } else if (renderIsAngleFlipped) {
506
438
  shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF"] = true;
507
439
  intersectionCount += 2;
508
- } else if (renderIsAngleRangeHalf) {
509
- shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF"] = true;
510
- intersectionCount += 1;
511
440
  } else if (renderIsAngleRangeZero) {
512
441
  shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO"] = true;
513
442
  intersectionCount += 2;
@@ -516,15 +445,12 @@ VoxelCylinderShape.prototype.update = function (
516
445
  shaderUniforms.cylinderRenderAngleMinMax = Cartesian2.fromElements(
517
446
  renderMinAngle,
518
447
  renderMaxAngle,
519
- shaderUniforms.cylinderAngleMinMax
448
+ shaderUniforms.cylinderRenderAngleMinMax
520
449
  );
521
450
  }
522
451
 
523
452
  if (shapeHasAngle) {
524
453
  shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE"] = true;
525
- if (shapeIsAngleRangeZero) {
526
- shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO"] = true;
527
- }
528
454
  if (shapeIsMinAngleDiscontinuity) {
529
455
  shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY"] = true;
530
456
  }
@@ -553,13 +479,21 @@ VoxelCylinderShape.prototype.update = function (
553
479
  // offset = -uvMinAngle / (uvMaxAngle - uvMinAngle)
554
480
  // offset = -((minAngle - pi) / (2.0 * pi)) / (((maxAngle - pi) / (2.0 * pi)) - ((minAngle - pi) / (2.0 * pi)))
555
481
  // offset = -(minAngle - pi) / (maxAngle - minAngle)
556
- const scale = defaultAngleRange / shapeAngleRange;
557
- const offset = -(shapeMinAngle - defaultMinAngle) / shapeAngleRange;
558
- shaderUniforms.cylinderUvToShapeUvAngle = Cartesian2.fromElements(
559
- scale,
560
- offset,
561
- shaderUniforms.cylinderUvToShapeUvAngle
562
- );
482
+ if (shapeAngleRange <= epsilonAngle) {
483
+ shaderUniforms.cylinderUvToShapeUvAngle = Cartesian2.fromElements(
484
+ 0.0,
485
+ 1.0,
486
+ shaderUniforms.cylinderUvToShapeUvAngle
487
+ );
488
+ } else {
489
+ const scale = defaultAngleRange / shapeAngleRange;
490
+ const offset = -(shapeMinAngle - defaultMinAngle) / shapeAngleRange;
491
+ shaderUniforms.cylinderUvToShapeUvAngle = Cartesian2.fromElements(
492
+ scale,
493
+ offset,
494
+ shaderUniforms.cylinderUvToShapeUvAngle
495
+ );
496
+ }
563
497
  }
564
498
 
565
499
  this.shaderMaximumIntersectionsLength = intersectionCount;
@@ -645,65 +579,85 @@ VoxelCylinderShape.prototype.computeOrientedBoundingBoxForTile = function (
645
579
  );
646
580
  };
647
581
 
648
- const scratchOrientedBoundingBox = new OrientedBoundingBox();
649
- const scratchVoxelScale = new Cartesian3();
650
- const scratchRootScale = new Cartesian3();
651
- const scratchScaleRatio = new Cartesian3();
582
+ const sampleSizeScratch = new Cartesian3();
583
+ const scratchTileMinBounds = new Cartesian3();
584
+ const scratchTileMaxBounds = new Cartesian3();
652
585
 
653
586
  /**
654
- * Computes an approximate step size for raymarching the root tile of a voxel grid.
587
+ * Computes an oriented bounding box for a specified sample within a specified tile.
655
588
  * The update function must be called before calling this function.
656
589
  *
657
- * @param {Cartesian3} dimensions The voxel grid dimensions for a tile.
658
- * @returns {number} The step size.
590
+ * @param {SpatialNode} spatialNode The spatial node containing the sample
591
+ * @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding
592
+ * @param {Cartesian3} tileUv The sample coordinate within the tile
593
+ * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample
594
+ * @returns {OrientedBoundingBox} The oriented bounding box.
659
595
  */
660
- VoxelCylinderShape.prototype.computeApproximateStepSize = function (
661
- dimensions
596
+ VoxelCylinderShape.prototype.computeOrientedBoundingBoxForSample = function (
597
+ spatialNode,
598
+ tileDimensions,
599
+ tileUv,
600
+ result
662
601
  ) {
663
602
  //>>includeStart('debug', pragmas.debug);
664
- Check.typeOf.object("dimensions", dimensions);
603
+ Check.typeOf.object("spatialNode", spatialNode);
604
+ Check.typeOf.object("tileDimensions", tileDimensions);
605
+ Check.typeOf.object("tileUv", tileUv);
606
+ Check.typeOf.object("result", result);
665
607
  //>>includeEnd('debug');
666
608
 
667
- const shapeTransform = this.shapeTransform;
668
- const minRadius = this._minimumRadius;
669
- const maxRadius = this._maximumRadius;
670
- const minHeight = this._minimumHeight;
671
- const maxHeight = this._maximumHeight;
672
- const minAngle = this._minimumAngle;
673
- const maxAngle = this._maximumAngle;
674
-
675
- const lerpRadius = 1.0 - 1.0 / dimensions.x;
676
- const lerpHeight = 1.0 - 1.0 / dimensions.y;
677
- const lerpAngle = 1.0 - 1.0 / dimensions.z;
678
-
679
- // Compare the size of an outermost cylinder voxel to the total cylinder
680
- const voxelMinimumRadius = CesiumMath.lerp(minRadius, maxRadius, lerpRadius);
681
- const voxelMinimumHeight = CesiumMath.lerp(minHeight, maxHeight, lerpHeight);
682
- const voxelMinimumAngle = CesiumMath.lerp(minAngle, maxAngle, lerpAngle);
683
- const voxelMaximumRadius = maxRadius;
684
- const voxelMaximumHeight = maxHeight;
685
- const voxelMaximumAngle = maxAngle;
686
-
687
- const voxelObb = getCylinderChunkObb(
688
- voxelMinimumRadius,
689
- voxelMaximumRadius,
690
- voxelMinimumHeight,
691
- voxelMaximumHeight,
692
- voxelMinimumAngle,
693
- voxelMaximumAngle,
694
- shapeTransform,
695
- scratchOrientedBoundingBox
696
- );
697
-
698
- const voxelScale = Matrix3.getScale(voxelObb.halfAxes, scratchVoxelScale);
699
- const rootScale = Matrix4.getScale(shapeTransform, scratchRootScale);
700
- const scaleRatio = Cartesian3.divideComponents(
701
- voxelScale,
702
- rootScale,
703
- scratchScaleRatio
704
- );
705
- const stepSize = Cartesian3.minimumComponent(scaleRatio);
706
- return stepSize;
609
+ const tileSizeAtLevel = 1.0 / Math.pow(2.0, spatialNode.level);
610
+ const sampleSize = Cartesian3.divideComponents(
611
+ Cartesian3.ONE,
612
+ tileDimensions,
613
+ sampleSizeScratch
614
+ );
615
+ const sampleSizeAtLevel = Cartesian3.multiplyByScalar(
616
+ sampleSize,
617
+ tileSizeAtLevel,
618
+ sampleSizeScratch
619
+ );
620
+
621
+ const minLerp = Cartesian3.multiplyByScalar(
622
+ Cartesian3.fromElements(
623
+ spatialNode.x + tileUv.x,
624
+ spatialNode.y + tileUv.y,
625
+ spatialNode.z + tileUv.z,
626
+ scratchTileMinBounds
627
+ ),
628
+ tileSizeAtLevel,
629
+ scratchTileMinBounds
630
+ );
631
+ const maxLerp = Cartesian3.add(
632
+ minLerp,
633
+ sampleSizeAtLevel,
634
+ scratchTileMaxBounds
635
+ );
636
+
637
+ const minimumRadius = this._minimumRadius;
638
+ const maximumRadius = this._maximumRadius;
639
+ const minimumHeight = this._minimumHeight;
640
+ const maximumHeight = this._maximumHeight;
641
+ const minimumAngle = this._minimumAngle;
642
+ const maximumAngle = this._maximumAngle;
643
+
644
+ const radiusStart = CesiumMath.lerp(minimumRadius, maximumRadius, minLerp.x);
645
+ const radiusEnd = CesiumMath.lerp(minimumRadius, maximumRadius, maxLerp.x);
646
+ const heightStart = CesiumMath.lerp(minimumHeight, maximumHeight, minLerp.y);
647
+ const heightEnd = CesiumMath.lerp(minimumHeight, maximumHeight, maxLerp.y);
648
+ const angleStart = CesiumMath.lerp(minimumAngle, maximumAngle, minLerp.z);
649
+ const angleEnd = CesiumMath.lerp(minimumAngle, maximumAngle, maxLerp.z);
650
+
651
+ return getCylinderChunkObb(
652
+ radiusStart,
653
+ radiusEnd,
654
+ heightStart,
655
+ heightEnd,
656
+ angleStart,
657
+ angleEnd,
658
+ this.shapeTransform,
659
+ result
660
+ );
707
661
  };
708
662
 
709
663
  /**