@cesium/engine 23.0.1 → 24.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-G6MJ3ZW3.js → chunk-2N4KDHS3.js} +10 -10
- package/Build/Workers/{chunk-C6HHBKT5.js → chunk-44EMEGKW.js} +5 -5
- package/Build/Workers/{chunk-TNXOPEIG.js → chunk-4TIG36AW.js} +12 -12
- package/Build/Workers/{chunk-PQTSXJBJ.js → chunk-5A2SW66E.js} +16 -16
- package/Build/Workers/{chunk-TXYQNXNW.js → chunk-5GXYJQ2K.js} +3 -3
- package/Build/Workers/{chunk-O67UP5YO.js → chunk-63SIWPLS.js} +13 -13
- package/Build/Workers/{chunk-CVAAIRNP.js → chunk-6MPGQEHA.js} +2 -2
- package/Build/Workers/{chunk-LHFC4R7Z.js → chunk-6RMS4S72.js} +6 -6
- package/Build/Workers/{chunk-77DJBHMI.js → chunk-6WLHJFD3.js} +7 -7
- package/Build/Workers/{chunk-HXEPZWJN.js → chunk-72VYSVEW.js} +9 -9
- package/Build/Workers/{chunk-VPWYHFQA.js → chunk-7MDYBRYJ.js} +4 -4
- package/Build/Workers/{chunk-XPMXRJDD.js → chunk-7O5XJTVE.js} +5 -5
- package/Build/Workers/{chunk-UEWYSOFD.js → chunk-7QRFIKWQ.js} +2 -2
- package/Build/Workers/{chunk-3UQ2YMPP.js → chunk-7TYLCBGK.js} +8 -8
- package/Build/Workers/{chunk-GLCPE2BJ.js → chunk-7X322WP2.js} +13 -13
- package/Build/Workers/{chunk-2OBWHTIC.js → chunk-A47HVBC5.js} +7 -7
- package/Build/Workers/{chunk-CID5SY7L.js → chunk-AF3MU2RL.js} +5 -5
- package/Build/Workers/{chunk-BTP3634E.js → chunk-AJLTU6PF.js} +1 -1
- package/Build/Workers/{chunk-YSJRB2UZ.js → chunk-AMIHNSST.js} +2 -2
- package/Build/Workers/{chunk-QPXGGVHC.js → chunk-B6SCUUFP.js} +10 -10
- package/Build/Workers/{chunk-QNABVTTP.js → chunk-BJD6QGXZ.js} +12 -12
- package/Build/Workers/{chunk-RZX6LOG6.js → chunk-C6P4IG5P.js} +6 -6
- package/Build/Workers/{chunk-4JJQRZYL.js → chunk-D4EJ2NXG.js} +17 -17
- package/Build/Workers/{chunk-K7UTK4OM.js → chunk-DHKPFLSJ.js} +1 -1
- package/Build/Workers/{chunk-S53HSRT6.js → chunk-DVB56LG7.js} +6 -6
- package/Build/Workers/{chunk-PBECJOWF.js → chunk-EDXL4W76.js} +2 -2
- package/Build/Workers/{chunk-ALTCIHRH.js → chunk-EV3VGO6Y.js} +17 -17
- package/Build/Workers/{chunk-UOQB7XQI.js → chunk-GOQBUCXH.js} +10 -10
- package/Build/Workers/{chunk-TMCTZ5E3.js → chunk-GQUNK2XC.js} +14 -14
- package/Build/Workers/{chunk-PAFMAR7A.js → chunk-HKUES6UG.js} +12 -12
- package/Build/Workers/{chunk-6U5QMZU3.js → chunk-HRHRYFHS.js} +9 -9
- package/Build/Workers/{chunk-PUO7BYDY.js → chunk-HXJMS2ZI.js} +1 -1
- package/Build/Workers/{chunk-FXSRA5UG.js → chunk-ILMFADZA.js} +4 -4
- package/Build/Workers/{chunk-U4SWB6TI.js → chunk-ISY4EZCA.js} +4 -4
- package/Build/Workers/{chunk-PGZ3B6CB.js → chunk-J6AW5YHS.js} +14 -14
- package/Build/Workers/{chunk-VX774SWE.js → chunk-JCI63T3K.js} +6 -6
- package/Build/Workers/{chunk-54O3AGOA.js → chunk-KLPGTXS3.js} +6 -6
- package/Build/Workers/{chunk-CNLXMOPM.js → chunk-LIB2H534.js} +10 -10
- package/Build/Workers/{chunk-H3TVRJLY.js → chunk-LXMCPFFS.js} +4 -4
- package/Build/Workers/{chunk-DNMASBMH.js → chunk-MKM27KGV.js} +2 -2
- package/Build/Workers/{chunk-66OWUDO7.js → chunk-N65BAKSH.js} +8 -8
- package/Build/Workers/{chunk-ZEMJQKHD.js → chunk-NKT5K3K3.js} +11 -11
- package/Build/Workers/{chunk-EIC3VAOZ.js → chunk-NPF7SSHZ.js} +7 -7
- package/Build/Workers/{chunk-YDR5LX5Z.js → chunk-PVV64VFW.js} +1 -1
- package/Build/Workers/{chunk-FKU77FNM.js → chunk-Q3C6VQH6.js} +4 -4
- package/Build/Workers/{chunk-CYOPNGPX.js → chunk-RQNJD3O4.js} +12 -12
- package/Build/Workers/{chunk-IJ3SUMK3.js → chunk-UIGVOKKI.js} +1 -1
- package/Build/Workers/{chunk-TFPG3ZKW.js → chunk-UQU4RXLT.js} +27 -19
- package/Build/Workers/{chunk-N6HRZLS6.js → chunk-VLDEUTOP.js} +2 -2
- package/Build/Workers/{chunk-MNSNOONX.js → chunk-VMVOUQ5J.js} +7 -7
- package/Build/Workers/{chunk-OZYB3AOR.js → chunk-XJRBB253.js} +11 -11
- package/Build/Workers/{chunk-B2VA6IEL.js → chunk-XY6HMDGI.js} +5 -5
- package/Build/Workers/{chunk-2M7DKGLW.js → chunk-Y7HNNPNK.js} +10 -10
- package/Build/Workers/{chunk-CJ7ZDY77.js → chunk-YAOZMOFL.js} +5 -5
- package/Build/Workers/{chunk-FCJQO4NC.js → chunk-YJZGW74L.js} +8 -8
- package/Build/Workers/{chunk-JUKGMJX7.js → chunk-YQFTYQMZ.js} +1 -1
- package/Build/Workers/{chunk-HNDE73JK.js → chunk-ZBZRTRJB.js} +10 -10
- package/Build/Workers/combineGeometry.js +24 -24
- package/Build/Workers/createBoxGeometry.js +18 -18
- package/Build/Workers/createBoxOutlineGeometry.js +16 -16
- package/Build/Workers/createCircleGeometry.js +26 -26
- package/Build/Workers/createCircleOutlineGeometry.js +19 -19
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
- package/Build/Workers/createCorridorGeometry.js +29 -29
- package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
- package/Build/Workers/createCylinderGeometry.js +20 -20
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
- package/Build/Workers/createEllipseGeometry.js +26 -26
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
- package/Build/Workers/createEllipsoidGeometry.js +19 -19
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
- package/Build/Workers/createFrustumGeometry.js +18 -18
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
- package/Build/Workers/createGeometry.js +24 -24
- package/Build/Workers/createGroundPolylineGeometry.js +22 -22
- package/Build/Workers/createPlaneGeometry.js +16 -16
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
- package/Build/Workers/createPolygonGeometry.js +32 -32
- package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
- package/Build/Workers/createPolylineGeometry.js +25 -25
- package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
- package/Build/Workers/createRectangleGeometry.js +27 -27
- package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
- package/Build/Workers/createSimplePolylineGeometry.js +23 -23
- package/Build/Workers/createSphereGeometry.js +19 -19
- package/Build/Workers/createSphereOutlineGeometry.js +18 -18
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -24
- package/Build/Workers/createVectorTilePoints.js +13 -13
- package/Build/Workers/createVectorTilePolygons.js +22 -22
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
- package/Build/Workers/createVerticesFromHeightmap.js +22 -22
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
- package/Build/Workers/createWallGeometry.js +25 -25
- package/Build/Workers/createWallOutlineGeometry.js +24 -24
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +12 -12
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
- package/Build/Workers/transcodeKTX2.js +6 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Source/Core/BoundingSphere.js +1 -1
- package/Source/Core/Cartesian2.js +7 -5
- package/Source/Core/Cartesian3.js +8 -6
- package/Source/Core/Cartesian4.js +8 -6
- package/Source/Core/Color.js +5 -3
- package/Source/Core/DeveloperError.js +2 -1
- package/Source/Core/ITwinPlatform.js +1 -0
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/S2Cell.js +2 -2
- package/Source/Core/TerrainMesh.js +10 -1
- package/Source/Core/TerrainPicker.js +1 -0
- package/Source/Core/WallGeometry.js +1 -1
- package/Source/Core/WallOutlineGeometry.js +1 -1
- package/Source/Core/assert.js +27 -0
- package/Source/Core/globalTypes.js +4 -0
- package/Source/DataSources/CzmlDataSource.js +9 -0
- package/Source/DataSources/PathGraphics.js +13 -0
- package/Source/DataSources/PathVisualizer.js +330 -18
- package/Source/DataSources/StaticGeometryColorBatch.js +7 -2
- package/Source/DataSources/StaticGeometryPerMaterialBatch.js +7 -2
- package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +3 -1
- package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +3 -1
- package/Source/Renderer/Context.js +1 -1
- package/Source/Renderer/RenderState.js +2 -2
- package/Source/Renderer/VertexArray.js +80 -0
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/BillboardCollection.js +65 -364
- package/Source/Scene/BufferPoint.js +148 -0
- package/Source/Scene/BufferPointCollection.js +135 -0
- package/Source/Scene/BufferPointMaterial.js +95 -0
- package/Source/Scene/BufferPolygon.js +516 -0
- package/Source/Scene/BufferPolygonCollection.js +368 -0
- package/Source/Scene/BufferPolygonMaterial.js +41 -0
- package/Source/Scene/BufferPolyline.js +185 -0
- package/Source/Scene/BufferPolylineCollection.js +136 -0
- package/Source/Scene/BufferPolylineMaterial.js +93 -0
- package/Source/Scene/BufferPrimitive.js +347 -0
- package/Source/Scene/BufferPrimitiveCollection.js +702 -0
- package/Source/Scene/BufferPrimitiveMaterial.js +140 -0
- package/Source/Scene/Cesium3DTileContent.js +5 -1
- package/Source/Scene/Cesium3DTileContentFactory.js +9 -0
- package/Source/Scene/Cesium3DTileStyle.js +22 -0
- package/Source/Scene/Cesium3DTileset.js +1 -0
- package/Source/Scene/ClippingPolygonCollection.js +270 -101
- package/Source/Scene/CubeMapPanorama.js +4 -4
- package/Source/Scene/GaussianSplat3DTileContent.js +40 -46
- package/Source/Scene/GaussianSplatPrimitive.js +413 -70
- package/Source/Scene/GetFeatureInfoFormat.js +3 -3
- package/Source/Scene/GltfLoader.js +215 -34
- package/Source/Scene/GltfSpzLoader.js +109 -0
- package/Source/Scene/ITwinData.js +1 -0
- package/Source/Scene/Label.js +32 -0
- package/Source/Scene/LabelCollection.js +14 -13
- package/Source/Scene/Material.js +2 -0
- package/Source/Scene/Megatexture.js +1 -0
- package/Source/Scene/MetadataClassProperty.js +24 -10
- package/Source/Scene/MetadataComponentType.js +115 -23
- package/Source/Scene/Model/CustomShaderPipelineStage.js +3 -1
- package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +761 -263
- package/Source/Scene/Model/MaterialPipelineStage.js +147 -0
- package/Source/Scene/Model/MetadataPipelineStage.js +3 -3
- package/Source/Scene/Model/ModelDrawCommand.js +6 -0
- package/Source/Scene/Model/ModelReader.js +1 -1
- package/Source/Scene/Model/ModelUtility.js +3 -1
- package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +330 -0
- package/Source/Scene/ModelComponents.js +1632 -1542
- package/Source/Scene/PickedMetadataInfo.js +1 -0
- package/Source/Scene/ScreenSpaceCameraController.js +13 -0
- package/Source/Scene/SkyBox.js +17 -8
- package/Source/Scene/TileBoundingRegion.js +1 -1
- package/Source/Scene/TileBoundingS2Cell.js +1 -1
- package/Source/Scene/TileBoundingSphere.js +1 -1
- package/Source/Scene/TweenCollection.js +7 -0
- package/Source/Scene/VectorGltf3DTileContent.js +382 -0
- package/Source/Scene/VertexAttributeSemantic.js +14 -0
- package/Source/Scene/WebMapServiceImageryProvider.js +2 -2
- package/Source/Scene/WebMapTileServiceImageryProvider.js +366 -131
- package/Source/Scene/parseStructuralMetadata.js +97 -37
- package/Source/Scene/renderBufferPointCollection.js +334 -0
- package/Source/Scene/renderBufferPolygonCollection.js +386 -0
- package/Source/Scene/renderBufferPolylineCollection.js +529 -0
- package/Source/Shaders/BillboardCollectionFS.glsl +2 -77
- package/Source/Shaders/BillboardCollectionFS.js +2 -77
- package/Source/Shaders/BillboardCollectionVS.glsl +2 -60
- package/Source/Shaders/BillboardCollectionVS.js +2 -60
- package/Source/Shaders/BufferPointMaterialFS.glsl +27 -0
- package/Source/Shaders/BufferPointMaterialFS.js +29 -0
- package/Source/Shaders/BufferPointMaterialVS.glsl +48 -0
- package/Source/Shaders/BufferPointMaterialVS.js +50 -0
- package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
- package/Source/Shaders/BufferPolygonMaterialFS.js +15 -0
- package/Source/Shaders/BufferPolygonMaterialVS.glsl +30 -0
- package/Source/Shaders/BufferPolygonMaterialVS.js +32 -0
- package/Source/Shaders/BufferPolylineMaterialFS.glsl +13 -0
- package/Source/Shaders/BufferPolylineMaterialFS.js +15 -0
- package/Source/Shaders/BufferPolylineMaterialVS.glsl +49 -0
- package/Source/Shaders/BufferPolylineMaterialVS.js +51 -0
- package/Source/Shaders/Model/EdgeVisibilityStageFS.glsl +34 -48
- package/Source/Shaders/Model/EdgeVisibilityStageFS.js +34 -49
- package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +98 -0
- package/Source/Shaders/Model/EdgeVisibilityStageVS.js +100 -0
- package/Source/Shaders/Model/ModelFS.glsl +15 -0
- package/Source/Shaders/Model/ModelFS.js +15 -0
- package/Source/Shaders/Model/ModelVS.glsl +8 -0
- package/Source/Shaders/Model/ModelVS.js +8 -0
- package/Source/Shaders/PolygonSignedDistanceFS.glsl +64 -33
- package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
- package/Source/Shaders/PrimitiveGaussianSplatVS.glsl +9 -2
- package/Source/Shaders/PrimitiveGaussianSplatVS.js +9 -2
- package/Source/Shaders/Voxels/VoxelFS.glsl +1 -1
- package/Source/Shaders/Voxels/VoxelFS.js +1 -1
- package/Source/Workers/decodeDraco.js +3 -0
- package/Source/Workers/decodeI3S.js +5 -2
- package/index.d.ts +1007 -111
- package/index.js +394 -369
- package/package.json +2 -2
|
@@ -52,48 +52,79 @@ void main() {
|
|
|
52
52
|
}
|
|
53
53
|
int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);
|
|
54
54
|
|
|
55
|
+
if (regionIndex >= u_extentsLength) {
|
|
56
|
+
return; // done (no polygons in this region)
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {
|
|
56
60
|
ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);
|
|
57
61
|
int positionsLength = positionsLengthAndExtents.x;
|
|
58
62
|
int polygonExtentsIndex = positionsLengthAndExtents.y;
|
|
59
63
|
lastPolygonIndex += 1;
|
|
60
64
|
|
|
65
|
+
// Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)
|
|
66
|
+
vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);
|
|
67
|
+
vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);
|
|
68
|
+
vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);
|
|
69
|
+
lastPolygonIndex += 2;
|
|
70
|
+
|
|
71
|
+
if (polygonExtentsIndex < regionIndex) {
|
|
72
|
+
lastPolygonIndex += positionsLength;
|
|
73
|
+
continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)
|
|
74
|
+
} else if (polygonExtentsIndex > regionIndex) {
|
|
75
|
+
break; // done (we know polygons are sorted by regionIndex)
|
|
76
|
+
}
|
|
77
|
+
|
|
61
78
|
// Only compute signed distance for the relevant part of the atlas
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
float clipAmount = czm_infinity;
|
|
80
|
+
vec4 extents = getExtents(polygonExtentsIndex);
|
|
81
|
+
vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;
|
|
82
|
+
vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position
|
|
83
|
+
|
|
84
|
+
// Only consider polygons whos boundingbox includes current pixel (with a slight padding)
|
|
85
|
+
float padding = 0.05; // 5% of polygon extents
|
|
86
|
+
float polygonNorth = polygonExtent.x + polygonExtent.z;
|
|
87
|
+
float polygonEast = polygonExtent.y + polygonExtent.w;
|
|
88
|
+
float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range
|
|
89
|
+
float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range
|
|
90
|
+
if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||
|
|
91
|
+
p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {
|
|
92
|
+
lastPolygonIndex += positionsLength;
|
|
93
|
+
continue; // skip to next
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
float s = 1.0;
|
|
97
|
+
|
|
98
|
+
// Check each edge for absolute distance.
|
|
99
|
+
// Cache the previous vertex to halve the texture reads per iteration.
|
|
100
|
+
vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);
|
|
101
|
+
for (int i = 0; i < positionsLength; i++) {
|
|
102
|
+
vec2 a = getPolygonPosition(lastPolygonIndex + i);
|
|
103
|
+
vec2 b = prev;
|
|
104
|
+
prev = a;
|
|
105
|
+
|
|
106
|
+
vec2 ab = b - a;
|
|
107
|
+
vec2 pa = p - a;
|
|
108
|
+
float t = dot(pa, ab) / dot(ab, ab);
|
|
109
|
+
t = clamp(t, 0.0, 1.0);
|
|
110
|
+
|
|
111
|
+
vec2 pq = pa - t * ab;
|
|
112
|
+
float d = length(pq);
|
|
113
|
+
|
|
114
|
+
// Inside / outside computation to determine sign
|
|
115
|
+
bvec3 cond = bvec3(p.y >= a.y,
|
|
116
|
+
p.y < b.y,
|
|
117
|
+
ab.x * pa.y > ab.y * pa.x);
|
|
118
|
+
if (all(cond) || all(not(cond))) s = -s;
|
|
119
|
+
if (abs(d) < abs(clipAmount)) {
|
|
120
|
+
clipAmount = d;
|
|
90
121
|
}
|
|
122
|
+
}
|
|
91
123
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
124
|
+
// Normalize the range to [0,1]
|
|
125
|
+
vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;
|
|
126
|
+
// In the case where we've iterated through multiple polygons, take the minimum
|
|
127
|
+
out_FragColor = min(out_FragColor, result);
|
|
97
128
|
|
|
98
129
|
lastPolygonIndex += positionsLength;
|
|
99
130
|
}
|
|
@@ -52,49 +52,80 @@ void main() {\n\
|
|
|
52
52
|
dimension = ceil(log2(float(u_extentsLength)));\n\
|
|
53
53
|
}\n\
|
|
54
54
|
int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);\n\
|
|
55
|
+
\n\
|
|
56
|
+
if (regionIndex >= u_extentsLength) {\n\
|
|
57
|
+
return; // done (no polygons in this region)\n\
|
|
58
|
+
}\n\
|
|
55
59
|
\n\
|
|
56
60
|
for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {\n\
|
|
57
61
|
ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);\n\
|
|
58
62
|
int positionsLength = positionsLengthAndExtents.x;\n\
|
|
59
63
|
int polygonExtentsIndex = positionsLengthAndExtents.y;\n\
|
|
60
64
|
lastPolygonIndex += 1;\n\
|
|
65
|
+
\n\
|
|
66
|
+
// Read the individual polygon extent (2 pixels: south/west, latRange/lonRange)\n\
|
|
67
|
+
vec2 extentsSouthWest = getPolygonPosition(lastPolygonIndex);\n\
|
|
68
|
+
vec2 extentsRange = getPolygonPosition(lastPolygonIndex + 1);\n\
|
|
69
|
+
vec4 polygonExtent = vec4(extentsSouthWest, extentsRange);\n\
|
|
70
|
+
lastPolygonIndex += 2;\n\
|
|
71
|
+
\n\
|
|
72
|
+
if (polygonExtentsIndex < regionIndex) {\n\
|
|
73
|
+
lastPolygonIndex += positionsLength;\n\
|
|
74
|
+
continue; // skip to next (TODO: could optimize further if we knew how many polygons to skip)\n\
|
|
75
|
+
} else if (polygonExtentsIndex > regionIndex) {\n\
|
|
76
|
+
break; // done (we know polygons are sorted by regionIndex)\n\
|
|
77
|
+
}\n\
|
|
61
78
|
\n\
|
|
62
79
|
// Only compute signed distance for the relevant part of the atlas\n\
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
\n\
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
\n\
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
80
|
+
float clipAmount = czm_infinity;\n\
|
|
81
|
+
vec4 extents = getExtents(polygonExtentsIndex);\n\
|
|
82
|
+
vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\n\
|
|
83
|
+
vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); // current pixel position\n\
|
|
84
|
+
\n\
|
|
85
|
+
// Only consider polygons whos boundingbox includes current pixel (with a slight padding)\n\
|
|
86
|
+
float padding = 0.05; // 5% of polygon extents\n\
|
|
87
|
+
float polygonNorth = polygonExtent.x + polygonExtent.z;\n\
|
|
88
|
+
float polygonEast = polygonExtent.y + polygonExtent.w;\n\
|
|
89
|
+
float latPadding = padding * polygonExtent.z; // padding as fraction of latitude range\n\
|
|
90
|
+
float lonPadding = padding * polygonExtent.w; // padding as fraction of longitude range\n\
|
|
91
|
+
if (p.x < polygonExtent.x - latPadding || p.x > polygonNorth + latPadding ||\n\
|
|
92
|
+
p.y < polygonExtent.y - lonPadding || p.y > polygonEast + lonPadding) {\n\
|
|
93
|
+
lastPolygonIndex += positionsLength;\n\
|
|
94
|
+
continue; // skip to next\n\
|
|
95
|
+
}\n\
|
|
96
|
+
\n\
|
|
97
|
+
float s = 1.0;\n\
|
|
98
|
+
\n\
|
|
99
|
+
// Check each edge for absolute distance.\n\
|
|
100
|
+
// Cache the previous vertex to halve the texture reads per iteration.\n\
|
|
101
|
+
vec2 prev = getPolygonPosition(lastPolygonIndex + positionsLength - 1);\n\
|
|
102
|
+
for (int i = 0; i < positionsLength; i++) {\n\
|
|
103
|
+
vec2 a = getPolygonPosition(lastPolygonIndex + i);\n\
|
|
104
|
+
vec2 b = prev;\n\
|
|
105
|
+
prev = a;\n\
|
|
106
|
+
\n\
|
|
107
|
+
vec2 ab = b - a;\n\
|
|
108
|
+
vec2 pa = p - a;\n\
|
|
109
|
+
float t = dot(pa, ab) / dot(ab, ab);\n\
|
|
110
|
+
t = clamp(t, 0.0, 1.0);\n\
|
|
111
|
+
\n\
|
|
112
|
+
vec2 pq = pa - t * ab;\n\
|
|
113
|
+
float d = length(pq);\n\
|
|
114
|
+
\n\
|
|
115
|
+
// Inside / outside computation to determine sign\n\
|
|
116
|
+
bvec3 cond = bvec3(p.y >= a.y, \n\
|
|
117
|
+
p.y < b.y, \n\
|
|
118
|
+
ab.x * pa.y > ab.y * pa.x);\n\
|
|
119
|
+
if (all(cond) || all(not(cond))) s = -s;\n\
|
|
120
|
+
if (abs(d) < abs(clipAmount)) {\n\
|
|
121
|
+
clipAmount = d;\n\
|
|
91
122
|
}\n\
|
|
123
|
+
}\n\
|
|
92
124
|
\n\
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}\n\
|
|
125
|
+
// Normalize the range to [0,1]\n\
|
|
126
|
+
vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\n\
|
|
127
|
+
// In the case where we've iterated through multiple polygons, take the minimum\n\
|
|
128
|
+
out_FragColor = min(out_FragColor, result);\n\
|
|
98
129
|
\n\
|
|
99
130
|
lastPolygonIndex += positionsLength;\n\
|
|
100
131
|
}\n\
|
|
@@ -142,7 +142,14 @@ highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);
|
|
|
142
142
|
|
|
143
143
|
void main() {
|
|
144
144
|
uint texIdx = uint(a_splatIndex);
|
|
145
|
-
|
|
145
|
+
// u_splatRowMask and u_splatRowShift encode the row width of the splat
|
|
146
|
+
// attribute texture. The texture width is always maximumTextureSize, which
|
|
147
|
+
// varies by GPU, so these are passed as uniforms rather than constants.
|
|
148
|
+
// rowMask = maximumTextureSize/2 - 1
|
|
149
|
+
// rowShift = log2(maximumTextureSize/2)
|
|
150
|
+
uint rowMask = uint(u_splatRowMask);
|
|
151
|
+
uint rowShift = uint(u_splatRowShift);
|
|
152
|
+
ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift));
|
|
146
153
|
vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );
|
|
147
154
|
|
|
148
155
|
vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);
|
|
@@ -155,7 +162,7 @@ void main() {
|
|
|
155
162
|
return;
|
|
156
163
|
}
|
|
157
164
|
|
|
158
|
-
ivec2 covCoord = ivec2(((texIdx &
|
|
165
|
+
ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift));
|
|
159
166
|
uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));
|
|
160
167
|
|
|
161
168
|
gl_Position = clipPosition;
|
|
@@ -143,7 +143,14 @@ highp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);\n\
|
|
|
143
143
|
\n\
|
|
144
144
|
void main() {\n\
|
|
145
145
|
uint texIdx = uint(a_splatIndex);\n\
|
|
146
|
-
|
|
146
|
+
// u_splatRowMask and u_splatRowShift encode the row width of the splat\n\
|
|
147
|
+
// attribute texture. The texture width is always maximumTextureSize, which\n\
|
|
148
|
+
// varies by GPU, so these are passed as uniforms rather than constants.\n\
|
|
149
|
+
// rowMask = maximumTextureSize/2 - 1\n\
|
|
150
|
+
// rowShift = log2(maximumTextureSize/2)\n\
|
|
151
|
+
uint rowMask = uint(u_splatRowMask);\n\
|
|
152
|
+
uint rowShift = uint(u_splatRowShift);\n\
|
|
153
|
+
ivec2 posCoord = ivec2(int((texIdx & rowMask) << 1), int(texIdx >> rowShift));\n\
|
|
147
154
|
vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );\n\
|
|
148
155
|
\n\
|
|
149
156
|
vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);\n\
|
|
@@ -156,7 +163,7 @@ void main() {\n\
|
|
|
156
163
|
return;\n\
|
|
157
164
|
}\n\
|
|
158
165
|
\n\
|
|
159
|
-
ivec2 covCoord = ivec2(((texIdx &
|
|
166
|
+
ivec2 covCoord = ivec2(int(((texIdx & rowMask) << 1) | 1u), int(texIdx >> rowShift));\n\
|
|
160
167
|
uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));\n\
|
|
161
168
|
\n\
|
|
162
169
|
gl_Position = clipPosition;\n\
|
|
@@ -214,7 +214,7 @@ void main()\n\
|
|
|
214
214
|
if (step.w == 0.0) {\n\
|
|
215
215
|
// Shape is infinitely thin. The ray may have hit the edge of a\n\
|
|
216
216
|
// foreground voxel. Step ahead slightly to check for more voxels\n\
|
|
217
|
-
step.w
|
|
217
|
+
step.w = 0.001;\n\
|
|
218
218
|
}\n\
|
|
219
219
|
\n\
|
|
220
220
|
// Keep raymarching\n\
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Draco API uses many capitalized non-constructor methods.
|
|
2
|
+
/* eslint-disable new-cap */
|
|
3
|
+
|
|
1
4
|
import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
|
|
2
5
|
import defined from "../Core/defined.js";
|
|
3
6
|
import WebMercatorProjection from "../Core/WebMercatorProjection.js";
|
|
@@ -808,8 +811,8 @@ function generateGltfBuffer(
|
|
|
808
811
|
componentType: 5126,
|
|
809
812
|
count: meshPositions.length / 3,
|
|
810
813
|
type: "VEC3",
|
|
811
|
-
|
|
812
|
-
|
|
814
|
+
min: [minX, minY, minZ],
|
|
815
|
+
max: [maxX, maxY, maxZ],
|
|
813
816
|
});
|
|
814
817
|
|
|
815
818
|
// NORMALS
|