@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.
- package/Build/ThirdParty/Workers/z-worker-pako.js +1 -5
- package/Build/Workers/{chunk-7XEAYGZK.js → chunk-24YTYWNB.js} +10 -10
- package/Build/Workers/{chunk-IQBYFRVW.js → chunk-2632RVPI.js} +7 -7
- package/Build/Workers/chunk-2KACWKS4.js +501 -0
- package/Build/Workers/{chunk-QZAD5O7I.js → chunk-2XPLH3JY.js} +7 -7
- package/Build/Workers/{chunk-JY5YEZFA.js → chunk-2ZBL3MVO.js} +8 -8
- package/Build/Workers/{chunk-ZK5JOS3D.js → chunk-3NCVAGDA.js} +14 -14
- package/Build/Workers/{chunk-AR5DNBJ4.js → chunk-5R6VWLMH.js} +6 -6
- package/Build/Workers/{chunk-PTQQUQC3.js → chunk-5TIV3L26.js} +13 -13
- package/Build/Workers/{chunk-BZP4T2JJ.js → chunk-6WF3KIF5.js} +10 -10
- package/Build/Workers/{chunk-5WQ523AW.js → chunk-73FKKY52.js} +5 -5
- package/Build/Workers/{chunk-F6SE42BK.js → chunk-7COR472O.js} +15 -472
- package/Build/Workers/{chunk-72SANQJV.js → chunk-ADOVHYWO.js} +9 -5
- package/Build/Workers/{chunk-5YLJ77FF.js → chunk-BCU2LH5T.js} +12 -11
- package/Build/Workers/{chunk-4EBHOMFX.js → chunk-C3XBUYBO.js} +17 -17
- package/Build/Workers/{chunk-IX2JCCNM.js → chunk-C6OI26DR.js} +1 -1
- package/Build/Workers/{chunk-2HJWSU7B.js → chunk-CO35JNNE.js} +4 -4
- package/Build/Workers/{chunk-OVLG3FRS.js → chunk-DGDUKCJJ.js} +6 -6
- package/Build/Workers/{chunk-DTAIXKTO.js → chunk-DPUSFA7S.js} +6 -6
- package/Build/Workers/{chunk-R5X4OQT4.js → chunk-E6WXPSJS.js} +7 -7
- package/Build/Workers/{chunk-VK3EJHWI.js → chunk-EOXYZ34O.js} +2 -2
- package/Build/Workers/{chunk-RAEV7K66.js → chunk-EPKE7GE3.js} +5 -5
- package/Build/Workers/{chunk-GV56Q4LU.js → chunk-GFA4SMXV.js} +11 -11
- package/Build/Workers/{chunk-NKPBIX7F.js → chunk-GXUXEOE2.js} +1 -1
- package/Build/Workers/{chunk-NY3K4IM3.js → chunk-HBQPB6IH.js} +12 -12
- package/Build/Workers/{chunk-6HZQPRUS.js → chunk-I37B3MZ2.js} +1 -1
- package/Build/Workers/{chunk-VRGFV2UO.js → chunk-L4BW3RUA.js} +10 -10
- package/Build/Workers/{chunk-6VJVYK2V.js → chunk-LAQP3SCC.js} +2 -2
- package/Build/Workers/{chunk-PNBGBETF.js → chunk-LQJ5FFFR.js} +10 -10
- package/Build/Workers/{chunk-UAEW6HKG.js → chunk-M2AYBTNH.js} +13 -13
- package/Build/Workers/{chunk-YUCVWAY6.js → chunk-MWV7IZK4.js} +7 -7
- package/Build/Workers/{chunk-JXDC723O.js → chunk-N4KXMWQU.js} +2 -2
- package/Build/Workers/{chunk-XWXM2O2R.js → chunk-NP2GYYE5.js} +6 -6
- package/Build/Workers/{chunk-GEJTYLCO.js → chunk-NZWNZA6S.js} +5 -5
- package/Build/Workers/{chunk-LZGHD6NY.js → chunk-P2YAAMT2.js} +15 -15
- package/Build/Workers/{chunk-S6SKF6DT.js → chunk-P4XKB3QZ.js} +5 -5
- package/Build/Workers/{chunk-U2VCRRQW.js → chunk-PXB7T27O.js} +6 -6
- package/Build/Workers/{chunk-RV7ZYPFT.js → chunk-QCQUZGXI.js} +4 -4
- package/Build/Workers/{chunk-JJ4VBOQ3.js → chunk-QKBGRKKG.js} +4 -4
- package/Build/Workers/{chunk-ODW7WYM4.js → chunk-RMOEYCZW.js} +2 -2
- package/Build/Workers/{chunk-ZUA2UUNV.js → chunk-RSJXEO2A.js} +2 -2
- package/Build/Workers/{chunk-UDO6BFSF.js → chunk-RV7ZOSS6.js} +13 -13
- package/Build/Workers/{chunk-LZ7JIV3K.js → chunk-SE4PXOEA.js} +17 -17
- package/Build/Workers/{chunk-S4MAZ3SS.js → chunk-SS4ESNE3.js} +2 -2
- package/Build/Workers/{chunk-AIPU2VSX.js → chunk-TJBU6GML.js} +6 -6
- package/Build/Workers/{chunk-5M3U6ZMA.js → chunk-TZORKRNK.js} +1 -1
- package/Build/Workers/{chunk-MY3VNFGQ.js → chunk-VR5RBW52.js} +7 -7
- package/Build/Workers/{chunk-FP6GYBFX.js → chunk-WHUSTDIB.js} +10 -10
- package/Build/Workers/{chunk-5HDYHG3F.js → chunk-X2F6BEPY.js} +13 -13
- package/Build/Workers/{chunk-WZU2YLWG.js → chunk-X6XOMPWL.js} +3 -3
- package/Build/Workers/{chunk-UGK3FCDY.js → chunk-YDVSBWEO.js} +1 -1
- package/Build/Workers/{chunk-46UD5ABS.js → chunk-YV4H2Y7M.js} +4 -4
- package/Build/Workers/{chunk-WBQCVXR3.js → chunk-Z7FQLK6N.js} +4 -4
- package/Build/Workers/{chunk-L2ZN645J.js → chunk-ZNVSKMQ2.js} +6 -6
- package/Build/Workers/{chunk-JCNXK6EL.js → chunk-ZYPTP7GS.js} +11 -11
- 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 +33 -32
- 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/Check.d.ts +127 -0
- package/Source/Core/Check.js +0 -1
- package/Source/Core/Ellipsoid.js +6 -0
- package/Source/Core/Geometry.js +1 -1
- package/Source/Core/IntersectionTests.js +6 -3
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/PixelFormat.js +5 -0
- package/Source/Core/PolygonGeometry.js +1 -1
- package/Source/Core/Transforms.js +3 -0
- package/Source/Core/VerticalExaggeration.js +2 -1
- 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/Billboard.js +32 -0
- package/Source/Scene/BillboardCollection.js +1 -1
- package/Source/Scene/BingMapsImageryProvider.js +4 -0
- package/Source/Scene/Camera.js +46 -4
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +2 -9
- package/Source/Scene/Cesium3DTileset.js +10 -7
- package/Source/Scene/Cesium3DTilesetBaseTraversal.js +2 -4
- package/Source/Scene/FrameState.js +5 -0
- package/Source/Scene/Globe.js +0 -67
- 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/Label.js +33 -0
- package/Source/Scene/LabelCollection.js +2 -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 -5
- 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 +67 -6
- package/Source/Scene/VoxelCell.js +273 -0
- package/Source/Scene/VoxelCylinderShape.js +117 -163
- package/Source/Scene/VoxelEllipsoidShape.js +255 -304
- package/Source/Scene/VoxelPrimitive.js +109 -15
- package/Source/Scene/VoxelRenderResources.js +12 -3
- package/Source/Scene/VoxelShape.js +7 -4
- 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 +3 -0
- package/Source/Shaders/Voxels/IntersectBox.glsl +21 -47
- package/Source/Shaders/Voxels/IntersectBox.js +21 -47
- package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +1 -1
- package/Source/Shaders/Voxels/IntersectClippingPlanes.js +1 -1
- package/Source/Shaders/Voxels/IntersectCylinder.glsl +76 -203
- package/Source/Shaders/Voxels/IntersectCylinder.js +76 -203
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +220 -229
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +220 -229
- package/Source/Shaders/Voxels/IntersectLongitude.glsl +102 -0
- package/Source/Shaders/Voxels/IntersectLongitude.js +104 -0
- package/Source/Shaders/Voxels/IntersectionUtils.glsl +33 -11
- package/Source/Shaders/Voxels/IntersectionUtils.js +33 -11
- package/Source/Shaders/Voxels/Megatexture.glsl +1 -2
- package/Source/Shaders/Voxels/Megatexture.js +1 -2
- package/Source/Shaders/Voxels/Octree.glsl +14 -9
- package/Source/Shaders/Voxels/Octree.js +14 -9
- package/Source/Shaders/Voxels/VoxelFS.glsl +128 -40
- package/Source/Shaders/Voxels/VoxelFS.js +128 -40
- package/Source/Shaders/Voxels/VoxelUtils.glsl +31 -0
- package/Source/Shaders/Voxels/VoxelUtils.js +33 -0
- package/Source/Shaders/Voxels/convertUvToBox.glsl +24 -3
- package/Source/Shaders/Voxels/convertUvToBox.js +24 -4
- package/Source/Shaders/Voxels/convertUvToCylinder.glsl +64 -40
- package/Source/Shaders/Voxels/convertUvToCylinder.js +64 -40
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +100 -91
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +100 -91
- package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
- package/Source/Workers/createGeometry.js +40 -11
- package/Source/Workers/decodeI3S.js +720 -94
- package/index.d.ts +542 -40
- package/index.js +75 -66
- package/package.json +2 -2
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/* Cylinder defines (set in Scene/VoxelCylinderShape.js)
|
|
2
2
|
#define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
|
|
3
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
|
|
4
3
|
#define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
|
|
5
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
|
|
6
4
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
|
|
7
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
|
|
8
5
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
|
|
9
6
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
|
|
10
7
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
|
|
@@ -26,49 +23,76 @@
|
|
|
26
23
|
uniform float u_cylinderShapeUvAngleRangeZeroMid;
|
|
27
24
|
#endif
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) {
|
|
27
|
+
// Convert from Cartesian UV space [0, 1] to Cartesian local space [-1, 1]
|
|
28
|
+
vec3 position = positionUv * 2.0 - 1.0;
|
|
31
29
|
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
float radius = length(position.xy); // [0, 1]
|
|
31
|
+
vec3 radial = normalize(vec3(position.xy, 0.0));
|
|
32
|
+
|
|
33
|
+
// Shape space height is defined within [0, 1]
|
|
34
|
+
float height = positionUv.z; // [0, 1]
|
|
35
|
+
vec3 z = vec3(0.0, 0.0, 1.0);
|
|
36
|
+
|
|
37
|
+
float angle = atan(position.y, position.x);
|
|
38
|
+
vec3 east = normalize(vec3(-position.y, position.x, 0.0));
|
|
39
|
+
|
|
40
|
+
vec3 point = vec3(radius, height, angle);
|
|
41
|
+
mat3 jacobianT = mat3(radial, z, east / length(position.xy));
|
|
42
|
+
return PointJacobianT(point, jacobianT);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
vec3 convertShapeToShapeUvSpace(in vec3 positionShape) {
|
|
46
|
+
float radius = positionShape.x;
|
|
47
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
|
|
48
|
+
radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y;
|
|
40
49
|
#endif
|
|
41
50
|
|
|
42
|
-
|
|
43
|
-
#if defined(
|
|
44
|
-
|
|
45
|
-
#else
|
|
46
|
-
float height = positionUv.z; // [0,1]
|
|
47
|
-
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
|
|
48
|
-
height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset
|
|
49
|
-
#endif
|
|
51
|
+
float height = positionShape.y;
|
|
52
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
|
|
53
|
+
height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y;
|
|
50
54
|
#endif
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
#if defined(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
|
|
65
|
-
angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
|
|
66
|
-
#elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
|
|
67
|
-
angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
|
|
68
|
-
#endif
|
|
69
|
-
|
|
70
|
-
angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset
|
|
56
|
+
float angle = (positionShape.z + czm_pi) / czm_twoPi;
|
|
57
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
|
|
58
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
|
|
59
|
+
// Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.
|
|
60
|
+
angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
// Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
|
|
64
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
|
|
65
|
+
angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
|
|
66
|
+
#elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
|
|
67
|
+
angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
|
|
71
68
|
#endif
|
|
69
|
+
|
|
70
|
+
angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y;
|
|
71
|
+
#endif
|
|
72
|
+
|
|
73
|
+
return vec3(radius, height, angle);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) {
|
|
77
|
+
PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv);
|
|
78
|
+
pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point);
|
|
79
|
+
return pointJacobian;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
|
|
83
|
+
float radius = shapeUv.x;
|
|
84
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
|
|
85
|
+
radius /= u_cylinderUvToShapeUvRadius.x;
|
|
86
|
+
#endif
|
|
87
|
+
|
|
88
|
+
float height = shapeUv.y;
|
|
89
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
|
|
90
|
+
height /= u_cylinderUvToShapeUvHeight.x;
|
|
91
|
+
#endif
|
|
92
|
+
|
|
93
|
+
float angle = shapeUv.z * czm_twoPi;
|
|
94
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
|
|
95
|
+
angle /= u_cylinderUvToShapeUvAngle.x;
|
|
72
96
|
#endif
|
|
73
97
|
|
|
74
98
|
return vec3(radius, height, angle);
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
2
|
export default "/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
|
|
3
3
|
#define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS\n\
|
|
4
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT\n\
|
|
5
4
|
#define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT\n\
|
|
6
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT\n\
|
|
7
5
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE\n\
|
|
8
|
-
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
|
|
9
6
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY\n\
|
|
10
7
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY\n\
|
|
11
8
|
#define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED\n\
|
|
@@ -27,49 +24,76 @@ export default "/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
|
|
|
27
24
|
uniform float u_cylinderShapeUvAngleRangeZeroMid;\n\
|
|
28
25
|
#endif\n\
|
|
29
26
|
\n\
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) {\n\
|
|
28
|
+
// Convert from Cartesian UV space [0, 1] to Cartesian local space [-1, 1]\n\
|
|
29
|
+
vec3 position = positionUv * 2.0 - 1.0;\n\
|
|
32
30
|
\n\
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
float radius = length(position.xy); // [0, 1]\n\
|
|
32
|
+
vec3 radial = normalize(vec3(position.xy, 0.0));\n\
|
|
33
|
+
\n\
|
|
34
|
+
// Shape space height is defined within [0, 1]\n\
|
|
35
|
+
float height = positionUv.z; // [0, 1]\n\
|
|
36
|
+
vec3 z = vec3(0.0, 0.0, 1.0);\n\
|
|
37
|
+
\n\
|
|
38
|
+
float angle = atan(position.y, position.x);\n\
|
|
39
|
+
vec3 east = normalize(vec3(-position.y, position.x, 0.0));\n\
|
|
40
|
+
\n\
|
|
41
|
+
vec3 point = vec3(radius, height, angle);\n\
|
|
42
|
+
mat3 jacobianT = mat3(radial, z, east / length(position.xy));\n\
|
|
43
|
+
return PointJacobianT(point, jacobianT);\n\
|
|
44
|
+
}\n\
|
|
45
|
+
\n\
|
|
46
|
+
vec3 convertShapeToShapeUvSpace(in vec3 positionShape) {\n\
|
|
47
|
+
float radius = positionShape.x;\n\
|
|
48
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
|
|
49
|
+
radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y;\n\
|
|
41
50
|
#endif\n\
|
|
42
51
|
\n\
|
|
43
|
-
|
|
44
|
-
#if defined(
|
|
45
|
-
|
|
46
|
-
#else\n\
|
|
47
|
-
float height = positionUv.z; // [0,1]\n\
|
|
48
|
-
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
|
|
49
|
-
height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset\n\
|
|
50
|
-
#endif\n\
|
|
52
|
+
float height = positionShape.y;\n\
|
|
53
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
|
|
54
|
+
height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y;\n\
|
|
51
55
|
#endif\n\
|
|
52
56
|
\n\
|
|
53
|
-
|
|
54
|
-
#if defined(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
#
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
\n\
|
|
64
|
-
|
|
65
|
-
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)\n\
|
|
66
|
-
angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;\n\
|
|
67
|
-
#elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
|
|
68
|
-
angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;\n\
|
|
69
|
-
#endif\n\
|
|
70
|
-
\n\
|
|
71
|
-
angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset\n\
|
|
57
|
+
float angle = (positionShape.z + czm_pi) / czm_twoPi;\n\
|
|
58
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
|
|
59
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)\n\
|
|
60
|
+
// Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.\n\
|
|
61
|
+
angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);\n\
|
|
62
|
+
#endif\n\
|
|
63
|
+
\n\
|
|
64
|
+
// Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
|
|
65
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)\n\
|
|
66
|
+
angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;\n\
|
|
67
|
+
#elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
|
|
68
|
+
angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;\n\
|
|
72
69
|
#endif\n\
|
|
70
|
+
\n\
|
|
71
|
+
angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y;\n\
|
|
72
|
+
#endif\n\
|
|
73
|
+
\n\
|
|
74
|
+
return vec3(radius, height, angle);\n\
|
|
75
|
+
}\n\
|
|
76
|
+
\n\
|
|
77
|
+
PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) {\n\
|
|
78
|
+
PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv);\n\
|
|
79
|
+
pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point);\n\
|
|
80
|
+
return pointJacobian;\n\
|
|
81
|
+
}\n\
|
|
82
|
+
\n\
|
|
83
|
+
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {\n\
|
|
84
|
+
float radius = shapeUv.x;\n\
|
|
85
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
|
|
86
|
+
radius /= u_cylinderUvToShapeUvRadius.x;\n\
|
|
87
|
+
#endif\n\
|
|
88
|
+
\n\
|
|
89
|
+
float height = shapeUv.y;\n\
|
|
90
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
|
|
91
|
+
height /= u_cylinderUvToShapeUvHeight.x;\n\
|
|
92
|
+
#endif\n\
|
|
93
|
+
\n\
|
|
94
|
+
float angle = shapeUv.z * czm_twoPi;\n\
|
|
95
|
+
#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
|
|
96
|
+
angle /= u_cylinderUvToShapeUvAngle.x;\n\
|
|
73
97
|
#endif\n\
|
|
74
98
|
\n\
|
|
75
99
|
return vec3(radius, height, angle);\n\
|
|
@@ -2,19 +2,13 @@
|
|
|
2
2
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY
|
|
3
3
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY
|
|
4
4
|
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE
|
|
5
|
-
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
|
|
6
5
|
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED
|
|
7
6
|
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE
|
|
8
|
-
#define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO
|
|
9
|
-
#define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN
|
|
10
|
-
#define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
|
|
11
|
-
#define ELLIPSOID_IS_SPHERE
|
|
12
7
|
*/
|
|
13
8
|
|
|
14
9
|
uniform vec3 u_ellipsoidRadiiUv; // [0,1]
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
#endif
|
|
10
|
+
uniform vec2 u_evoluteScale; // (radiiUv.x ^ 2 - radiiUv.z ^ 2) * vec2(1.0, -1.0) / radiiUv;
|
|
11
|
+
uniform vec3 u_ellipsoidInverseRadiiSquaredUv;
|
|
18
12
|
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
|
|
19
13
|
uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid;
|
|
20
14
|
#endif
|
|
@@ -24,107 +18,122 @@ uniform vec3 u_ellipsoidRadiiUv; // [0,1]
|
|
|
24
18
|
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
|
|
25
19
|
uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset
|
|
26
20
|
#endif
|
|
27
|
-
|
|
28
|
-
uniform float u_ellipsoidInverseHeightDifferenceUv;
|
|
29
|
-
uniform vec2 u_ellipseInnerRadiiUv; // [0,1]
|
|
30
|
-
#endif
|
|
21
|
+
uniform float u_ellipsoidInverseHeightDifferenceUv;
|
|
31
22
|
|
|
32
23
|
// robust iterative solution without trig functions
|
|
33
24
|
// https://github.com/0xfaded/ellipse_demo/issues/1
|
|
34
25
|
// https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
// Con: Inaccurate with exterior points and thin ellipses
|
|
38
|
-
float ellipseDistanceIterative (vec2 pos, vec2 radii) {
|
|
26
|
+
// Extended to return radius of curvature along with the point
|
|
27
|
+
vec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) {
|
|
39
28
|
vec2 p = abs(pos);
|
|
40
|
-
vec2
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
vec2 inverseRadii = 1.0 / radii;
|
|
30
|
+
|
|
31
|
+
// We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))
|
|
32
|
+
// but store the cos and sin of t in a vec2 for efficiency.
|
|
33
|
+
// Initial guess: t = pi/4
|
|
34
|
+
vec2 tTrigs = vec2(0.7071067811865476);
|
|
35
|
+
// Initial guess of point on ellipsoid
|
|
36
|
+
vec2 v = radii * tTrigs;
|
|
37
|
+
// Center of curvature of the ellipse at v
|
|
38
|
+
vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;
|
|
44
39
|
|
|
45
40
|
const int iterations = 3;
|
|
46
41
|
for (int i = 0; i < iterations; ++i) {
|
|
47
|
-
|
|
48
|
-
vec2 q = normalize(p -
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
// Find the (approximate) intersection of p - evolute with the ellipsoid.
|
|
43
|
+
vec2 q = normalize(p - evolute) * length(v - evolute);
|
|
44
|
+
// Update the estimate of t.
|
|
45
|
+
tTrigs = (q + evolute) * inverseRadii;
|
|
46
|
+
tTrigs = normalize(clamp(tTrigs, 0.0, 1.0));
|
|
47
|
+
v = radii * tTrigs;
|
|
48
|
+
evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;
|
|
51
49
|
}
|
|
52
|
-
|
|
50
|
+
|
|
51
|
+
return vec3(v * sign(pos), length(v - evolute));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) {
|
|
55
|
+
// Convert from UV space [0, 1] to local space [-1, 1]
|
|
56
|
+
vec3 position = positionUv * 2.0 - 1.0;
|
|
57
|
+
// Undo the scaling from ellipsoid to sphere
|
|
58
|
+
position = position * u_ellipsoidRadiiUv;
|
|
59
|
+
|
|
60
|
+
float longitude = atan(position.y, position.x);
|
|
61
|
+
vec3 east = normalize(vec3(-position.y, position.x, 0.0));
|
|
62
|
+
|
|
63
|
+
// Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z)
|
|
64
|
+
// (assume radii.y == radii.x) and find the nearest point on the ellipse and its normal
|
|
65
|
+
float distanceFromZAxis = length(position.xy);
|
|
66
|
+
vec2 posEllipse = vec2(distanceFromZAxis, position.z);
|
|
67
|
+
vec3 surfacePointAndRadius = nearestPointAndRadiusOnEllipse(posEllipse, u_ellipsoidRadiiUv.xz);
|
|
68
|
+
vec2 surfacePoint = surfacePointAndRadius.xy;
|
|
69
|
+
|
|
70
|
+
vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquaredUv.xz);
|
|
71
|
+
float latitude = atan(normal2d.y, normal2d.x);
|
|
72
|
+
vec3 north = vec3(-normal2d.y * normalize(position.xy), abs(normal2d.x));
|
|
73
|
+
|
|
74
|
+
float heightSign = length(posEllipse) < length(surfacePoint) ? -1.0 : 1.0;
|
|
75
|
+
float height = heightSign * length(posEllipse - surfacePoint);
|
|
76
|
+
vec3 up = normalize(cross(east, north));
|
|
77
|
+
|
|
78
|
+
vec3 point = vec3(longitude, latitude, height);
|
|
79
|
+
mat3 jacobianT = mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up);
|
|
80
|
+
return PointJacobianT(point, jacobianT);
|
|
53
81
|
}
|
|
54
82
|
|
|
55
|
-
vec3
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
#else
|
|
64
|
-
vec3 posEllipsoid = positionLocal * u_ellipsoidRadiiUv;
|
|
65
|
-
vec3 normal = normalize(posEllipsoid * u_ellipsoidInverseRadiiSquaredUv); // geodetic surface normal
|
|
83
|
+
vec3 convertShapeToShapeUvSpace(in vec3 positionShape) {
|
|
84
|
+
// Longitude: shift & scale to [0, 1]
|
|
85
|
+
float longitude = (positionShape.x + czm_pi) / czm_twoPi;
|
|
86
|
+
|
|
87
|
+
// Correct the angle when max < min
|
|
88
|
+
// Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.
|
|
89
|
+
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
|
|
90
|
+
longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);
|
|
66
91
|
#endif
|
|
67
92
|
|
|
68
|
-
//
|
|
69
|
-
#if defined(
|
|
70
|
-
|
|
71
|
-
#else
|
|
72
|
-
float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;
|
|
73
|
-
|
|
74
|
-
// Correct the angle when max < min
|
|
75
|
-
// Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.
|
|
76
|
-
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
|
|
77
|
-
longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);
|
|
78
|
-
#endif
|
|
79
|
-
|
|
80
|
-
// Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
|
|
81
|
-
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)
|
|
82
|
-
longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;
|
|
83
|
-
#endif
|
|
84
|
-
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)
|
|
85
|
-
longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;
|
|
86
|
-
#endif
|
|
87
|
-
|
|
88
|
-
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
|
|
89
|
-
longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;
|
|
90
|
-
#endif
|
|
93
|
+
// Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
|
|
94
|
+
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)
|
|
95
|
+
longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;
|
|
91
96
|
#endif
|
|
97
|
+
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)
|
|
98
|
+
longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;
|
|
99
|
+
#endif
|
|
100
|
+
|
|
101
|
+
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
|
|
102
|
+
longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;
|
|
103
|
+
#endif
|
|
104
|
+
|
|
105
|
+
// Latitude: shift and scale to [0, 1]
|
|
106
|
+
float latitude = (positionShape.y + czm_piOverTwo) / czm_pi;
|
|
107
|
+
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
|
|
108
|
+
latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;
|
|
109
|
+
#endif
|
|
110
|
+
|
|
111
|
+
// Height: scale to the range [0, 1]
|
|
112
|
+
float height = 1.0 + positionShape.z * u_ellipsoidInverseHeightDifferenceUv;
|
|
113
|
+
|
|
114
|
+
return vec3(longitude, latitude, height);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) {
|
|
118
|
+
PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv);
|
|
119
|
+
pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point);
|
|
120
|
+
return pointJacobian;
|
|
121
|
+
}
|
|
92
122
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
#
|
|
97
|
-
|
|
98
|
-
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
|
|
99
|
-
latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;
|
|
100
|
-
#endif
|
|
123
|
+
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
|
|
124
|
+
// Convert from [0, 1] to radians [-pi, pi]
|
|
125
|
+
float longitude = shapeUv.x * czm_twoPi;
|
|
126
|
+
#if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
|
|
127
|
+
longitude /= u_ellipsoidUvToShapeUvLongitude.x;
|
|
101
128
|
#endif
|
|
102
129
|
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// and set the shape space position to 1 (front) or 0 (back) accordingly.
|
|
108
|
-
float height = 1.0;
|
|
109
|
-
#else
|
|
110
|
-
#if defined(ELLIPSOID_IS_SPHERE)
|
|
111
|
-
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
|
|
112
|
-
float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;
|
|
113
|
-
#else
|
|
114
|
-
float height = length(posEllipsoid);
|
|
115
|
-
#endif
|
|
116
|
-
#else
|
|
117
|
-
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
|
|
118
|
-
// Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).
|
|
119
|
-
// This is an optimization so that math can be done with ellipses instead of ellipsoids.
|
|
120
|
-
vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);
|
|
121
|
-
float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;
|
|
122
|
-
#else
|
|
123
|
-
// TODO: this is probably not correct
|
|
124
|
-
float height = length(posEllipsoid);
|
|
125
|
-
#endif
|
|
126
|
-
#endif
|
|
130
|
+
// Convert from [0, 1] to radians [-pi/2, pi/2]
|
|
131
|
+
float latitude = shapeUv.y * czm_pi;
|
|
132
|
+
#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
|
|
133
|
+
latitude /= u_ellipsoidUvToShapeUvLatitude.x;
|
|
127
134
|
#endif
|
|
135
|
+
|
|
136
|
+
float height = shapeUv.z / u_ellipsoidInverseHeightDifferenceUv;
|
|
128
137
|
|
|
129
138
|
return vec3(longitude, latitude, height);
|
|
130
139
|
}
|