@cesium/engine 8.0.0 → 9.1.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 +7 -10
- package/Build/Workers/{chunk-F4HFJMGM.js → chunk-2CSEEWHN.js} +6 -6
- package/Build/Workers/{chunk-7TC63SJW.js → chunk-34DGOKCO.js} +10 -12
- package/Build/Workers/{chunk-7ZFGPDJA.js → chunk-3RZK5NNV.js} +4 -4
- package/Build/Workers/{chunk-M7ERACJJ.js → chunk-3S2MFY4B.js} +13 -13
- package/Build/Workers/{chunk-BROJAZRZ.js → chunk-4AJGCQFX.js} +13 -13
- package/Build/Workers/{chunk-2FWRMUTY.js → chunk-4KIUON73.js} +4 -4
- package/Build/Workers/{chunk-5QULIR53.js → chunk-4PHPQRSH.js} +4 -4
- package/Build/Workers/{chunk-X4356LRH.js → chunk-66E3H2KU.js} +12 -12
- package/Build/Workers/{chunk-G43QFN4Q.js → chunk-6HCAQOVK.js} +6 -6
- package/Build/Workers/{chunk-23UFSGND.js → chunk-7LPEGKOF.js} +7 -7
- package/Build/Workers/{chunk-DDUQAJ4P.js → chunk-7VZNXIKG.js} +7 -7
- package/Build/Workers/{chunk-JURN7NPV.js → chunk-A6NCZSL3.js} +19 -19
- package/Build/Workers/{chunk-ZT7KWISZ.js → chunk-AOFMPKUB.js} +4 -4
- package/Build/Workers/{chunk-BIKA3NRA.js → chunk-AOIKO5Y7.js} +5 -5
- package/Build/Workers/{chunk-YWTJ2B4B.js → chunk-BDUJXBVF.js} +1 -1
- package/Build/Workers/{chunk-OGXZVPPM.js → chunk-C5CE4OG6.js} +469 -6
- package/Build/Workers/{chunk-FNIRWHJB.js → chunk-CE6GTZ4I.js} +11 -13
- package/Build/Workers/{chunk-SH5USDPI.js → chunk-CYAJYEKW.js} +6 -6
- package/Build/Workers/{chunk-Y5UQJLYE.js → chunk-FOZQIHZK.js} +6 -6
- package/Build/Workers/{chunk-2FRVPMCS.js → chunk-G7CJQKKD.js} +7 -7
- package/Build/Workers/{chunk-EERJKOAF.js → chunk-GIFJ77E4.js} +4 -4
- package/Build/Workers/{chunk-FJKNFAKQ.js → chunk-I5TDPPC4.js} +7197 -5096
- package/Build/Workers/{chunk-3VAZEH7M.js → chunk-IBXGK4WV.js} +2 -2
- package/Build/Workers/{chunk-VOXYEYJT.js → chunk-JI2445T5.js} +11 -11
- package/Build/Workers/{chunk-PGSJK77E.js → chunk-KPY4F4BW.js} +6 -6
- package/Build/Workers/{chunk-I46ZRR5W.js → chunk-LVJCR7DH.js} +17 -17
- package/Build/Workers/{chunk-T3XIFPYR.js → chunk-LW7WGHEU.js} +16 -16
- package/Build/Workers/{chunk-HU6N6EXB.js → chunk-MWYZ64MH.js} +12 -11
- package/Build/Workers/chunk-NI2R52QD.js +961 -0
- package/Build/Workers/{chunk-SOWMRMWA.js → chunk-PEABJLCK.js} +1 -1
- package/Build/Workers/{chunk-EG6PTBY2.js → chunk-PK7TEP3J.js} +15 -15
- package/Build/Workers/{chunk-GRC2ZTAF.js → chunk-POLFRINT.js} +14 -14
- package/Build/Workers/{chunk-Z3TIFFGF.js → chunk-PS6AEMBR.js} +7 -7
- package/Build/Workers/{chunk-Y2ME2IJV.js → chunk-PWF3YJJ5.js} +13 -13
- package/Build/Workers/{chunk-2A75IWRS.js → chunk-QKF7XXEQ.js} +7 -7
- package/Build/Workers/{chunk-4H7PY4U5.js → chunk-RL73GOEF.js} +2 -2
- package/Build/Workers/{chunk-MDWEGWPA.js → chunk-RR7EOKGZ.js} +10 -10
- package/Build/Workers/{chunk-F3YA3Y2Z.js → chunk-S4XDCPKD.js} +1 -1
- package/Build/Workers/{chunk-PPH7OFP3.js → chunk-TMMOULW3.js} +5 -5
- package/Build/Workers/{chunk-XGI5BXZY.js → chunk-U4IMCOF5.js} +2 -2
- package/Build/Workers/{chunk-4DO5W5XZ.js → chunk-UAJEGIWA.js} +6 -6
- package/Build/Workers/{chunk-BBWDMCVU.js → chunk-UCPPWV64.js} +1 -1
- package/Build/Workers/{chunk-FZRIVR7Y.js → chunk-V7JB576Q.js} +5 -5
- package/Build/Workers/{chunk-2UPKWTMJ.js → chunk-WEGCQ5DY.js} +6 -6
- package/Build/Workers/{chunk-STW2DGFI.js → chunk-WFICTTOE.js} +2 -2
- package/Build/Workers/{chunk-LPR3YNP2.js → chunk-WWP3I7R5.js} +5 -5
- package/Build/Workers/{chunk-A5DWLWCY.js → chunk-XHLDDE65.js} +10 -10
- package/Build/Workers/{chunk-UEXTBDBE.js → chunk-XWML5Y7N.js} +11 -13
- package/Build/Workers/{chunk-EHWHNOEX.js → chunk-YLZTCEBJ.js} +1 -1
- package/Build/Workers/{chunk-34FXV7D7.js → chunk-ZC4AGBZK.js} +2 -2
- package/Build/Workers/{chunk-GATZHF3K.js → chunk-ZDP32RQI.js} +2 -2
- package/Build/Workers/{chunk-KKCR2YOP.js → chunk-ZWPIM77Q.js} +11 -11
- package/Build/Workers/combineGeometry.js +22 -24
- package/Build/Workers/createBoxGeometry.js +16 -18
- package/Build/Workers/createBoxOutlineGeometry.js +14 -16
- package/Build/Workers/createCircleGeometry.js +24 -26
- package/Build/Workers/createCircleOutlineGeometry.js +17 -19
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -34
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -31
- package/Build/Workers/createCorridorGeometry.js +27 -29
- package/Build/Workers/createCorridorOutlineGeometry.js +26 -28
- package/Build/Workers/createCylinderGeometry.js +18 -20
- package/Build/Workers/createCylinderOutlineGeometry.js +16 -18
- package/Build/Workers/createEllipseGeometry.js +24 -26
- package/Build/Workers/createEllipseOutlineGeometry.js +17 -19
- package/Build/Workers/createEllipsoidGeometry.js +17 -19
- package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -18
- package/Build/Workers/createFrustumGeometry.js +16 -18
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -19
- package/Build/Workers/createGeometry.js +23 -25
- package/Build/Workers/createGroundPolylineGeometry.js +23 -25
- package/Build/Workers/createPlaneGeometry.js +14 -16
- package/Build/Workers/createPlaneOutlineGeometry.js +13 -15
- package/Build/Workers/createPolygonGeometry.js +33 -35
- package/Build/Workers/createPolygonOutlineGeometry.js +28 -30
- package/Build/Workers/createPolylineGeometry.js +23 -25
- package/Build/Workers/createPolylineVolumeGeometry.js +29 -31
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -27
- package/Build/Workers/createRectangleGeometry.js +27 -29
- package/Build/Workers/createRectangleOutlineGeometry.js +18 -20
- package/Build/Workers/createSimplePolylineGeometry.js +21 -23
- package/Build/Workers/createSphereGeometry.js +17 -19
- package/Build/Workers/createSphereOutlineGeometry.js +16 -18
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -16
- package/Build/Workers/createVectorTileGeometries.js +22 -24
- package/Build/Workers/createVectorTilePoints.js +12 -12
- package/Build/Workers/createVectorTilePolygons.js +20 -22
- package/Build/Workers/createVectorTilePolylines.js +14 -16
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -25
- package/Build/Workers/createVerticesFromHeightmap.js +23 -25
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -22
- package/Build/Workers/createWallGeometry.js +22 -24
- package/Build/Workers/createWallOutlineGeometry.js +21 -23
- package/Build/Workers/decodeDraco.js +11 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +10 -11
- package/Build/Workers/transcodeKTX2.js +8 -8
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -22
- package/Source/Core/Check.d.ts +127 -0
- package/Source/Core/Check.js +0 -1
- package/Source/Core/Geometry.js +1 -1
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/PixelFormat.js +1 -0
- package/Source/Core/PolygonGeometry.js +1 -1
- package/Source/Core/Rectangle.js +89 -0
- package/Source/Core/VerticalExaggeration.js +2 -1
- package/Source/DataSources/DataSourceDisplay.js +5 -0
- package/Source/Renderer/ShaderBuilder.js +6 -3
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Billboard.js +37 -3
- package/Source/Scene/BillboardCollection.js +1 -1
- package/Source/Scene/BingMapsImageryProvider.js +4 -0
- package/Source/Scene/Cesium3DTile.js +65 -0
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +2 -9
- package/Source/Scene/Cesium3DTileset.js +52 -40
- package/Source/Scene/ClippingPolygon.js +212 -0
- package/Source/Scene/ClippingPolygonCollection.js +968 -0
- package/Source/Scene/Globe.js +14 -67
- package/Source/Scene/GlobeSurfaceShaderSet.js +81 -15
- package/Source/Scene/GlobeSurfaceTileProvider.js +81 -1
- package/Source/Scene/Label.js +33 -0
- package/Source/Scene/LabelCollection.js +2 -1
- package/Source/Scene/Model/Model.js +83 -0
- package/Source/Scene/Model/Model3DTileContent.js +21 -0
- package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +92 -0
- package/Source/Scene/Model/ModelSceneGraph.js +5 -0
- package/Source/Scene/Primitive.js +0 -3
- package/Source/Scene/SensorVolumePortionToDisplay.js +1 -1
- package/Source/Scene/Terrain.js +2 -2
- package/Source/Scene/VoxelBoxShape.js +0 -15
- package/Source/Scene/VoxelCylinderShape.js +14 -131
- package/Source/Scene/VoxelEllipsoidShape.js +136 -227
- package/Source/Scene/VoxelPrimitive.js +106 -14
- package/Source/Scene/VoxelRenderResources.js +9 -3
- package/Source/Scene/VoxelShape.js +0 -10
- package/Source/Scene/processVoxelProperties.js +1 -0
- package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
- package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +37 -0
- package/Source/Shaders/Builtin/Functions/clipPolygons.js +39 -0
- package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +14 -0
- package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +15 -0
- package/Source/Shaders/GlobeFS.glsl +12 -0
- package/Source/Shaders/GlobeFS.js +12 -0
- package/Source/Shaders/GlobeVS.glsl +32 -0
- package/Source/Shaders/GlobeVS.js +32 -0
- package/Source/Shaders/Model/GeometryStageVS.glsl +1 -1
- package/Source/Shaders/Model/GeometryStageVS.js +1 -1
- package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +6 -0
- package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +8 -0
- package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +27 -0
- package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +29 -0
- package/Source/Shaders/Model/ModelFS.glsl +6 -0
- package/Source/Shaders/Model/ModelFS.js +7 -1
- package/Source/Shaders/Model/ModelVS.glsl +4 -0
- package/Source/Shaders/Model/ModelVS.js +4 -0
- package/Source/Shaders/PolygonSignedDistanceFS.glsl +100 -0
- package/Source/Shaders/PolygonSignedDistanceFS.js +101 -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 +66 -96
- package/Source/Shaders/Voxels/IntersectCylinder.js +66 -96
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +226 -154
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +226 -154
- 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 +93 -43
- package/Source/Shaders/Voxels/VoxelFS.js +93 -43
- 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 +50 -8
- package/Source/Shaders/Voxels/convertUvToCylinder.js +50 -8
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +82 -53
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +82 -53
- package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
- package/Source/Workers/createGeometry.js +1 -1
- package/index.d.ts +478 -35
- package/index.js +61 -52
- package/package.json +2 -2
- package/Build/Workers/chunk-BG4UCVXN.js +0 -73
- package/Build/Workers/chunk-TTUZP4BO.js +0 -501
- package/Build/Workers/chunk-YJEBABKH.js +0 -2977
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
|
|
2
|
+
precision highp float;
|
|
1
3
|
czm_modelMaterial defaultModelMaterial()
|
|
2
4
|
{
|
|
3
5
|
czm_modelMaterial material;
|
|
@@ -75,6 +77,10 @@ void main()
|
|
|
75
77
|
modelClippingPlanesStage(color);
|
|
76
78
|
#endif
|
|
77
79
|
|
|
80
|
+
#ifdef ENABLE_CLIPPING_POLYGONS
|
|
81
|
+
modelClippingPolygonsStage();
|
|
82
|
+
#endif
|
|
83
|
+
|
|
78
84
|
#if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS)
|
|
79
85
|
silhouetteStage(color);
|
|
80
86
|
#endif
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
-
export default "
|
|
2
|
+
export default "\n\
|
|
3
|
+
precision highp float;\n\
|
|
4
|
+
czm_modelMaterial defaultModelMaterial()\n\
|
|
3
5
|
{\n\
|
|
4
6
|
czm_modelMaterial material;\n\
|
|
5
7
|
material.diffuse = vec3(0.0);\n\
|
|
@@ -75,6 +77,10 @@ void main()\n\
|
|
|
75
77
|
#ifdef HAS_CLIPPING_PLANES\n\
|
|
76
78
|
modelClippingPlanesStage(color);\n\
|
|
77
79
|
#endif\n\
|
|
80
|
+
\n\
|
|
81
|
+
#ifdef ENABLE_CLIPPING_POLYGONS\n\
|
|
82
|
+
modelClippingPolygonsStage();\n\
|
|
83
|
+
#endif\n\
|
|
78
84
|
\n\
|
|
79
85
|
#if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS)\n\
|
|
80
86
|
silhouetteStage(color);\n\
|
|
@@ -111,6 +111,10 @@ void main()\n\
|
|
|
111
111
|
#ifdef HAS_ATMOSPHERE\n\
|
|
112
112
|
atmosphereStage(attributes);\n\
|
|
113
113
|
#endif\n\
|
|
114
|
+
\n\
|
|
115
|
+
#ifdef ENABLE_CLIPPING_POLYGONS\n\
|
|
116
|
+
modelClippingPolygonsStage(attributes);\n\
|
|
117
|
+
#endif\n\
|
|
114
118
|
\n\
|
|
115
119
|
#ifdef HAS_SILHOUETTE\n\
|
|
116
120
|
silhouetteStage(attributes, positionClip);\n\
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
in vec2 v_textureCoordinates;
|
|
2
|
+
|
|
3
|
+
uniform int u_polygonsLength;
|
|
4
|
+
uniform int u_extentsLength;
|
|
5
|
+
uniform highp sampler2D u_polygonTexture;
|
|
6
|
+
uniform highp sampler2D u_extentsTexture;
|
|
7
|
+
|
|
8
|
+
int getPolygonIndex(float dimension, vec2 coord) {
|
|
9
|
+
vec2 uv = coord.xy * dimension;
|
|
10
|
+
return int(floor(uv.y) * dimension + floor(uv.x));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
vec2 getLookupUv(ivec2 dimensions, int i) {
|
|
14
|
+
int pixY = i / dimensions.x;
|
|
15
|
+
int pixX = i - (pixY * dimensions.x);
|
|
16
|
+
float pixelWidth = 1.0 / float(dimensions.x);
|
|
17
|
+
float pixelHeight = 1.0 / float(dimensions.y);
|
|
18
|
+
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
|
|
19
|
+
float v = (float(pixY) + 0.5) * pixelHeight;
|
|
20
|
+
return vec2(u, v);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
vec4 getExtents(int i) {
|
|
24
|
+
return texture(u_extentsTexture, getLookupUv(textureSize(u_extentsTexture, 0), i));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
ivec2 getPositionsLengthAndExtentsIndex(int i) {
|
|
28
|
+
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);
|
|
29
|
+
vec4 value = texture(u_polygonTexture, uv);
|
|
30
|
+
return ivec2(int(value.x), int(value.y));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
vec2 getPolygonPosition(int i) {
|
|
34
|
+
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);
|
|
35
|
+
return texture(u_polygonTexture, uv).xy;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
vec2 getCoordinates(vec2 textureCoordinates, vec4 extents) {
|
|
39
|
+
float latitude = mix(extents.x, extents.x + 1.0 / extents.z, textureCoordinates.y);
|
|
40
|
+
float longitude = mix(extents.y, extents.y + 1.0 / extents.w, textureCoordinates.x);
|
|
41
|
+
return vec2(latitude, longitude);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void main() {
|
|
45
|
+
int lastPolygonIndex = 0;
|
|
46
|
+
out_FragColor = vec4(1.0);
|
|
47
|
+
|
|
48
|
+
// Get the relevant region of the texture
|
|
49
|
+
float dimension = float(u_extentsLength);
|
|
50
|
+
if (u_extentsLength > 2) {
|
|
51
|
+
dimension = ceil(log2(float(u_extentsLength)));
|
|
52
|
+
}
|
|
53
|
+
int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);
|
|
54
|
+
|
|
55
|
+
for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {
|
|
56
|
+
ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);
|
|
57
|
+
int positionsLength = positionsLengthAndExtents.x;
|
|
58
|
+
int polygonExtentsIndex = positionsLengthAndExtents.y;
|
|
59
|
+
lastPolygonIndex += 1;
|
|
60
|
+
|
|
61
|
+
// Only compute signed distance for the relevant part of the atlas
|
|
62
|
+
if (polygonExtentsIndex == regionIndex) {
|
|
63
|
+
float clipAmount = czm_infinity;
|
|
64
|
+
vec4 extents = getExtents(polygonExtentsIndex);
|
|
65
|
+
vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;
|
|
66
|
+
vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);
|
|
67
|
+
float s = 1.0;
|
|
68
|
+
|
|
69
|
+
// Check each edge for absolute distance
|
|
70
|
+
for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {
|
|
71
|
+
vec2 a = getPolygonPosition(lastPolygonIndex + i);
|
|
72
|
+
vec2 b = getPolygonPosition(lastPolygonIndex + j);
|
|
73
|
+
|
|
74
|
+
vec2 ab = b - a;
|
|
75
|
+
vec2 pa = p - a;
|
|
76
|
+
float t = dot(pa, ab) / dot(ab, ab);
|
|
77
|
+
t = clamp(t, 0.0, 1.0);
|
|
78
|
+
|
|
79
|
+
vec2 pq = pa - t * ab;
|
|
80
|
+
float d = length(pq);
|
|
81
|
+
|
|
82
|
+
// Inside / outside computation to determine sign
|
|
83
|
+
bvec3 cond = bvec3(p.y >= a.y,
|
|
84
|
+
p.y < b.y,
|
|
85
|
+
ab.x * pa.y > ab.y * pa.x);
|
|
86
|
+
if (all(cond) || all(not(cond))) s = -s;
|
|
87
|
+
if (abs(d) < abs(clipAmount)) {
|
|
88
|
+
clipAmount = d;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Normalize the range to [0,1]
|
|
93
|
+
vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;
|
|
94
|
+
// In the case where we've iterated through multiple polygons, take the minimum
|
|
95
|
+
out_FragColor = min(out_FragColor, result);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
lastPolygonIndex += positionsLength;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
export default "in vec2 v_textureCoordinates;\n\
|
|
3
|
+
\n\
|
|
4
|
+
uniform int u_polygonsLength;\n\
|
|
5
|
+
uniform int u_extentsLength;\n\
|
|
6
|
+
uniform highp sampler2D u_polygonTexture;\n\
|
|
7
|
+
uniform highp sampler2D u_extentsTexture;\n\
|
|
8
|
+
\n\
|
|
9
|
+
int getPolygonIndex(float dimension, vec2 coord) {\n\
|
|
10
|
+
vec2 uv = coord.xy * dimension;\n\
|
|
11
|
+
return int(floor(uv.y) * dimension + floor(uv.x));\n\
|
|
12
|
+
}\n\
|
|
13
|
+
\n\
|
|
14
|
+
vec2 getLookupUv(ivec2 dimensions, int i) {\n\
|
|
15
|
+
int pixY = i / dimensions.x;\n\
|
|
16
|
+
int pixX = i - (pixY * dimensions.x);\n\
|
|
17
|
+
float pixelWidth = 1.0 / float(dimensions.x);\n\
|
|
18
|
+
float pixelHeight = 1.0 / float(dimensions.y);\n\
|
|
19
|
+
float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel\n\
|
|
20
|
+
float v = (float(pixY) + 0.5) * pixelHeight;\n\
|
|
21
|
+
return vec2(u, v);\n\
|
|
22
|
+
}\n\
|
|
23
|
+
\n\
|
|
24
|
+
vec4 getExtents(int i) {\n\
|
|
25
|
+
return texture(u_extentsTexture, getLookupUv(textureSize(u_extentsTexture, 0), i));\n\
|
|
26
|
+
}\n\
|
|
27
|
+
\n\
|
|
28
|
+
ivec2 getPositionsLengthAndExtentsIndex(int i) {\n\
|
|
29
|
+
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);\n\
|
|
30
|
+
vec4 value = texture(u_polygonTexture, uv);\n\
|
|
31
|
+
return ivec2(int(value.x), int(value.y));\n\
|
|
32
|
+
}\n\
|
|
33
|
+
\n\
|
|
34
|
+
vec2 getPolygonPosition(int i) {\n\
|
|
35
|
+
vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);\n\
|
|
36
|
+
return texture(u_polygonTexture, uv).xy;\n\
|
|
37
|
+
}\n\
|
|
38
|
+
\n\
|
|
39
|
+
vec2 getCoordinates(vec2 textureCoordinates, vec4 extents) {\n\
|
|
40
|
+
float latitude = mix(extents.x, extents.x + 1.0 / extents.z, textureCoordinates.y);\n\
|
|
41
|
+
float longitude = mix(extents.y, extents.y + 1.0 / extents.w, textureCoordinates.x);\n\
|
|
42
|
+
return vec2(latitude, longitude);\n\
|
|
43
|
+
}\n\
|
|
44
|
+
\n\
|
|
45
|
+
void main() {\n\
|
|
46
|
+
int lastPolygonIndex = 0;\n\
|
|
47
|
+
out_FragColor = vec4(1.0);\n\
|
|
48
|
+
\n\
|
|
49
|
+
// Get the relevant region of the texture\n\
|
|
50
|
+
float dimension = float(u_extentsLength);\n\
|
|
51
|
+
if (u_extentsLength > 2) {\n\
|
|
52
|
+
dimension = ceil(log2(float(u_extentsLength)));\n\
|
|
53
|
+
}\n\
|
|
54
|
+
int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);\n\
|
|
55
|
+
\n\
|
|
56
|
+
for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {\n\
|
|
57
|
+
ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);\n\
|
|
58
|
+
int positionsLength = positionsLengthAndExtents.x;\n\
|
|
59
|
+
int polygonExtentsIndex = positionsLengthAndExtents.y;\n\
|
|
60
|
+
lastPolygonIndex += 1;\n\
|
|
61
|
+
\n\
|
|
62
|
+
// Only compute signed distance for the relevant part of the atlas\n\
|
|
63
|
+
if (polygonExtentsIndex == regionIndex) {\n\
|
|
64
|
+
float clipAmount = czm_infinity;\n\
|
|
65
|
+
vec4 extents = getExtents(polygonExtentsIndex);\n\
|
|
66
|
+
vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
|
|
67
|
+
vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);\n\
|
|
68
|
+
float s = 1.0;\n\
|
|
69
|
+
\n\
|
|
70
|
+
// Check each edge for absolute distance\n\
|
|
71
|
+
for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {\n\
|
|
72
|
+
vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
|
|
73
|
+
vec2 b = getPolygonPosition(lastPolygonIndex + j);\n\
|
|
74
|
+
\n\
|
|
75
|
+
vec2 ab = b - a;\n\
|
|
76
|
+
vec2 pa = p - a;\n\
|
|
77
|
+
float t = dot(pa, ab) / dot(ab, ab);\n\
|
|
78
|
+
t = clamp(t, 0.0, 1.0);\n\
|
|
79
|
+
\n\
|
|
80
|
+
vec2 pq = pa - t * ab;\n\
|
|
81
|
+
float d = length(pq);\n\
|
|
82
|
+
\n\
|
|
83
|
+
// Inside / outside computation to determine sign\n\
|
|
84
|
+
bvec3 cond = bvec3(p.y >= a.y, \n\
|
|
85
|
+
p.y < b.y, \n\
|
|
86
|
+
ab.x * pa.y > ab.y * pa.x);\n\
|
|
87
|
+
if (all(cond) || all(not(cond))) s = -s;\n\
|
|
88
|
+
if (abs(d) < abs(clipAmount)) {\n\
|
|
89
|
+
clipAmount = d;\n\
|
|
90
|
+
}\n\
|
|
91
|
+
}\n\
|
|
92
|
+
\n\
|
|
93
|
+
// Normalize the range to [0,1]\n\
|
|
94
|
+
vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
|
|
95
|
+
// In the case where we've iterated through multiple polygons, take the minimum\n\
|
|
96
|
+
out_FragColor = min(out_FragColor, result);\n\
|
|
97
|
+
}\n\
|
|
98
|
+
\n\
|
|
99
|
+
lastPolygonIndex += positionsLength;\n\
|
|
100
|
+
}\n\
|
|
101
|
+
}";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// See IntersectionUtils.glsl for the definitions of Ray
|
|
2
|
-
//
|
|
1
|
+
// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection,
|
|
2
|
+
// NO_HIT, Intersections
|
|
3
3
|
|
|
4
4
|
/* Box defines (set in Scene/VoxelBoxShape.js)
|
|
5
5
|
#define BOX_INTERSECTION_INDEX ### // always 0
|
|
@@ -8,66 +8,40 @@
|
|
|
8
8
|
uniform vec3 u_renderMinBounds;
|
|
9
9
|
uniform vec3 u_renderMaxBounds;
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
vec3 p0;
|
|
13
|
-
vec3 p1;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
Box constructVoxelBox(in ivec4 octreeCoords, in vec3 tileUv)
|
|
17
|
-
{
|
|
18
|
-
// Find the min/max cornerpoints of the voxel in tile coordinates
|
|
19
|
-
vec3 tileOrigin = vec3(octreeCoords.xyz);
|
|
20
|
-
vec3 numSamples = vec3(u_dimensions);
|
|
21
|
-
vec3 voxelSize = 1.0 / numSamples;
|
|
22
|
-
vec3 coordP0 = floor(tileUv * numSamples) * voxelSize + tileOrigin;
|
|
23
|
-
vec3 coordP1 = coordP0 + voxelSize;
|
|
24
|
-
|
|
25
|
-
// Transform to the UV coordinates of the scaled tileset
|
|
26
|
-
float tileSize = 1.0 / pow(2.0, float(octreeCoords.w));
|
|
27
|
-
vec3 p0 = convertShapeUvToUvSpace(coordP0 * tileSize);
|
|
28
|
-
vec3 p1 = convertShapeUvToUvSpace(coordP1 * tileSize);
|
|
29
|
-
|
|
30
|
-
return Box(p0, p1);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
vec3 getBoxNormal(in Box box, in Ray ray, in float t)
|
|
34
|
-
{
|
|
35
|
-
vec3 hitPoint = ray.pos + t * ray.dir;
|
|
36
|
-
vec3 lower = step(hitPoint, box.p0);
|
|
37
|
-
vec3 upper = step(box.p1, hitPoint);
|
|
38
|
-
return normalize(upper - lower);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Find the distances along a ray at which the ray intersects an axis-aligned box
|
|
42
|
-
// See https://tavianator.com/2011/ray_box.html
|
|
43
|
-
RayShapeIntersection intersectBox(in Ray ray, in Box box)
|
|
11
|
+
RayShapeIntersection intersectBox(in Ray ray, in vec3 minBound, in vec3 maxBound)
|
|
44
12
|
{
|
|
45
13
|
// Consider the box as the intersection of the space between 3 pairs of parallel planes
|
|
46
14
|
// Compute the distance along the ray to each plane
|
|
47
|
-
vec3 t0 = (
|
|
48
|
-
vec3 t1 = (
|
|
15
|
+
vec3 t0 = (minBound - ray.pos) / ray.dir;
|
|
16
|
+
vec3 t1 = (maxBound - ray.pos) / ray.dir;
|
|
49
17
|
|
|
50
18
|
// Identify candidate entries/exits based on distance from ray.pos
|
|
51
19
|
vec3 entries = min(t0, t1);
|
|
52
20
|
vec3 exits = max(t0, t1);
|
|
53
21
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
22
|
+
vec3 directions = sign(ray.dir);
|
|
23
|
+
|
|
24
|
+
// The actual intersection points are the furthest entry and the closest exit
|
|
25
|
+
float lastEntry = maxComponent(entries);
|
|
26
|
+
bvec3 isLastEntry = equal(entries, vec3(lastEntry));
|
|
27
|
+
vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions;
|
|
28
|
+
vec4 entry = vec4(entryNormal, lastEntry);
|
|
57
29
|
|
|
58
|
-
|
|
59
|
-
|
|
30
|
+
float firstExit = minComponent(exits);
|
|
31
|
+
bvec3 isFirstExit = equal(exits, vec3(firstExit));
|
|
32
|
+
vec3 exitNormal = vec3(isLastEntry) * directions;
|
|
33
|
+
vec4 exit = vec4(exitNormal, firstExit);
|
|
60
34
|
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
if (entry.w > exit.w) {
|
|
36
|
+
entry.w = NO_HIT;
|
|
37
|
+
exit.w = NO_HIT;
|
|
64
38
|
}
|
|
65
39
|
|
|
66
|
-
return RayShapeIntersection(
|
|
40
|
+
return RayShapeIntersection(entry, exit);
|
|
67
41
|
}
|
|
68
42
|
|
|
69
43
|
void intersectShape(in Ray ray, inout Intersections ix)
|
|
70
44
|
{
|
|
71
|
-
RayShapeIntersection intersection = intersectBox(ray,
|
|
45
|
+
RayShapeIntersection intersection = intersectBox(ray, u_renderMinBounds, u_renderMaxBounds);
|
|
72
46
|
setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection);
|
|
73
47
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
-
export default "// See IntersectionUtils.glsl for the definitions of Ray
|
|
3
|
-
//
|
|
2
|
+
export default "// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection,\n\
|
|
3
|
+
// NO_HIT, Intersections\n\
|
|
4
4
|
\n\
|
|
5
5
|
/* Box defines (set in Scene/VoxelBoxShape.js)\n\
|
|
6
6
|
#define BOX_INTERSECTION_INDEX ### // always 0\n\
|
|
@@ -9,67 +9,41 @@ export default "// See IntersectionUtils.glsl for the definitions of Ray and NO_
|
|
|
9
9
|
uniform vec3 u_renderMinBounds;\n\
|
|
10
10
|
uniform vec3 u_renderMaxBounds;\n\
|
|
11
11
|
\n\
|
|
12
|
-
|
|
13
|
-
vec3 p0;\n\
|
|
14
|
-
vec3 p1;\n\
|
|
15
|
-
};\n\
|
|
16
|
-
\n\
|
|
17
|
-
Box constructVoxelBox(in ivec4 octreeCoords, in vec3 tileUv)\n\
|
|
18
|
-
{\n\
|
|
19
|
-
// Find the min/max cornerpoints of the voxel in tile coordinates\n\
|
|
20
|
-
vec3 tileOrigin = vec3(octreeCoords.xyz);\n\
|
|
21
|
-
vec3 numSamples = vec3(u_dimensions);\n\
|
|
22
|
-
vec3 voxelSize = 1.0 / numSamples;\n\
|
|
23
|
-
vec3 coordP0 = floor(tileUv * numSamples) * voxelSize + tileOrigin;\n\
|
|
24
|
-
vec3 coordP1 = coordP0 + voxelSize;\n\
|
|
25
|
-
\n\
|
|
26
|
-
// Transform to the UV coordinates of the scaled tileset\n\
|
|
27
|
-
float tileSize = 1.0 / pow(2.0, float(octreeCoords.w));\n\
|
|
28
|
-
vec3 p0 = convertShapeUvToUvSpace(coordP0 * tileSize);\n\
|
|
29
|
-
vec3 p1 = convertShapeUvToUvSpace(coordP1 * tileSize);\n\
|
|
30
|
-
\n\
|
|
31
|
-
return Box(p0, p1);\n\
|
|
32
|
-
}\n\
|
|
33
|
-
\n\
|
|
34
|
-
vec3 getBoxNormal(in Box box, in Ray ray, in float t)\n\
|
|
35
|
-
{\n\
|
|
36
|
-
vec3 hitPoint = ray.pos + t * ray.dir;\n\
|
|
37
|
-
vec3 lower = step(hitPoint, box.p0);\n\
|
|
38
|
-
vec3 upper = step(box.p1, hitPoint);\n\
|
|
39
|
-
return normalize(upper - lower);\n\
|
|
40
|
-
}\n\
|
|
41
|
-
\n\
|
|
42
|
-
// Find the distances along a ray at which the ray intersects an axis-aligned box\n\
|
|
43
|
-
// See https://tavianator.com/2011/ray_box.html\n\
|
|
44
|
-
RayShapeIntersection intersectBox(in Ray ray, in Box box)\n\
|
|
12
|
+
RayShapeIntersection intersectBox(in Ray ray, in vec3 minBound, in vec3 maxBound)\n\
|
|
45
13
|
{\n\
|
|
46
14
|
// Consider the box as the intersection of the space between 3 pairs of parallel planes\n\
|
|
47
15
|
// Compute the distance along the ray to each plane\n\
|
|
48
|
-
vec3 t0 = (
|
|
49
|
-
vec3 t1 = (
|
|
16
|
+
vec3 t0 = (minBound - ray.pos) / ray.dir;\n\
|
|
17
|
+
vec3 t1 = (maxBound - ray.pos) / ray.dir;\n\
|
|
50
18
|
\n\
|
|
51
19
|
// Identify candidate entries/exits based on distance from ray.pos\n\
|
|
52
20
|
vec3 entries = min(t0, t1);\n\
|
|
53
21
|
vec3 exits = max(t0, t1);\n\
|
|
54
22
|
\n\
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
23
|
+
vec3 directions = sign(ray.dir);\n\
|
|
24
|
+
\n\
|
|
25
|
+
// The actual intersection points are the furthest entry and the closest exit\n\
|
|
26
|
+
float lastEntry = maxComponent(entries);\n\
|
|
27
|
+
bvec3 isLastEntry = equal(entries, vec3(lastEntry));\n\
|
|
28
|
+
vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions;\n\
|
|
29
|
+
vec4 entry = vec4(entryNormal, lastEntry);\n\
|
|
58
30
|
\n\
|
|
59
|
-
|
|
60
|
-
|
|
31
|
+
float firstExit = minComponent(exits);\n\
|
|
32
|
+
bvec3 isFirstExit = equal(exits, vec3(firstExit));\n\
|
|
33
|
+
vec3 exitNormal = vec3(isLastEntry) * directions;\n\
|
|
34
|
+
vec4 exit = vec4(exitNormal, firstExit);\n\
|
|
61
35
|
\n\
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
36
|
+
if (entry.w > exit.w) {\n\
|
|
37
|
+
entry.w = NO_HIT;\n\
|
|
38
|
+
exit.w = NO_HIT;\n\
|
|
65
39
|
}\n\
|
|
66
40
|
\n\
|
|
67
|
-
return RayShapeIntersection(
|
|
41
|
+
return RayShapeIntersection(entry, exit);\n\
|
|
68
42
|
}\n\
|
|
69
43
|
\n\
|
|
70
44
|
void intersectShape(in Ray ray, inout Intersections ix)\n\
|
|
71
45
|
{\n\
|
|
72
|
-
RayShapeIntersection intersection = intersectBox(ray,
|
|
46
|
+
RayShapeIntersection intersection = intersectBox(ray, u_renderMinBounds, u_renderMaxBounds);\n\
|
|
73
47
|
setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection);\n\
|
|
74
48
|
}\n\
|
|
75
49
|
";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
2
|
export default "// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT,\n\
|
|
3
|
-
// NO_HIT,
|
|
3
|
+
// NO_HIT, setShapeIntersection\n\
|
|
4
4
|
\n\
|
|
5
5
|
/* Clipping plane defines (set in Scene/VoxelRenderResources.js)\n\
|
|
6
6
|
#define CLIPPING_PLANES_UNION\n\
|