@cesium/engine 7.0.0 → 8.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.
- package/Build/Workers/{chunk-MY3VNFGQ.js → chunk-23UFSGND.js} +7 -7
- package/Build/Workers/{chunk-IQBYFRVW.js → chunk-2A75IWRS.js} +7 -7
- package/Build/Workers/{chunk-VRGFV2UO.js → chunk-2FRVPMCS.js} +10 -10
- package/Build/Workers/{chunk-46UD5ABS.js → chunk-2FWRMUTY.js} +4 -4
- package/Build/Workers/{chunk-DTAIXKTO.js → chunk-2UPKWTMJ.js} +6 -6
- package/Build/Workers/{chunk-6VJVYK2V.js → chunk-34FXV7D7.js} +2 -2
- package/Build/Workers/{chunk-ODW7WYM4.js → chunk-3VAZEH7M.js} +2 -2
- package/Build/Workers/{chunk-U2VCRRQW.js → chunk-4DO5W5XZ.js} +6 -6
- package/Build/Workers/{chunk-VK3EJHWI.js → chunk-4H7PY4U5.js} +2 -2
- package/Build/Workers/{chunk-RV7ZYPFT.js → chunk-5QULIR53.js} +4 -4
- package/Build/Workers/{chunk-JY5YEZFA.js → chunk-7TC63SJW.js} +8 -8
- package/Build/Workers/{chunk-JJ4VBOQ3.js → chunk-7ZFGPDJA.js} +4 -4
- package/Build/Workers/{chunk-FP6GYBFX.js → chunk-A5DWLWCY.js} +10 -10
- package/Build/Workers/{chunk-5M3U6ZMA.js → chunk-BBWDMCVU.js} +1 -1
- package/Build/Workers/{chunk-WZU2YLWG.js → chunk-BG4UCVXN.js} +3 -3
- package/Build/Workers/{chunk-5WQ523AW.js → chunk-BIKA3NRA.js} +5 -5
- package/Build/Workers/{chunk-PTQQUQC3.js → chunk-BROJAZRZ.js} +13 -13
- package/Build/Workers/{chunk-YUCVWAY6.js → chunk-DDUQAJ4P.js} +7 -7
- package/Build/Workers/{chunk-2HJWSU7B.js → chunk-EERJKOAF.js} +4 -4
- package/Build/Workers/{chunk-LZGHD6NY.js → chunk-EG6PTBY2.js} +15 -15
- package/Build/Workers/{chunk-IX2JCCNM.js → chunk-EHWHNOEX.js} +1 -1
- package/Build/Workers/{chunk-NKPBIX7F.js → chunk-F3YA3Y2Z.js} +1 -1
- package/Build/Workers/{chunk-L2ZN645J.js → chunk-F4HFJMGM.js} +6 -6
- package/Build/Workers/{chunk-F6SE42BK.js → chunk-FJKNFAKQ.js} +15 -472
- package/Build/Workers/{chunk-PNBGBETF.js → chunk-FNIRWHJB.js} +10 -10
- package/Build/Workers/{chunk-RAEV7K66.js → chunk-FZRIVR7Y.js} +5 -5
- package/Build/Workers/{chunk-AIPU2VSX.js → chunk-G43QFN4Q.js} +6 -6
- package/Build/Workers/{chunk-ZUA2UUNV.js → chunk-GATZHF3K.js} +2 -2
- package/Build/Workers/{chunk-ZK5JOS3D.js → chunk-GRC2ZTAF.js} +14 -14
- package/Build/Workers/{chunk-5YLJ77FF.js → chunk-HU6N6EXB.js} +10 -10
- package/Build/Workers/{chunk-4EBHOMFX.js → chunk-I46ZRR5W.js} +17 -17
- package/Build/Workers/{chunk-LZ7JIV3K.js → chunk-JURN7NPV.js} +17 -17
- package/Build/Workers/{chunk-JCNXK6EL.js → chunk-KKCR2YOP.js} +11 -11
- package/Build/Workers/{chunk-S6SKF6DT.js → chunk-LPR3YNP2.js} +5 -5
- package/Build/Workers/{chunk-UDO6BFSF.js → chunk-M7ERACJJ.js} +13 -13
- package/Build/Workers/{chunk-BZP4T2JJ.js → chunk-MDWEGWPA.js} +10 -10
- package/Build/Workers/{chunk-72SANQJV.js → chunk-OGXZVPPM.js} +9 -5
- package/Build/Workers/{chunk-AR5DNBJ4.js → chunk-PGSJK77E.js} +6 -6
- package/Build/Workers/{chunk-GEJTYLCO.js → chunk-PPH7OFP3.js} +5 -5
- package/Build/Workers/{chunk-OVLG3FRS.js → chunk-SH5USDPI.js} +6 -6
- package/Build/Workers/{chunk-6HZQPRUS.js → chunk-SOWMRMWA.js} +1 -1
- package/Build/Workers/{chunk-JXDC723O.js → chunk-STW2DGFI.js} +2 -2
- package/Build/Workers/{chunk-5HDYHG3F.js → chunk-T3XIFPYR.js} +13 -13
- package/Build/Workers/chunk-TTUZP4BO.js +501 -0
- package/Build/Workers/{chunk-7XEAYGZK.js → chunk-UEXTBDBE.js} +10 -10
- package/Build/Workers/{chunk-GV56Q4LU.js → chunk-VOXYEYJT.js} +11 -11
- package/Build/Workers/{chunk-NY3K4IM3.js → chunk-X4356LRH.js} +12 -12
- package/Build/Workers/{chunk-S4MAZ3SS.js → chunk-XGI5BXZY.js} +2 -2
- package/Build/Workers/{chunk-UAEW6HKG.js → chunk-Y2ME2IJV.js} +13 -13
- package/Build/Workers/{chunk-XWXM2O2R.js → chunk-Y5UQJLYE.js} +6 -6
- package/Build/Workers/{chunk-QZAD5O7I.js → chunk-YJEBABKH.js} +7 -7
- package/Build/Workers/{chunk-UGK3FCDY.js → chunk-YWTJ2B4B.js} +1 -1
- package/Build/Workers/{chunk-R5X4OQT4.js → chunk-Z3TIFFGF.js} +7 -7
- package/Build/Workers/{chunk-WBQCVXR3.js → chunk-ZT7KWISZ.js} +4 -4
- package/Build/Workers/combineGeometry.js +24 -23
- package/Build/Workers/createBoxGeometry.js +18 -17
- package/Build/Workers/createBoxOutlineGeometry.js +16 -15
- package/Build/Workers/createCircleGeometry.js +26 -25
- package/Build/Workers/createCircleOutlineGeometry.js +19 -18
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -32
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -30
- package/Build/Workers/createCorridorGeometry.js +29 -28
- package/Build/Workers/createCorridorOutlineGeometry.js +28 -27
- package/Build/Workers/createCylinderGeometry.js +20 -19
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -17
- package/Build/Workers/createEllipseGeometry.js +26 -25
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -18
- package/Build/Workers/createEllipsoidGeometry.js +19 -18
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -17
- package/Build/Workers/createFrustumGeometry.js +18 -17
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -17
- package/Build/Workers/createGeometry.js +54 -33
- package/Build/Workers/createGroundPolylineGeometry.js +22 -21
- package/Build/Workers/createPlaneGeometry.js +16 -15
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -14
- package/Build/Workers/createPolygonGeometry.js +32 -31
- package/Build/Workers/createPolygonOutlineGeometry.js +30 -29
- package/Build/Workers/createPolylineGeometry.js +25 -24
- package/Build/Workers/createPolylineVolumeGeometry.js +31 -30
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -26
- package/Build/Workers/createRectangleGeometry.js +27 -26
- package/Build/Workers/createRectangleOutlineGeometry.js +20 -19
- package/Build/Workers/createSimplePolylineGeometry.js +23 -22
- package/Build/Workers/createSphereGeometry.js +19 -18
- package/Build/Workers/createSphereOutlineGeometry.js +18 -17
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -23
- package/Build/Workers/createVectorTilePoints.js +12 -12
- package/Build/Workers/createVectorTilePolygons.js +22 -21
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -21
- package/Build/Workers/createVerticesFromHeightmap.js +22 -21
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -18
- package/Build/Workers/createWallGeometry.js +24 -23
- package/Build/Workers/createWallOutlineGeometry.js +23 -22
- package/Build/Workers/decodeDraco.js +11 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +601 -92
- package/Build/Workers/transcodeKTX2.js +7 -7
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -21
- package/Source/Core/Ellipsoid.js +6 -0
- package/Source/Core/IntersectionTests.js +6 -3
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/PixelFormat.js +5 -0
- package/Source/Core/Transforms.js +3 -0
- package/Source/Core/srgbToLinear.js +32 -0
- package/Source/DataSources/CzmlDataSource.js +51 -23
- package/Source/DataSources/DataSourceDisplay.js +27 -0
- package/Source/DataSources/Entity.js +20 -2
- package/Source/DataSources/GeometryUpdaterSet.js +114 -0
- package/Source/DataSources/GeometryVisualizer.js +19 -83
- package/Source/Renderer/Context.js +10 -0
- package/Source/Renderer/ContextLimits.js +2 -0
- package/Source/Renderer/demodernizeShader.js +4 -1
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Axis.js +12 -7
- package/Source/Scene/Camera.js +46 -4
- package/Source/Scene/Cesium3DTileset.js +44 -6
- package/Source/Scene/Cesium3DTilesetBaseTraversal.js +2 -4
- package/Source/Scene/FrameState.js +5 -0
- package/Source/Scene/GlobeTranslucencyState.js +1 -1
- package/Source/Scene/GltfPipeline/updateVersion.js +69 -68
- package/Source/Scene/I3SDataProvider.js +270 -53
- package/Source/Scene/I3SDecoder.js +8 -1
- package/Source/Scene/I3SFeature.js +2 -5
- package/Source/Scene/I3SField.js +136 -31
- package/Source/Scene/I3SGeometry.js +70 -2
- package/Source/Scene/I3SLayer.js +55 -10
- package/Source/Scene/I3SNode.js +175 -18
- package/Source/Scene/I3SStatistics.js +94 -0
- package/Source/Scene/I3SSublayer.js +176 -0
- package/Source/Scene/I3SSymbology.js +337 -0
- package/Source/Scene/KeyframeNode.js +1 -1
- package/Source/Scene/Model/pickModel.js +25 -7
- package/Source/Scene/PickFramebuffer.js +37 -2
- package/Source/Scene/Picking.js +113 -39
- package/Source/Scene/Primitive.js +6 -2
- package/Source/Scene/Scene.js +126 -42
- package/Source/Scene/ScreenSpaceCameraController.js +21 -7
- package/Source/Scene/SensorVolumePortionToDisplay.js +69 -0
- package/Source/Scene/SpatialNode.js +12 -19
- package/Source/Scene/StructuralMetadata.js +1 -1
- package/Source/Scene/VoxelBoxShape.js +76 -0
- package/Source/Scene/VoxelCell.js +273 -0
- package/Source/Scene/VoxelCylinderShape.js +114 -43
- package/Source/Scene/VoxelEllipsoidShape.js +158 -116
- package/Source/Scene/VoxelPrimitive.js +3 -1
- package/Source/Scene/VoxelRenderResources.js +3 -0
- package/Source/Scene/VoxelShape.js +13 -0
- package/Source/Scene/VoxelTraversal.js +76 -54
- package/Source/Scene/buildVoxelDrawCommands.js +23 -0
- package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -0
- package/Source/Scene/processVoxelProperties.js +2 -0
- package/Source/Shaders/Voxels/IntersectCylinder.glsl +14 -111
- package/Source/Shaders/Voxels/IntersectCylinder.js +14 -111
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +32 -113
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +32 -113
- package/Source/Shaders/Voxels/IntersectLongitude.glsl +102 -0
- package/Source/Shaders/Voxels/IntersectLongitude.js +104 -0
- package/Source/Shaders/Voxels/VoxelFS.glsl +39 -1
- package/Source/Shaders/Voxels/VoxelFS.js +39 -1
- package/Source/Shaders/Voxels/convertUvToCylinder.glsl +19 -37
- package/Source/Shaders/Voxels/convertUvToCylinder.js +19 -37
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +24 -44
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +24 -44
- package/Source/Workers/createGeometry.js +40 -11
- package/Source/Workers/decodeI3S.js +720 -94
- package/index.d.ts +296 -11
- package/index.js +102 -94
- package/package.json +1 -1
|
@@ -120,15 +120,11 @@ function VoxelCylinderShape() {
|
|
|
120
120
|
CYLINDER_HAS_RENDER_BOUNDS_ANGLE: undefined,
|
|
121
121
|
CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO: undefined,
|
|
122
122
|
CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF: undefined,
|
|
123
|
-
CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF: undefined,
|
|
124
123
|
CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF: undefined,
|
|
125
124
|
|
|
126
125
|
CYLINDER_HAS_SHAPE_BOUNDS_RADIUS: undefined,
|
|
127
|
-
CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT: undefined,
|
|
128
126
|
CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT: undefined,
|
|
129
|
-
CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT: undefined,
|
|
130
127
|
CYLINDER_HAS_SHAPE_BOUNDS_ANGLE: undefined,
|
|
131
|
-
CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO: undefined,
|
|
132
128
|
CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY: undefined,
|
|
133
129
|
CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY: undefined,
|
|
134
130
|
CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED: undefined,
|
|
@@ -324,17 +320,12 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
324
320
|
shapeAngleRange > defaultAngleRangeHalf + epsilonAngle &&
|
|
325
321
|
shapeAngleRange < defaultAngleRange - epsilonAngle;
|
|
326
322
|
const shapeIsAngleFlipped =
|
|
327
|
-
shapeAngleRange > epsilonAngle &&
|
|
328
323
|
shapeAngleRange < defaultAngleRangeHalf - epsilonAngle;
|
|
329
324
|
const shapeIsAngleRangeHalf =
|
|
330
325
|
shapeAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
|
|
331
326
|
shapeAngleRange <= defaultAngleRangeHalf + epsilonAngle;
|
|
332
|
-
const shapeIsAngleRangeZero = shapeAngleRange <= epsilonAngle;
|
|
333
327
|
const shapeHasAngle =
|
|
334
|
-
shapeIsAngleRegular ||
|
|
335
|
-
shapeIsAngleFlipped ||
|
|
336
|
-
shapeIsAngleRangeHalf ||
|
|
337
|
-
shapeIsAngleRangeZero;
|
|
328
|
+
shapeIsAngleRegular || shapeIsAngleFlipped || shapeIsAngleRangeHalf;
|
|
338
329
|
const shapeIsMinAngleDiscontinuity = CesiumMath.equalsEpsilon(
|
|
339
330
|
shapeMinAngle,
|
|
340
331
|
defaultMinAngle,
|
|
@@ -357,23 +348,16 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
357
348
|
const renderAngleRange =
|
|
358
349
|
renderMaxAngle - renderMinAngle + renderIsAngleReversed * defaultAngleRange;
|
|
359
350
|
const renderIsAngleRegular =
|
|
360
|
-
renderAngleRange
|
|
351
|
+
renderAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
|
|
361
352
|
renderAngleRange < defaultAngleRange - epsilonAngle;
|
|
362
353
|
const renderIsAngleFlipped =
|
|
363
354
|
renderAngleRange > epsilonAngle &&
|
|
364
355
|
renderAngleRange < defaultAngleRangeHalf - epsilonAngle;
|
|
365
|
-
const renderIsAngleRangeHalf =
|
|
366
|
-
renderAngleRange >= defaultAngleRangeHalf - epsilonAngle &&
|
|
367
|
-
renderAngleRange <= defaultAngleRangeHalf + epsilonAngle;
|
|
368
356
|
const renderIsAngleRangeZero = renderAngleRange <= epsilonAngle;
|
|
369
357
|
const renderHasAngle =
|
|
370
|
-
renderIsAngleRegular ||
|
|
371
|
-
renderIsAngleFlipped ||
|
|
372
|
-
renderIsAngleRangeHalf ||
|
|
373
|
-
renderIsAngleRangeZero;
|
|
358
|
+
renderIsAngleRegular || renderIsAngleFlipped || renderIsAngleRangeZero;
|
|
374
359
|
|
|
375
|
-
const shaderUniforms = this
|
|
376
|
-
const shaderDefines = this.shaderDefines;
|
|
360
|
+
const { shaderUniforms, shaderDefines } = this;
|
|
377
361
|
|
|
378
362
|
// To keep things simple, clear the defines every time
|
|
379
363
|
for (const key in shaderDefines) {
|
|
@@ -408,12 +392,6 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
408
392
|
if (renderMinHeight === renderMaxHeight) {
|
|
409
393
|
shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT"] = true;
|
|
410
394
|
}
|
|
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
395
|
if (!shapeIsDefaultRadius) {
|
|
418
396
|
shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_RADIUS"] = true;
|
|
419
397
|
|
|
@@ -423,8 +401,13 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
423
401
|
// scale = 1.0 / (maxRadius - minRadius)
|
|
424
402
|
// offset = -minRadius / (maxRadius - minRadius)
|
|
425
403
|
// offset = minRadius / (minRadius - maxRadius)
|
|
426
|
-
const
|
|
427
|
-
|
|
404
|
+
const radiusRange = shapeMaxRadius - shapeMinRadius;
|
|
405
|
+
let scale = 0.0;
|
|
406
|
+
let offset = 1.0;
|
|
407
|
+
if (radiusRange !== 0.0) {
|
|
408
|
+
scale = 1.0 / radiusRange;
|
|
409
|
+
offset = -shapeMinRadius / radiusRange;
|
|
410
|
+
}
|
|
428
411
|
shaderUniforms.cylinderUvToShapeUvRadius = Cartesian2.fromElements(
|
|
429
412
|
scale,
|
|
430
413
|
offset,
|
|
@@ -446,8 +429,13 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
446
429
|
// offset = -2.0 * (minHeight * 0.5 + 0.5) / (maxHeight - minHeight)
|
|
447
430
|
// offset = -(minHeight + 1.0) / (maxHeight - minHeight)
|
|
448
431
|
// offset = (minHeight + 1.0) / (minHeight - maxHeight)
|
|
449
|
-
const
|
|
450
|
-
|
|
432
|
+
const heightRange = shapeMaxHeight - shapeMinHeight;
|
|
433
|
+
let scale = 0.0;
|
|
434
|
+
let offset = 1.0;
|
|
435
|
+
if (heightRange !== 0.0) {
|
|
436
|
+
scale = 2.0 / heightRange;
|
|
437
|
+
offset = -(shapeMinHeight + 1.0) / heightRange;
|
|
438
|
+
}
|
|
451
439
|
shaderUniforms.cylinderUvToShapeUvHeight = Cartesian2.fromElements(
|
|
452
440
|
scale,
|
|
453
441
|
offset,
|
|
@@ -505,9 +493,6 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
505
493
|
} else if (renderIsAngleFlipped) {
|
|
506
494
|
shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF"] = true;
|
|
507
495
|
intersectionCount += 2;
|
|
508
|
-
} else if (renderIsAngleRangeHalf) {
|
|
509
|
-
shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF"] = true;
|
|
510
|
-
intersectionCount += 1;
|
|
511
496
|
} else if (renderIsAngleRangeZero) {
|
|
512
497
|
shaderDefines["CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO"] = true;
|
|
513
498
|
intersectionCount += 2;
|
|
@@ -522,9 +507,6 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
522
507
|
|
|
523
508
|
if (shapeHasAngle) {
|
|
524
509
|
shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE"] = true;
|
|
525
|
-
if (shapeIsAngleRangeZero) {
|
|
526
|
-
shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO"] = true;
|
|
527
|
-
}
|
|
528
510
|
if (shapeIsMinAngleDiscontinuity) {
|
|
529
511
|
shaderDefines["CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY"] = true;
|
|
530
512
|
}
|
|
@@ -553,13 +535,21 @@ VoxelCylinderShape.prototype.update = function (
|
|
|
553
535
|
// offset = -uvMinAngle / (uvMaxAngle - uvMinAngle)
|
|
554
536
|
// offset = -((minAngle - pi) / (2.0 * pi)) / (((maxAngle - pi) / (2.0 * pi)) - ((minAngle - pi) / (2.0 * pi)))
|
|
555
537
|
// offset = -(minAngle - pi) / (maxAngle - minAngle)
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
538
|
+
if (shapeAngleRange <= epsilonAngle) {
|
|
539
|
+
shaderUniforms.cylinderUvToShapeUvAngle = Cartesian2.fromElements(
|
|
540
|
+
0.0,
|
|
541
|
+
1.0,
|
|
542
|
+
shaderUniforms.cylinderUvToShapeUvAngle
|
|
543
|
+
);
|
|
544
|
+
} else {
|
|
545
|
+
const scale = defaultAngleRange / shapeAngleRange;
|
|
546
|
+
const offset = -(shapeMinAngle - defaultMinAngle) / shapeAngleRange;
|
|
547
|
+
shaderUniforms.cylinderUvToShapeUvAngle = Cartesian2.fromElements(
|
|
548
|
+
scale,
|
|
549
|
+
offset,
|
|
550
|
+
shaderUniforms.cylinderUvToShapeUvAngle
|
|
551
|
+
);
|
|
552
|
+
}
|
|
563
553
|
}
|
|
564
554
|
|
|
565
555
|
this.shaderMaximumIntersectionsLength = intersectionCount;
|
|
@@ -645,6 +635,87 @@ VoxelCylinderShape.prototype.computeOrientedBoundingBoxForTile = function (
|
|
|
645
635
|
);
|
|
646
636
|
};
|
|
647
637
|
|
|
638
|
+
const sampleSizeScratch = new Cartesian3();
|
|
639
|
+
const scratchTileMinBounds = new Cartesian3();
|
|
640
|
+
const scratchTileMaxBounds = new Cartesian3();
|
|
641
|
+
|
|
642
|
+
/**
|
|
643
|
+
* Computes an oriented bounding box for a specified sample within a specified tile.
|
|
644
|
+
* The update function must be called before calling this function.
|
|
645
|
+
*
|
|
646
|
+
* @param {SpatialNode} spatialNode The spatial node containing the sample
|
|
647
|
+
* @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding
|
|
648
|
+
* @param {Cartesian3} tileUv The sample coordinate within the tile
|
|
649
|
+
* @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample
|
|
650
|
+
* @returns {OrientedBoundingBox} The oriented bounding box.
|
|
651
|
+
*/
|
|
652
|
+
VoxelCylinderShape.prototype.computeOrientedBoundingBoxForSample = function (
|
|
653
|
+
spatialNode,
|
|
654
|
+
tileDimensions,
|
|
655
|
+
tileUv,
|
|
656
|
+
result
|
|
657
|
+
) {
|
|
658
|
+
//>>includeStart('debug', pragmas.debug);
|
|
659
|
+
Check.typeOf.object("spatialNode", spatialNode);
|
|
660
|
+
Check.typeOf.object("tileDimensions", tileDimensions);
|
|
661
|
+
Check.typeOf.object("tileUv", tileUv);
|
|
662
|
+
Check.typeOf.object("result", result);
|
|
663
|
+
//>>includeEnd('debug');
|
|
664
|
+
|
|
665
|
+
const tileSizeAtLevel = 1.0 / Math.pow(2.0, spatialNode.level);
|
|
666
|
+
const sampleSize = Cartesian3.divideComponents(
|
|
667
|
+
Cartesian3.ONE,
|
|
668
|
+
tileDimensions,
|
|
669
|
+
sampleSizeScratch
|
|
670
|
+
);
|
|
671
|
+
const sampleSizeAtLevel = Cartesian3.multiplyByScalar(
|
|
672
|
+
sampleSize,
|
|
673
|
+
tileSizeAtLevel,
|
|
674
|
+
sampleSizeScratch
|
|
675
|
+
);
|
|
676
|
+
|
|
677
|
+
const minLerp = Cartesian3.multiplyByScalar(
|
|
678
|
+
Cartesian3.fromElements(
|
|
679
|
+
spatialNode.x + tileUv.x,
|
|
680
|
+
spatialNode.y + tileUv.y,
|
|
681
|
+
spatialNode.z + tileUv.z,
|
|
682
|
+
scratchTileMinBounds
|
|
683
|
+
),
|
|
684
|
+
tileSizeAtLevel,
|
|
685
|
+
scratchTileMinBounds
|
|
686
|
+
);
|
|
687
|
+
const maxLerp = Cartesian3.add(
|
|
688
|
+
minLerp,
|
|
689
|
+
sampleSizeAtLevel,
|
|
690
|
+
scratchTileMaxBounds
|
|
691
|
+
);
|
|
692
|
+
|
|
693
|
+
const minimumRadius = this._minimumRadius;
|
|
694
|
+
const maximumRadius = this._maximumRadius;
|
|
695
|
+
const minimumHeight = this._minimumHeight;
|
|
696
|
+
const maximumHeight = this._maximumHeight;
|
|
697
|
+
const minimumAngle = this._minimumAngle;
|
|
698
|
+
const maximumAngle = this._maximumAngle;
|
|
699
|
+
|
|
700
|
+
const radiusStart = CesiumMath.lerp(minimumRadius, maximumRadius, minLerp.x);
|
|
701
|
+
const radiusEnd = CesiumMath.lerp(minimumRadius, maximumRadius, maxLerp.x);
|
|
702
|
+
const heightStart = CesiumMath.lerp(minimumHeight, maximumHeight, minLerp.y);
|
|
703
|
+
const heightEnd = CesiumMath.lerp(minimumHeight, maximumHeight, maxLerp.y);
|
|
704
|
+
const angleStart = CesiumMath.lerp(minimumAngle, maximumAngle, minLerp.z);
|
|
705
|
+
const angleEnd = CesiumMath.lerp(minimumAngle, maximumAngle, maxLerp.z);
|
|
706
|
+
|
|
707
|
+
return getCylinderChunkObb(
|
|
708
|
+
radiusStart,
|
|
709
|
+
radiusEnd,
|
|
710
|
+
heightStart,
|
|
711
|
+
heightEnd,
|
|
712
|
+
angleStart,
|
|
713
|
+
angleEnd,
|
|
714
|
+
this.shapeTransform,
|
|
715
|
+
result
|
|
716
|
+
);
|
|
717
|
+
};
|
|
718
|
+
|
|
648
719
|
const scratchOrientedBoundingBox = new OrientedBoundingBox();
|
|
649
720
|
const scratchVoxelScale = new Cartesian3();
|
|
650
721
|
const scratchRootScale = new Cartesian3();
|
|
@@ -115,27 +115,20 @@ function VoxelEllipsoidShape() {
|
|
|
115
115
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE: undefined,
|
|
116
116
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO: undefined,
|
|
117
117
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF: undefined,
|
|
118
|
-
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF: undefined,
|
|
119
118
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF: undefined,
|
|
120
119
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY: undefined,
|
|
121
120
|
ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY: undefined,
|
|
122
121
|
ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE: undefined,
|
|
123
|
-
ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO: undefined,
|
|
124
122
|
ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED: undefined,
|
|
125
|
-
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE: undefined,
|
|
126
123
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF: undefined,
|
|
127
124
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF: undefined,
|
|
128
125
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF: undefined,
|
|
129
126
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF: undefined,
|
|
130
127
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF: undefined,
|
|
131
128
|
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF: undefined,
|
|
132
|
-
ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO: undefined,
|
|
133
129
|
ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE: undefined,
|
|
134
|
-
ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO: undefined,
|
|
135
130
|
ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX: undefined,
|
|
136
131
|
ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN: undefined,
|
|
137
|
-
ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT: undefined,
|
|
138
|
-
ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN: undefined,
|
|
139
132
|
ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT: undefined,
|
|
140
133
|
ELLIPSOID_IS_SPHERE: undefined,
|
|
141
134
|
ELLIPSOID_INTERSECTION_INDEX_LONGITUDE: undefined,
|
|
@@ -156,7 +149,6 @@ function VoxelEllipsoidShape() {
|
|
|
156
149
|
const scratchScale = new Cartesian3();
|
|
157
150
|
const scratchRotationScale = new Matrix3();
|
|
158
151
|
const scratchShapeOuterExtent = new Cartesian3();
|
|
159
|
-
const scratchShapeInnerExtent = new Cartesian3();
|
|
160
152
|
const scratchRenderOuterExtent = new Cartesian3();
|
|
161
153
|
const scratchRenderInnerExtent = new Cartesian3();
|
|
162
154
|
const scratchRenderRectangle = new Rectangle();
|
|
@@ -265,17 +257,7 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
265
257
|
const renderMinHeight = Math.max(shapeMinHeight, clipMinHeight);
|
|
266
258
|
const renderMaxHeight = Math.min(shapeMaxHeight, clipMaxHeight);
|
|
267
259
|
|
|
268
|
-
// Compute the
|
|
269
|
-
const shapeInnerExtent = Cartesian3.add(
|
|
270
|
-
radii,
|
|
271
|
-
Cartesian3.fromElements(
|
|
272
|
-
shapeMinHeight,
|
|
273
|
-
shapeMinHeight,
|
|
274
|
-
shapeMinHeight,
|
|
275
|
-
scratchShapeInnerExtent
|
|
276
|
-
),
|
|
277
|
-
scratchShapeInnerExtent
|
|
278
|
-
);
|
|
260
|
+
// Compute the farthest a point can be from the center of the ellipsoid.
|
|
279
261
|
const shapeOuterExtent = Cartesian3.add(
|
|
280
262
|
radii,
|
|
281
263
|
Cartesian3.fromElements(
|
|
@@ -381,18 +363,14 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
381
363
|
renderIsLongitudeReversed * defaultLongitudeRange;
|
|
382
364
|
const renderIsLongitudeRangeZero = renderLongitudeRange <= epsilonLongitude;
|
|
383
365
|
const renderIsLongitudeRangeUnderHalf =
|
|
384
|
-
renderLongitudeRange > defaultLongitudeRangeHalf + epsilonLongitude &&
|
|
385
|
-
renderLongitudeRange < defaultLongitudeRange - epsilonLongitude;
|
|
386
|
-
const renderIsLongitudeRangeHalf =
|
|
387
366
|
renderLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&
|
|
388
|
-
renderLongitudeRange
|
|
367
|
+
renderLongitudeRange < defaultLongitudeRange - epsilonLongitude;
|
|
389
368
|
const renderIsLongitudeRangeOverHalf =
|
|
390
369
|
renderLongitudeRange > epsilonLongitude &&
|
|
391
370
|
renderLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;
|
|
392
371
|
const renderHasLongitude =
|
|
393
372
|
renderIsLongitudeRangeZero ||
|
|
394
373
|
renderIsLongitudeRangeUnderHalf ||
|
|
395
|
-
renderIsLongitudeRangeHalf ||
|
|
396
374
|
renderIsLongitudeRangeOverHalf;
|
|
397
375
|
|
|
398
376
|
const shapeIsLongitudeReversed = shapeMaxLongitude < shapeMinLongitude;
|
|
@@ -400,7 +378,6 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
400
378
|
shapeMaxLongitude -
|
|
401
379
|
shapeMinLongitude +
|
|
402
380
|
shapeIsLongitudeReversed * defaultLongitudeRange;
|
|
403
|
-
const shapeIsLongitudeRangeZero = shapeLongitudeRange <= epsilonLongitude;
|
|
404
381
|
const shapeIsLongitudeRangeUnderHalf =
|
|
405
382
|
shapeLongitudeRange > defaultLongitudeRangeHalf + epsilonLongitude &&
|
|
406
383
|
shapeLongitudeRange < defaultLongitudeRange - epsilonLongitude;
|
|
@@ -408,10 +385,8 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
408
385
|
shapeLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&
|
|
409
386
|
shapeLongitudeRange <= defaultLongitudeRangeHalf + epsilonLongitude;
|
|
410
387
|
const shapeIsLongitudeRangeOverHalf =
|
|
411
|
-
shapeLongitudeRange > epsilonLongitude &&
|
|
412
388
|
shapeLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;
|
|
413
389
|
const shapeHasLongitude =
|
|
414
|
-
shapeIsLongitudeRangeZero ||
|
|
415
390
|
shapeIsLongitudeRangeUnderHalf ||
|
|
416
391
|
shapeIsLongitudeRangeHalf ||
|
|
417
392
|
shapeIsLongitudeRangeOverHalf;
|
|
@@ -475,20 +450,8 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
475
450
|
renderOuterExtent,
|
|
476
451
|
Cartesian3.ZERO
|
|
477
452
|
);
|
|
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
453
|
|
|
490
|
-
const shaderUniforms = this
|
|
491
|
-
const shaderDefines = this.shaderDefines;
|
|
454
|
+
const { shaderUniforms, shaderDefines } = this;
|
|
492
455
|
|
|
493
456
|
// To keep things simple, clear the defines every time
|
|
494
457
|
for (const key in shaderDefines) {
|
|
@@ -522,49 +485,37 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
522
485
|
shaderDefines["ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX"] = intersectionCount;
|
|
523
486
|
intersectionCount += 1;
|
|
524
487
|
|
|
525
|
-
if (
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
// 1.0 / (1.0 - (shapeMaxHeight - renderMinHeight) / shapeMaxExtent)
|
|
540
|
-
// shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight))
|
|
541
|
-
shaderUniforms.ellipsoidInverseInnerScaleUv =
|
|
542
|
-
shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight));
|
|
543
|
-
}
|
|
488
|
+
if (renderHasMinHeight) {
|
|
489
|
+
shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN"] = true;
|
|
490
|
+
shaderDefines[
|
|
491
|
+
"ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN"
|
|
492
|
+
] = intersectionCount;
|
|
493
|
+
intersectionCount += 1;
|
|
494
|
+
|
|
495
|
+
// The inverse of the percent of space that is taken up by the inner ellipsoid, relative to the shape bounds
|
|
496
|
+
// 1.0 / (1.0 - thickness) // thickness = percent of space that is between the min and max height.
|
|
497
|
+
// 1.0 / (1.0 - (shapeMaxHeight - renderMinHeight) / shapeMaxExtent)
|
|
498
|
+
// shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight))
|
|
499
|
+
shaderUniforms.ellipsoidInverseInnerScaleUv =
|
|
500
|
+
shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMinHeight));
|
|
501
|
+
}
|
|
544
502
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
}
|
|
503
|
+
if (renderHasMaxHeight) {
|
|
504
|
+
shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX"] = true;
|
|
505
|
+
shaderUniforms.ellipsoidInverseOuterScaleUv =
|
|
506
|
+
shapeMaxExtent / (shapeMaxExtent - (shapeMaxHeight - renderMaxHeight));
|
|
550
507
|
}
|
|
551
508
|
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
shaderUniforms.ellipseInnerRadiiUv
|
|
563
|
-
);
|
|
564
|
-
}
|
|
565
|
-
if (shapeMinHeight === shapeMaxHeight) {
|
|
566
|
-
shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT"] = true;
|
|
567
|
-
}
|
|
509
|
+
// The percent of space that is between the inner and outer ellipsoid.
|
|
510
|
+
const thickness = (shapeMaxHeight - shapeMinHeight) / shapeMaxExtent;
|
|
511
|
+
shaderUniforms.ellipsoidInverseHeightDifferenceUv = 1.0 / thickness;
|
|
512
|
+
shaderUniforms.ellipseInnerRadiiUv = Cartesian2.fromElements(
|
|
513
|
+
shaderUniforms.ellipsoidRadiiUv.x * (1.0 - thickness),
|
|
514
|
+
shaderUniforms.ellipsoidRadiiUv.z * (1.0 - thickness),
|
|
515
|
+
shaderUniforms.ellipseInnerRadiiUv
|
|
516
|
+
);
|
|
517
|
+
if (shapeMinHeight === shapeMaxHeight) {
|
|
518
|
+
shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT"] = true;
|
|
568
519
|
}
|
|
569
520
|
|
|
570
521
|
// Intersects a wedge for the min and max longitude.
|
|
@@ -582,11 +533,6 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
582
533
|
"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF"
|
|
583
534
|
] = true;
|
|
584
535
|
intersectionCount += 2;
|
|
585
|
-
} else if (renderIsLongitudeRangeHalf) {
|
|
586
|
-
shaderDefines[
|
|
587
|
-
"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF"
|
|
588
|
-
] = true;
|
|
589
|
-
intersectionCount += 1;
|
|
590
536
|
} else if (renderIsLongitudeRangeZero) {
|
|
591
537
|
shaderDefines[
|
|
592
538
|
"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO"
|
|
@@ -621,14 +567,22 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
621
567
|
// offset = -minLongitudeUv / (maxLongitudeUv - minLongitudeUv)
|
|
622
568
|
// offset = -((minLongitude - pi) / (2.0 * pi)) / (((maxLongitude - pi) / (2.0 * pi)) - ((minLongitude - pi) / (2.0 * pi)))
|
|
623
569
|
// offset = -(minLongitude - pi) / (maxLongitude - minLongitude)
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
570
|
+
if (shapeLongitudeRange <= epsilonLongitude) {
|
|
571
|
+
shaderUniforms.ellipsoidUvToShapeUvLongitude = Cartesian2.fromElements(
|
|
572
|
+
0.0,
|
|
573
|
+
1.0,
|
|
574
|
+
shaderUniforms.ellipsoidUvToShapeUvLongitude
|
|
575
|
+
);
|
|
576
|
+
} else {
|
|
577
|
+
const scale = defaultLongitudeRange / shapeLongitudeRange;
|
|
578
|
+
const offset =
|
|
579
|
+
-(shapeMinLongitude - defaultMinLongitude) / shapeLongitudeRange;
|
|
580
|
+
shaderUniforms.ellipsoidUvToShapeUvLongitude = Cartesian2.fromElements(
|
|
581
|
+
scale,
|
|
582
|
+
offset,
|
|
583
|
+
shaderUniforms.ellipsoidUvToShapeUvLongitude
|
|
584
|
+
);
|
|
585
|
+
}
|
|
632
586
|
}
|
|
633
587
|
|
|
634
588
|
if (renderHasLongitude) {
|
|
@@ -676,8 +630,6 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
676
630
|
}
|
|
677
631
|
|
|
678
632
|
if (renderHasLatitude) {
|
|
679
|
-
shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE"] = true;
|
|
680
|
-
|
|
681
633
|
// Intersects a cone for min latitude
|
|
682
634
|
if (renderHasLatitudeMin) {
|
|
683
635
|
shaderDefines["ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN"] = true;
|
|
@@ -728,12 +680,6 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
728
680
|
}
|
|
729
681
|
}
|
|
730
682
|
|
|
731
|
-
if (renderMinLatitude === renderMaxLatitude) {
|
|
732
|
-
shaderDefines[
|
|
733
|
-
"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO"
|
|
734
|
-
] = true;
|
|
735
|
-
}
|
|
736
|
-
|
|
737
683
|
const minCosHalfAngleSqr = Math.pow(
|
|
738
684
|
Math.cos(CesiumMath.PI_OVER_TWO - Math.abs(renderMinLatitude)),
|
|
739
685
|
2.0
|
|
@@ -752,12 +698,6 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
752
698
|
if (shapeHasLatitude) {
|
|
753
699
|
shaderDefines["ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE"] = true;
|
|
754
700
|
|
|
755
|
-
if (shapeMinLatitude === shapeMaxLatitude) {
|
|
756
|
-
shaderDefines[
|
|
757
|
-
"ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO"
|
|
758
|
-
] = true;
|
|
759
|
-
}
|
|
760
|
-
|
|
761
701
|
// delerp(latitudeUv, minLatitudeUv, maxLatitudeUv)
|
|
762
702
|
// (latitudeUv - minLatitudeUv) / (maxLatitudeUv - minLatitudeUv)
|
|
763
703
|
// latitudeUv / (maxLatitudeUv - minLatitudeUv) - minLatitudeUv / (maxLatitudeUv - minLatitudeUv)
|
|
@@ -768,13 +708,22 @@ VoxelEllipsoidShape.prototype.update = function (
|
|
|
768
708
|
// offset = -((minLatitude - -pi) / (2.0 * pi)) / (((maxLatitude - pi) / (2.0 * pi)) - ((minLatitude - pi) / (2.0 * pi)))
|
|
769
709
|
// offset = -(minLatitude - -pi) / (maxLatitude - minLatitude)
|
|
770
710
|
// offset = (-pi - minLatitude) / (maxLatitude - minLatitude)
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
711
|
+
if (shapeLatitudeRange < epsilonLatitude) {
|
|
712
|
+
shaderUniforms.ellipsoidUvToShapeUvLatitude = Cartesian2.fromElements(
|
|
713
|
+
0.0,
|
|
714
|
+
1.0,
|
|
715
|
+
shaderUniforms.ellipsoidUvToShapeUvLatitude
|
|
716
|
+
);
|
|
717
|
+
} else {
|
|
718
|
+
const scale = defaultLatitudeRange / shapeLatitudeRange;
|
|
719
|
+
const offset =
|
|
720
|
+
(defaultMinLatitude - shapeMinLatitude) / shapeLatitudeRange;
|
|
721
|
+
shaderUniforms.ellipsoidUvToShapeUvLatitude = Cartesian2.fromElements(
|
|
722
|
+
scale,
|
|
723
|
+
offset,
|
|
724
|
+
shaderUniforms.ellipsoidUvToShapeUvLatitude
|
|
725
|
+
);
|
|
726
|
+
}
|
|
778
727
|
}
|
|
779
728
|
|
|
780
729
|
if (isSphere) {
|
|
@@ -854,6 +803,91 @@ VoxelEllipsoidShape.prototype.computeOrientedBoundingBoxForTile = function (
|
|
|
854
803
|
);
|
|
855
804
|
};
|
|
856
805
|
|
|
806
|
+
const sampleSizeScratch = new Cartesian3();
|
|
807
|
+
const scratchTileMinBounds = new Cartesian3();
|
|
808
|
+
const scratchTileMaxBounds = new Cartesian3();
|
|
809
|
+
|
|
810
|
+
/**
|
|
811
|
+
* Computes an oriented bounding box for a specified sample within a specified tile.
|
|
812
|
+
* The update function must be called before calling this function.
|
|
813
|
+
*
|
|
814
|
+
* @param {SpatialNode} spatialNode The spatial node containing the sample
|
|
815
|
+
* @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding
|
|
816
|
+
* @param {Cartesian3} tileUv The sample coordinate within the tile
|
|
817
|
+
* @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample
|
|
818
|
+
* @returns {OrientedBoundingBox} The oriented bounding box.
|
|
819
|
+
*/
|
|
820
|
+
VoxelEllipsoidShape.prototype.computeOrientedBoundingBoxForSample = function (
|
|
821
|
+
spatialNode,
|
|
822
|
+
tileDimensions,
|
|
823
|
+
tileUv,
|
|
824
|
+
result
|
|
825
|
+
) {
|
|
826
|
+
//>>includeStart('debug', pragmas.debug);
|
|
827
|
+
Check.typeOf.object("spatialNode", spatialNode);
|
|
828
|
+
Check.typeOf.object("tileDimensions", tileDimensions);
|
|
829
|
+
Check.typeOf.object("tileUv", tileUv);
|
|
830
|
+
Check.typeOf.object("result", result);
|
|
831
|
+
//>>includeEnd('debug');
|
|
832
|
+
|
|
833
|
+
const tileSizeAtLevel = 1.0 / Math.pow(2.0, spatialNode.level);
|
|
834
|
+
const sampleSize = Cartesian3.divideComponents(
|
|
835
|
+
Cartesian3.ONE,
|
|
836
|
+
tileDimensions,
|
|
837
|
+
sampleSizeScratch
|
|
838
|
+
);
|
|
839
|
+
const sampleSizeAtLevel = Cartesian3.multiplyByScalar(
|
|
840
|
+
sampleSize,
|
|
841
|
+
tileSizeAtLevel,
|
|
842
|
+
sampleSizeScratch
|
|
843
|
+
);
|
|
844
|
+
|
|
845
|
+
const minLerp = Cartesian3.multiplyByScalar(
|
|
846
|
+
Cartesian3.fromElements(
|
|
847
|
+
spatialNode.x + tileUv.x,
|
|
848
|
+
spatialNode.y + tileUv.y,
|
|
849
|
+
spatialNode.z + tileUv.z,
|
|
850
|
+
scratchTileMinBounds
|
|
851
|
+
),
|
|
852
|
+
tileSizeAtLevel,
|
|
853
|
+
scratchTileMinBounds
|
|
854
|
+
);
|
|
855
|
+
const maxLerp = Cartesian3.add(
|
|
856
|
+
minLerp,
|
|
857
|
+
sampleSizeAtLevel,
|
|
858
|
+
scratchTileMaxBounds
|
|
859
|
+
);
|
|
860
|
+
|
|
861
|
+
const rectangle = Rectangle.subsection(
|
|
862
|
+
this._rectangle,
|
|
863
|
+
minLerp.x,
|
|
864
|
+
minLerp.y,
|
|
865
|
+
maxLerp.x,
|
|
866
|
+
maxLerp.y,
|
|
867
|
+
scratchRectangle
|
|
868
|
+
);
|
|
869
|
+
const minHeight = CesiumMath.lerp(
|
|
870
|
+
this._minimumHeight,
|
|
871
|
+
this._maximumHeight,
|
|
872
|
+
minLerp.z
|
|
873
|
+
);
|
|
874
|
+
const maxHeight = CesiumMath.lerp(
|
|
875
|
+
this._minimumHeight,
|
|
876
|
+
this._maximumHeight,
|
|
877
|
+
maxLerp.z
|
|
878
|
+
);
|
|
879
|
+
|
|
880
|
+
return getEllipsoidChunkObb(
|
|
881
|
+
rectangle,
|
|
882
|
+
minHeight,
|
|
883
|
+
maxHeight,
|
|
884
|
+
this._ellipsoid,
|
|
885
|
+
this._translation,
|
|
886
|
+
this._rotation,
|
|
887
|
+
result
|
|
888
|
+
);
|
|
889
|
+
};
|
|
890
|
+
|
|
857
891
|
/**
|
|
858
892
|
* Computes an approximate step size for raymarching the root tile of a voxel grid.
|
|
859
893
|
* The update function must be called before calling this function.
|
|
@@ -928,7 +962,11 @@ function getEllipsoidChunkObb(
|
|
|
928
962
|
* @readonly
|
|
929
963
|
*/
|
|
930
964
|
VoxelEllipsoidShape.DefaultMinBounds = Object.freeze(
|
|
931
|
-
new Cartesian3(
|
|
965
|
+
new Cartesian3(
|
|
966
|
+
-CesiumMath.PI,
|
|
967
|
+
-CesiumMath.PI_OVER_TWO,
|
|
968
|
+
-Ellipsoid.WGS84.minimumRadius
|
|
969
|
+
)
|
|
932
970
|
);
|
|
933
971
|
|
|
934
972
|
/**
|
|
@@ -939,7 +977,11 @@ VoxelEllipsoidShape.DefaultMinBounds = Object.freeze(
|
|
|
939
977
|
* @readonly
|
|
940
978
|
*/
|
|
941
979
|
VoxelEllipsoidShape.DefaultMaxBounds = Object.freeze(
|
|
942
|
-
new Cartesian3(
|
|
980
|
+
new Cartesian3(
|
|
981
|
+
CesiumMath.PI,
|
|
982
|
+
CesiumMath.PI_OVER_TWO,
|
|
983
|
+
10.0 * Ellipsoid.WGS84.maximumRadius
|
|
984
|
+
)
|
|
943
985
|
);
|
|
944
986
|
|
|
945
987
|
export default VoxelEllipsoidShape;
|
|
@@ -531,7 +531,7 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
531
531
|
*/
|
|
532
532
|
orientedBoundingBox: {
|
|
533
533
|
get: function () {
|
|
534
|
-
return this.
|
|
534
|
+
return this._shape.orientedBoundingBox;
|
|
535
535
|
},
|
|
536
536
|
},
|
|
537
537
|
|
|
@@ -1137,6 +1137,8 @@ VoxelPrimitive.prototype.update = function (frameState) {
|
|
|
1137
1137
|
// Render the primitive
|
|
1138
1138
|
const command = frameState.passes.pick
|
|
1139
1139
|
? this._drawCommandPick
|
|
1140
|
+
: frameState.passes.pickVoxel
|
|
1141
|
+
? this._drawCommandPickVoxel
|
|
1140
1142
|
: this._drawCommand;
|
|
1141
1143
|
command.boundingVolume = shape.boundingSphere;
|
|
1142
1144
|
frameState.commandList.push(command);
|