@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.
Files changed (192) hide show
  1. package/Build/ThirdParty/Workers/z-worker-pako.js +7 -10
  2. package/Build/Workers/{chunk-F4HFJMGM.js → chunk-2CSEEWHN.js} +6 -6
  3. package/Build/Workers/{chunk-7TC63SJW.js → chunk-34DGOKCO.js} +10 -12
  4. package/Build/Workers/{chunk-7ZFGPDJA.js → chunk-3RZK5NNV.js} +4 -4
  5. package/Build/Workers/{chunk-M7ERACJJ.js → chunk-3S2MFY4B.js} +13 -13
  6. package/Build/Workers/{chunk-BROJAZRZ.js → chunk-4AJGCQFX.js} +13 -13
  7. package/Build/Workers/{chunk-2FWRMUTY.js → chunk-4KIUON73.js} +4 -4
  8. package/Build/Workers/{chunk-5QULIR53.js → chunk-4PHPQRSH.js} +4 -4
  9. package/Build/Workers/{chunk-X4356LRH.js → chunk-66E3H2KU.js} +12 -12
  10. package/Build/Workers/{chunk-G43QFN4Q.js → chunk-6HCAQOVK.js} +6 -6
  11. package/Build/Workers/{chunk-23UFSGND.js → chunk-7LPEGKOF.js} +7 -7
  12. package/Build/Workers/{chunk-DDUQAJ4P.js → chunk-7VZNXIKG.js} +7 -7
  13. package/Build/Workers/{chunk-JURN7NPV.js → chunk-A6NCZSL3.js} +19 -19
  14. package/Build/Workers/{chunk-ZT7KWISZ.js → chunk-AOFMPKUB.js} +4 -4
  15. package/Build/Workers/{chunk-BIKA3NRA.js → chunk-AOIKO5Y7.js} +5 -5
  16. package/Build/Workers/{chunk-YWTJ2B4B.js → chunk-BDUJXBVF.js} +1 -1
  17. package/Build/Workers/{chunk-OGXZVPPM.js → chunk-C5CE4OG6.js} +469 -6
  18. package/Build/Workers/{chunk-FNIRWHJB.js → chunk-CE6GTZ4I.js} +11 -13
  19. package/Build/Workers/{chunk-SH5USDPI.js → chunk-CYAJYEKW.js} +6 -6
  20. package/Build/Workers/{chunk-Y5UQJLYE.js → chunk-FOZQIHZK.js} +6 -6
  21. package/Build/Workers/{chunk-2FRVPMCS.js → chunk-G7CJQKKD.js} +7 -7
  22. package/Build/Workers/{chunk-EERJKOAF.js → chunk-GIFJ77E4.js} +4 -4
  23. package/Build/Workers/{chunk-FJKNFAKQ.js → chunk-I5TDPPC4.js} +7197 -5096
  24. package/Build/Workers/{chunk-3VAZEH7M.js → chunk-IBXGK4WV.js} +2 -2
  25. package/Build/Workers/{chunk-VOXYEYJT.js → chunk-JI2445T5.js} +11 -11
  26. package/Build/Workers/{chunk-PGSJK77E.js → chunk-KPY4F4BW.js} +6 -6
  27. package/Build/Workers/{chunk-I46ZRR5W.js → chunk-LVJCR7DH.js} +17 -17
  28. package/Build/Workers/{chunk-T3XIFPYR.js → chunk-LW7WGHEU.js} +16 -16
  29. package/Build/Workers/{chunk-HU6N6EXB.js → chunk-MWYZ64MH.js} +12 -11
  30. package/Build/Workers/chunk-NI2R52QD.js +961 -0
  31. package/Build/Workers/{chunk-SOWMRMWA.js → chunk-PEABJLCK.js} +1 -1
  32. package/Build/Workers/{chunk-EG6PTBY2.js → chunk-PK7TEP3J.js} +15 -15
  33. package/Build/Workers/{chunk-GRC2ZTAF.js → chunk-POLFRINT.js} +14 -14
  34. package/Build/Workers/{chunk-Z3TIFFGF.js → chunk-PS6AEMBR.js} +7 -7
  35. package/Build/Workers/{chunk-Y2ME2IJV.js → chunk-PWF3YJJ5.js} +13 -13
  36. package/Build/Workers/{chunk-2A75IWRS.js → chunk-QKF7XXEQ.js} +7 -7
  37. package/Build/Workers/{chunk-4H7PY4U5.js → chunk-RL73GOEF.js} +2 -2
  38. package/Build/Workers/{chunk-MDWEGWPA.js → chunk-RR7EOKGZ.js} +10 -10
  39. package/Build/Workers/{chunk-F3YA3Y2Z.js → chunk-S4XDCPKD.js} +1 -1
  40. package/Build/Workers/{chunk-PPH7OFP3.js → chunk-TMMOULW3.js} +5 -5
  41. package/Build/Workers/{chunk-XGI5BXZY.js → chunk-U4IMCOF5.js} +2 -2
  42. package/Build/Workers/{chunk-4DO5W5XZ.js → chunk-UAJEGIWA.js} +6 -6
  43. package/Build/Workers/{chunk-BBWDMCVU.js → chunk-UCPPWV64.js} +1 -1
  44. package/Build/Workers/{chunk-FZRIVR7Y.js → chunk-V7JB576Q.js} +5 -5
  45. package/Build/Workers/{chunk-2UPKWTMJ.js → chunk-WEGCQ5DY.js} +6 -6
  46. package/Build/Workers/{chunk-STW2DGFI.js → chunk-WFICTTOE.js} +2 -2
  47. package/Build/Workers/{chunk-LPR3YNP2.js → chunk-WWP3I7R5.js} +5 -5
  48. package/Build/Workers/{chunk-A5DWLWCY.js → chunk-XHLDDE65.js} +10 -10
  49. package/Build/Workers/{chunk-UEXTBDBE.js → chunk-XWML5Y7N.js} +11 -13
  50. package/Build/Workers/{chunk-EHWHNOEX.js → chunk-YLZTCEBJ.js} +1 -1
  51. package/Build/Workers/{chunk-34FXV7D7.js → chunk-ZC4AGBZK.js} +2 -2
  52. package/Build/Workers/{chunk-GATZHF3K.js → chunk-ZDP32RQI.js} +2 -2
  53. package/Build/Workers/{chunk-KKCR2YOP.js → chunk-ZWPIM77Q.js} +11 -11
  54. package/Build/Workers/combineGeometry.js +22 -24
  55. package/Build/Workers/createBoxGeometry.js +16 -18
  56. package/Build/Workers/createBoxOutlineGeometry.js +14 -16
  57. package/Build/Workers/createCircleGeometry.js +24 -26
  58. package/Build/Workers/createCircleOutlineGeometry.js +17 -19
  59. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -34
  60. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -31
  61. package/Build/Workers/createCorridorGeometry.js +27 -29
  62. package/Build/Workers/createCorridorOutlineGeometry.js +26 -28
  63. package/Build/Workers/createCylinderGeometry.js +18 -20
  64. package/Build/Workers/createCylinderOutlineGeometry.js +16 -18
  65. package/Build/Workers/createEllipseGeometry.js +24 -26
  66. package/Build/Workers/createEllipseOutlineGeometry.js +17 -19
  67. package/Build/Workers/createEllipsoidGeometry.js +17 -19
  68. package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -18
  69. package/Build/Workers/createFrustumGeometry.js +16 -18
  70. package/Build/Workers/createFrustumOutlineGeometry.js +18 -19
  71. package/Build/Workers/createGeometry.js +23 -25
  72. package/Build/Workers/createGroundPolylineGeometry.js +23 -25
  73. package/Build/Workers/createPlaneGeometry.js +14 -16
  74. package/Build/Workers/createPlaneOutlineGeometry.js +13 -15
  75. package/Build/Workers/createPolygonGeometry.js +33 -35
  76. package/Build/Workers/createPolygonOutlineGeometry.js +28 -30
  77. package/Build/Workers/createPolylineGeometry.js +23 -25
  78. package/Build/Workers/createPolylineVolumeGeometry.js +29 -31
  79. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -27
  80. package/Build/Workers/createRectangleGeometry.js +27 -29
  81. package/Build/Workers/createRectangleOutlineGeometry.js +18 -20
  82. package/Build/Workers/createSimplePolylineGeometry.js +21 -23
  83. package/Build/Workers/createSphereGeometry.js +17 -19
  84. package/Build/Workers/createSphereOutlineGeometry.js +16 -18
  85. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  86. package/Build/Workers/createVectorTileClampedPolylines.js +14 -16
  87. package/Build/Workers/createVectorTileGeometries.js +22 -24
  88. package/Build/Workers/createVectorTilePoints.js +12 -12
  89. package/Build/Workers/createVectorTilePolygons.js +20 -22
  90. package/Build/Workers/createVectorTilePolylines.js +14 -16
  91. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -25
  92. package/Build/Workers/createVerticesFromHeightmap.js +23 -25
  93. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -22
  94. package/Build/Workers/createWallGeometry.js +22 -24
  95. package/Build/Workers/createWallOutlineGeometry.js +21 -23
  96. package/Build/Workers/decodeDraco.js +11 -11
  97. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  98. package/Build/Workers/decodeI3S.js +10 -11
  99. package/Build/Workers/transcodeKTX2.js +8 -8
  100. package/Build/Workers/transferTypedArrayTest.js +1 -1
  101. package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -22
  102. package/Source/Core/Check.d.ts +127 -0
  103. package/Source/Core/Check.js +0 -1
  104. package/Source/Core/Geometry.js +1 -1
  105. package/Source/Core/Ion.js +1 -1
  106. package/Source/Core/PixelFormat.js +1 -0
  107. package/Source/Core/PolygonGeometry.js +1 -1
  108. package/Source/Core/Rectangle.js +89 -0
  109. package/Source/Core/VerticalExaggeration.js +2 -1
  110. package/Source/DataSources/DataSourceDisplay.js +5 -0
  111. package/Source/Renderer/ShaderBuilder.js +6 -3
  112. package/Source/Scene/ArcGisMapService.js +1 -1
  113. package/Source/Scene/Billboard.js +37 -3
  114. package/Source/Scene/BillboardCollection.js +1 -1
  115. package/Source/Scene/BingMapsImageryProvider.js +4 -0
  116. package/Source/Scene/Cesium3DTile.js +65 -0
  117. package/Source/Scene/Cesium3DTilesVoxelProvider.js +2 -9
  118. package/Source/Scene/Cesium3DTileset.js +52 -40
  119. package/Source/Scene/ClippingPolygon.js +212 -0
  120. package/Source/Scene/ClippingPolygonCollection.js +968 -0
  121. package/Source/Scene/Globe.js +14 -67
  122. package/Source/Scene/GlobeSurfaceShaderSet.js +81 -15
  123. package/Source/Scene/GlobeSurfaceTileProvider.js +81 -1
  124. package/Source/Scene/Label.js +33 -0
  125. package/Source/Scene/LabelCollection.js +2 -1
  126. package/Source/Scene/Model/Model.js +83 -0
  127. package/Source/Scene/Model/Model3DTileContent.js +21 -0
  128. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +92 -0
  129. package/Source/Scene/Model/ModelSceneGraph.js +5 -0
  130. package/Source/Scene/Primitive.js +0 -3
  131. package/Source/Scene/SensorVolumePortionToDisplay.js +1 -1
  132. package/Source/Scene/Terrain.js +2 -2
  133. package/Source/Scene/VoxelBoxShape.js +0 -15
  134. package/Source/Scene/VoxelCylinderShape.js +14 -131
  135. package/Source/Scene/VoxelEllipsoidShape.js +136 -227
  136. package/Source/Scene/VoxelPrimitive.js +106 -14
  137. package/Source/Scene/VoxelRenderResources.js +9 -3
  138. package/Source/Scene/VoxelShape.js +0 -10
  139. package/Source/Scene/processVoxelProperties.js +1 -0
  140. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  141. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +37 -0
  142. package/Source/Shaders/Builtin/Functions/clipPolygons.js +39 -0
  143. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +14 -0
  144. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +15 -0
  145. package/Source/Shaders/GlobeFS.glsl +12 -0
  146. package/Source/Shaders/GlobeFS.js +12 -0
  147. package/Source/Shaders/GlobeVS.glsl +32 -0
  148. package/Source/Shaders/GlobeVS.js +32 -0
  149. package/Source/Shaders/Model/GeometryStageVS.glsl +1 -1
  150. package/Source/Shaders/Model/GeometryStageVS.js +1 -1
  151. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +6 -0
  152. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +8 -0
  153. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +27 -0
  154. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +29 -0
  155. package/Source/Shaders/Model/ModelFS.glsl +6 -0
  156. package/Source/Shaders/Model/ModelFS.js +7 -1
  157. package/Source/Shaders/Model/ModelVS.glsl +4 -0
  158. package/Source/Shaders/Model/ModelVS.js +4 -0
  159. package/Source/Shaders/PolygonSignedDistanceFS.glsl +100 -0
  160. package/Source/Shaders/PolygonSignedDistanceFS.js +101 -0
  161. package/Source/Shaders/Voxels/IntersectBox.glsl +21 -47
  162. package/Source/Shaders/Voxels/IntersectBox.js +21 -47
  163. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +1 -1
  164. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +1 -1
  165. package/Source/Shaders/Voxels/IntersectCylinder.glsl +66 -96
  166. package/Source/Shaders/Voxels/IntersectCylinder.js +66 -96
  167. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +226 -154
  168. package/Source/Shaders/Voxels/IntersectEllipsoid.js +226 -154
  169. package/Source/Shaders/Voxels/IntersectionUtils.glsl +33 -11
  170. package/Source/Shaders/Voxels/IntersectionUtils.js +33 -11
  171. package/Source/Shaders/Voxels/Megatexture.glsl +1 -2
  172. package/Source/Shaders/Voxels/Megatexture.js +1 -2
  173. package/Source/Shaders/Voxels/Octree.glsl +14 -9
  174. package/Source/Shaders/Voxels/Octree.js +14 -9
  175. package/Source/Shaders/Voxels/VoxelFS.glsl +93 -43
  176. package/Source/Shaders/Voxels/VoxelFS.js +93 -43
  177. package/Source/Shaders/Voxels/VoxelUtils.glsl +31 -0
  178. package/Source/Shaders/Voxels/VoxelUtils.js +33 -0
  179. package/Source/Shaders/Voxels/convertUvToBox.glsl +24 -3
  180. package/Source/Shaders/Voxels/convertUvToBox.js +24 -4
  181. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +50 -8
  182. package/Source/Shaders/Voxels/convertUvToCylinder.js +50 -8
  183. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +82 -53
  184. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +82 -53
  185. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  186. package/Source/Workers/createGeometry.js +1 -1
  187. package/index.d.ts +478 -35
  188. package/index.js +61 -52
  189. package/package.json +2 -2
  190. package/Build/Workers/chunk-BG4UCVXN.js +0 -73
  191. package/Build/Workers/chunk-TTUZP4BO.js +0 -501
  192. 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 "czm_modelMaterial defaultModelMaterial()\n\
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()
111
111
  atmosphereStage(attributes);
112
112
  #endif
113
113
 
114
+ #ifdef ENABLE_CLIPPING_POLYGONS
115
+ modelClippingPolygonsStage(attributes);
116
+ #endif
117
+
114
118
  #ifdef HAS_SILHOUETTE
115
119
  silhouetteStage(attributes, positionClip);
116
120
  #endif
@@ -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 and NO_HIT
2
- // See convertUvToBox.glsl for the definition of convertShapeUvToUvSpace
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
- struct Box {
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 = (box.p0 - ray.pos) * ray.dInv;
48
- vec3 t1 = (box.p1 - ray.pos) * ray.dInv;
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
- // The actual box intersection points are the furthest entry and the closest exit
55
- float entryT = max(max(entries.x, entries.y), entries.z);
56
- float exitT = min(min(exits.x, exits.y), exits.z);
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
- vec3 entryNormal = getBoxNormal(box, ray, entryT - RAY_SHIFT);
59
- vec3 exitNormal = getBoxNormal(box, ray, exitT + RAY_SHIFT);
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 (entryT > exitT) {
62
- entryT = NO_HIT;
63
- exitT = NO_HIT;
35
+ if (entry.w > exit.w) {
36
+ entry.w = NO_HIT;
37
+ exit.w = NO_HIT;
64
38
  }
65
39
 
66
- return RayShapeIntersection(vec4(entryNormal, entryT), vec4(exitNormal, exitT));
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, Box(u_renderMinBounds, u_renderMaxBounds));
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 and NO_HIT\n\
3
- // See convertUvToBox.glsl for the definition of convertShapeUvToUvSpace\n\
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
- struct Box {\n\
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 = (box.p0 - ray.pos) * ray.dInv;\n\
49
- vec3 t1 = (box.p1 - ray.pos) * ray.dInv;\n\
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
- // The actual box intersection points are the furthest entry and the closest exit\n\
56
- float entryT = max(max(entries.x, entries.y), entries.z);\n\
57
- float exitT = min(min(exits.x, exits.y), exits.z);\n\
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
- vec3 entryNormal = getBoxNormal(box, ray, entryT - RAY_SHIFT);\n\
60
- vec3 exitNormal = getBoxNormal(box, ray, exitT + RAY_SHIFT);\n\
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 (entryT > exitT) {\n\
63
- entryT = NO_HIT;\n\
64
- exitT = NO_HIT;\n\
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(vec4(entryNormal, entryT), vec4(exitNormal, exitT));\n\
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, Box(u_renderMinBounds, u_renderMaxBounds));\n\
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,5 +1,5 @@
1
1
  // See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT,
2
- // NO_HIT, setIntersectionPair
2
+ // NO_HIT, setShapeIntersection
3
3
 
4
4
  /* Clipping plane defines (set in Scene/VoxelRenderResources.js)
5
5
  #define CLIPPING_PLANES_UNION
@@ -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, setIntersectionPair\n\
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\