@cesium/engine 0.1.0 → 1.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 (217) hide show
  1. package/Build/Workers/{AttributeCompression-4589338a.js → AttributeCompression-b646d393.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-bfb1234f.js → AxisAlignedBoundingBox-a4321399.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-7ffc2153.js → BoundingRectangle-80d8801f.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-93f344a3.js → BoxGeometry-33c10a4f.js} +1 -1
  5. package/Build/Workers/{Color-0c5aaf47.js → Color-1bf9a6e0.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-6597982a.js → CoplanarPolygonGeometryLibrary-5c5b981b.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-2119580e.js → CorridorGeometryLibrary-7cbae7a0.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-f9503c6d.js → CylinderGeometry-42740df0.js} +1 -1
  9. package/Build/Workers/{EllipseGeometry-fedf72d5.js → EllipseGeometry-49a3ac21.js} +1 -1
  10. package/Build/Workers/{EllipseGeometryLibrary-4ea68687.js → EllipseGeometryLibrary-b891b2f8.js} +1 -1
  11. package/Build/Workers/{EllipseOutlineGeometry-e2ae6a35.js → EllipseOutlineGeometry-fbd72e07.js} +1 -1
  12. package/Build/Workers/{EllipsoidGeodesic-16de63ea.js → EllipsoidGeodesic-98c62a56.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeometry-95c0330e.js → EllipsoidGeometry-a351dba8.js} +1 -1
  14. package/Build/Workers/{EllipsoidOutlineGeometry-d6d2ceec.js → EllipsoidOutlineGeometry-3e8779bf.js} +1 -1
  15. package/Build/Workers/{EllipsoidRhumbLine-ae5e65e0.js → EllipsoidRhumbLine-19756602.js} +1 -1
  16. package/Build/Workers/{EllipsoidTangentPlane-bfc674bf.js → EllipsoidTangentPlane-cfb50678.js} +1 -1
  17. package/Build/Workers/{EncodedCartesian3-f473ea18.js → EncodedCartesian3-81f70735.js} +1 -1
  18. package/Build/Workers/{FrustumGeometry-3bf2e4eb.js → FrustumGeometry-c5754412.js} +1 -1
  19. package/Build/Workers/{GeometryAttribute-df5f473e.js → GeometryAttribute-0bfd05e8.js} +1 -1
  20. package/Build/Workers/{GeometryInstance-aa75b4cf.js → GeometryInstance-451dc1cd.js} +1 -1
  21. package/Build/Workers/{GeometryPipeline-f0e46c42.js → GeometryPipeline-0166905d.js} +1 -1
  22. package/Build/Workers/{IntersectionTests-9de29d51.js → IntersectionTests-a93d3de9.js} +1 -1
  23. package/Build/Workers/{Matrix2-ce637455.js → Matrix2-13178034.js} +4 -2
  24. package/Build/Workers/{Matrix3-4f4df527.js → Matrix3-315394f6.js} +2 -1
  25. package/Build/Workers/{OrientedBoundingBox-d3ff3d4d.js → OrientedBoundingBox-b450cb61.js} +5 -5
  26. package/Build/Workers/{Plane-b81241c2.js → Plane-900aa728.js} +1 -1
  27. package/Build/Workers/{PolygonGeometryLibrary-6f4937bb.js → PolygonGeometryLibrary-f918ac26.js} +1 -1
  28. package/Build/Workers/PolygonPipeline-f59a8f0a.js +1345 -0
  29. package/Build/Workers/{PolylinePipeline-2e2b015c.js → PolylinePipeline-d8e6bd9b.js} +1 -1
  30. package/Build/Workers/{PolylineVolumeGeometryLibrary-7ee1d449.js → PolylineVolumeGeometryLibrary-125d2edf.js} +1 -1
  31. package/Build/Workers/{PrimitivePipeline-a9b7aae0.js → PrimitivePipeline-0d7b5ed4.js} +1 -1
  32. package/Build/Workers/{RectangleGeometryLibrary-9aa6c8f6.js → RectangleGeometryLibrary-0768db63.js} +1 -1
  33. package/Build/Workers/{TerrainEncoding-b52dcfc5.js → TerrainEncoding-06470d7f.js} +1 -1
  34. package/Build/Workers/{Transforms-2f755df8.js → Transforms-26539bce.js} +97 -83
  35. package/Build/Workers/{WallGeometryLibrary-ab19a93d.js → WallGeometryLibrary-6167b0fc.js} +1 -1
  36. package/Build/Workers/{WebMercatorProjection-9f25de49.js → WebMercatorProjection-13a90d41.js} +1 -1
  37. package/Build/Workers/cesiumWorkerBootstrapper.js +25 -1
  38. package/Build/Workers/combineGeometry.js +1 -1
  39. package/Build/Workers/createBoxGeometry.js +1 -1
  40. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  41. package/Build/Workers/createCircleGeometry.js +1 -1
  42. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  43. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  44. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCorridorGeometry.js +1 -1
  46. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCylinderGeometry.js +1 -1
  48. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  49. package/Build/Workers/createEllipseGeometry.js +1 -1
  50. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  51. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  52. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  53. package/Build/Workers/createFrustumGeometry.js +1 -1
  54. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  55. package/Build/Workers/createGeometry.js +1 -1
  56. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  57. package/Build/Workers/createPlaneGeometry.js +1 -1
  58. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  59. package/Build/Workers/createPolygonGeometry.js +1 -1
  60. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  61. package/Build/Workers/createPolylineGeometry.js +1 -1
  62. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  63. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  64. package/Build/Workers/createRectangleGeometry.js +1 -1
  65. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  66. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  67. package/Build/Workers/createSphereGeometry.js +1 -1
  68. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  69. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  70. package/Build/Workers/createVectorTileGeometries.js +1 -1
  71. package/Build/Workers/createVectorTilePoints.js +1 -1
  72. package/Build/Workers/createVectorTilePolygons.js +1 -1
  73. package/Build/Workers/createVectorTilePolylines.js +1 -1
  74. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  75. package/Build/Workers/createVerticesFromHeightmap.js +7 -3
  76. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
  77. package/Build/Workers/createWallGeometry.js +1 -1
  78. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  79. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +95 -76
  80. package/Build/Workers/decodeI3S.js +1 -1
  81. package/Build/Workers/package.js +25 -1
  82. package/Build/Workers/transferTypedArrayTest.js +25 -1
  83. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  84. package/README.md +9 -9
  85. package/Source/Core/EarthOrientationParameters.js +67 -63
  86. package/Source/Core/Ion.js +1 -1
  87. package/Source/Core/Matrix2.js +2 -1
  88. package/Source/Core/Matrix3.js +2 -1
  89. package/Source/Core/Matrix4.js +1 -0
  90. package/Source/Core/OrientedBoundingBox.js +4 -4
  91. package/Source/Core/S2Cell.js +3 -3
  92. package/Source/Core/Transforms.js +3 -7
  93. package/Source/DataSources/GpxDataSource.js +4 -6
  94. package/Source/DataSources/KmlDataSource.js +3 -5
  95. package/Source/Renderer/Context.js +230 -177
  96. package/Source/Renderer/Pass.js +3 -2
  97. package/Source/Scene/Cesium3DTileContentType.js +19 -0
  98. package/Source/Scene/Cesium3DTilesVoxelProvider.js +482 -0
  99. package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
  100. package/Source/Scene/ContentMetadata.js +2 -2
  101. package/Source/Scene/DerivedCommand.js +7 -0
  102. package/Source/Scene/Expression.js +1 -1
  103. package/Source/Scene/Globe.js +10 -0
  104. package/Source/Scene/GlobeSurfaceTileProvider.js +7 -0
  105. package/Source/Scene/GltfImageLoader.js +1 -1
  106. package/Source/Scene/GltfVertexBufferLoader.js +10 -2
  107. package/Source/Scene/GroupMetadata.js +2 -2
  108. package/Source/Scene/I3SDataProvider.js +2 -1
  109. package/Source/Scene/I3SFeature.js +1 -1
  110. package/Source/Scene/I3SLayer.js +64 -2
  111. package/Source/Scene/I3SNode.js +50 -6
  112. package/Source/Scene/ImplicitMetadataView.js +2 -2
  113. package/Source/Scene/ImplicitSubtreeCache.js +127 -0
  114. package/Source/Scene/ImplicitSubtreeMetadata.js +2 -2
  115. package/Source/Scene/ImplicitTileset.js +3 -2
  116. package/Source/Scene/KeyframeNode.js +47 -0
  117. package/Source/Scene/Megatexture.js +490 -0
  118. package/Source/Scene/MetadataClass.js +60 -25
  119. package/Source/Scene/MetadataClassProperty.js +132 -68
  120. package/Source/Scene/MetadataComponentType.js +78 -57
  121. package/Source/Scene/MetadataEnum.js +59 -23
  122. package/Source/Scene/MetadataEnumValue.js +49 -15
  123. package/Source/Scene/MetadataSchema.js +53 -24
  124. package/Source/Scene/MetadataSchemaLoader.js +2 -2
  125. package/Source/Scene/MetadataTableProperty.js +2 -2
  126. package/Source/Scene/MetadataType.js +6 -14
  127. package/Source/Scene/Model/GeoJsonLoader.js +1 -1
  128. package/Source/Scene/Model/Model.js +38 -6
  129. package/Source/Scene/Model/buildDrawCommand.js +19 -11
  130. package/Source/Scene/PointCloud.js +1 -1
  131. package/Source/Scene/PropertyAttribute.js +2 -2
  132. package/Source/Scene/PropertyAttributeProperty.js +2 -2
  133. package/Source/Scene/PropertyTable.js +2 -2
  134. package/Source/Scene/PropertyTexture.js +2 -2
  135. package/Source/Scene/PropertyTextureProperty.js +2 -2
  136. package/Source/Scene/ResourceCache.js +9 -1
  137. package/Source/Scene/ResourceCacheKey.js +9 -1
  138. package/Source/Scene/Scene.js +20 -50
  139. package/Source/Scene/SpatialNode.js +375 -0
  140. package/Source/Scene/StructuralMetadata.js +2 -2
  141. package/Source/Scene/TileMetadata.js +2 -2
  142. package/Source/Scene/TilesetMetadata.js +2 -2
  143. package/Source/Scene/VoxelBoxShape.js +527 -0
  144. package/Source/Scene/VoxelContent.js +169 -0
  145. package/Source/Scene/VoxelCylinderShape.js +937 -0
  146. package/Source/Scene/VoxelEllipsoidShape.js +937 -0
  147. package/Source/Scene/VoxelPrimitive.js +1919 -0
  148. package/Source/Scene/VoxelProvider.js +255 -0
  149. package/Source/Scene/VoxelRenderResources.js +224 -0
  150. package/Source/Scene/VoxelShape.js +152 -0
  151. package/Source/Scene/VoxelShapeType.js +105 -0
  152. package/Source/Scene/VoxelTraversal.js +1144 -0
  153. package/Source/Scene/buildVoxelDrawCommands.js +116 -0
  154. package/Source/Scene/parseBatchTable.js +18 -2
  155. package/Source/Scene/preprocess3DTileContent.js +8 -0
  156. package/Source/Scene/processVoxelProperties.js +455 -0
  157. package/Source/Shaders/BillboardCollectionVS.glsl +1 -1
  158. package/Source/Shaders/BillboardCollectionVS.js +1 -1
  159. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  160. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  161. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +9 -0
  162. package/Source/Shaders/Builtin/Constants/passVoxels.js +11 -0
  163. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -0
  164. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +55 -43
  165. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +55 -43
  166. package/Source/Shaders/GlobeFS.glsl +2 -1
  167. package/Source/Shaders/GlobeFS.js +2 -1
  168. package/Source/Shaders/PointPrimitiveCollectionVS.glsl +5 -2
  169. package/Source/Shaders/PointPrimitiveCollectionVS.js +5 -2
  170. package/Source/Shaders/Voxels/IntersectBox.glsl +79 -0
  171. package/Source/Shaders/Voxels/IntersectBox.js +81 -0
  172. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +70 -0
  173. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +72 -0
  174. package/Source/Shaders/Voxels/IntersectCylinder.glsl +273 -0
  175. package/Source/Shaders/Voxels/IntersectCylinder.js +275 -0
  176. package/Source/Shaders/Voxels/IntersectDepth.glsl +23 -0
  177. package/Source/Shaders/Voxels/IntersectDepth.js +25 -0
  178. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +337 -0
  179. package/Source/Shaders/Voxels/IntersectEllipsoid.js +339 -0
  180. package/Source/Shaders/Voxels/Intersection.glsl +54 -0
  181. package/Source/Shaders/Voxels/Intersection.js +56 -0
  182. package/Source/Shaders/Voxels/IntersectionUtils.glsl +151 -0
  183. package/Source/Shaders/Voxels/IntersectionUtils.js +153 -0
  184. package/Source/Shaders/Voxels/Megatexture.glsl +136 -0
  185. package/Source/Shaders/Voxels/Megatexture.js +138 -0
  186. package/Source/Shaders/Voxels/Octree.glsl +221 -0
  187. package/Source/Shaders/Voxels/Octree.js +223 -0
  188. package/Source/Shaders/Voxels/VoxelFS.glsl +150 -0
  189. package/Source/Shaders/Voxels/VoxelFS.js +152 -0
  190. package/Source/Shaders/Voxels/VoxelVS.glsl +11 -0
  191. package/Source/Shaders/Voxels/VoxelVS.js +13 -0
  192. package/Source/Shaders/Voxels/convertUvToBox.glsl +16 -0
  193. package/Source/Shaders/Voxels/convertUvToBox.js +18 -0
  194. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +79 -0
  195. package/Source/Shaders/Voxels/convertUvToCylinder.js +81 -0
  196. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +133 -0
  197. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +135 -0
  198. package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +100 -101
  199. package/Source/ThirdParty/Workers/pako_deflate.min.js +2 -2
  200. package/Source/ThirdParty/Workers/pako_inflate.min.js +2 -2
  201. package/Source/ThirdParty/draco_decoder.wasm +0 -0
  202. package/Source/Widget/CesiumWidget.js +1 -1
  203. package/index.d.ts +961 -56
  204. package/index.js +92 -60
  205. package/package.json +6 -4
  206. package/Build/ThirdParty/Workers/basis_transcoder.js +0 -2233
  207. package/Build/ThirdParty/Workers/draco_decoder_nodejs.js +0 -1872
  208. package/Build/ThirdParty/Workers/package.json +0 -1
  209. package/Build/ThirdParty/Workers/pako_deflate.min.js +0 -589
  210. package/Build/ThirdParty/Workers/pako_inflate.min.js +0 -798
  211. package/Build/ThirdParty/Workers/z-worker-pako.js +0 -503
  212. package/Build/ThirdParty/basis_transcoder.wasm +0 -0
  213. package/Build/ThirdParty/draco_decoder.wasm +0 -0
  214. package/Build/ThirdParty/google-earth-dbroot-parser.js +0 -8019
  215. package/Build/Widget/CesiumWidget.css +0 -120
  216. package/Build/Widget/lighter.css +0 -13
  217. package/Build/Workers/PolygonPipeline-774a8aaf.js +0 -1341
@@ -0,0 +1,273 @@
1
+ // See IntersectionUtils.glsl for the definitions of Ray, setIntersection,
2
+ // setIntersectionPair
3
+
4
+ /* Cylinder defines (set in Scene/VoxelCylinderShape.js)
5
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN
6
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX
7
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT
8
+ #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT
9
+ #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT
10
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE
11
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF
12
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF
13
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF
14
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
15
+
16
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
17
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
18
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
19
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
20
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
21
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
22
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
23
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
24
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
25
+
26
+ #define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX
27
+ #define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN
28
+ #define CYLINDER_INTERSECTION_INDEX_ANGLE
29
+ */
30
+
31
+ // Cylinder uniforms
32
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)
33
+ uniform vec3 u_cylinderUvToRenderBoundsScale;
34
+ uniform vec3 u_cylinderUvToRenderBoundsTranslate;
35
+ #endif
36
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN) && !defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)
37
+ uniform float u_cylinderUvToRenderRadiusMin;
38
+ #endif
39
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE)
40
+ uniform vec2 u_cylinderRenderAngleMinMax;
41
+ #endif
42
+
43
+ vec4 intersectHalfPlane(Ray ray, float angle) {
44
+ vec2 o = ray.pos.xy;
45
+ vec2 d = ray.dir.xy;
46
+ vec2 planeDirection = vec2(cos(angle), sin(angle));
47
+ vec2 planeNormal = vec2(planeDirection.y, -planeDirection.x);
48
+
49
+ float a = dot(o, planeNormal);
50
+ float b = dot(d, planeNormal);
51
+ float t = -a / b;
52
+
53
+ vec2 p = o + t * d;
54
+ bool outside = dot(p, planeDirection) < 0.0;
55
+ if (outside) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
56
+
57
+ return vec4(-INF_HIT, t, t, +INF_HIT);
58
+ }
59
+
60
+ #define POSITIVE_HIT vec2(t, +INF_HIT);
61
+ #define NEGATIVE_HIT vec2(-INF_HIT, t);
62
+
63
+ vec2 intersectHalfSpace(Ray ray, float angle)
64
+ {
65
+ vec2 o = ray.pos.xy;
66
+ vec2 d = ray.dir.xy;
67
+ vec2 n = vec2(sin(angle), -cos(angle));
68
+
69
+ float a = dot(o, n);
70
+ float b = dot(d, n);
71
+ float t = -a / b;
72
+ float s = sign(a);
73
+
74
+ // Half space cuts right through the camera, pick the side to intersect
75
+ if (a == 0.0) {
76
+ if (b >= 0.0) {
77
+ return POSITIVE_HIT;
78
+ } else {
79
+ return NEGATIVE_HIT;
80
+ }
81
+ }
82
+
83
+ if (t >= 0.0 != s >= 0.0) {
84
+ return POSITIVE_HIT;
85
+ } else {
86
+ return NEGATIVE_HIT;
87
+ }
88
+ }
89
+
90
+ vec2 intersectRegularWedge(Ray ray, float minAngle, float maxAngle)
91
+ {
92
+ vec2 o = ray.pos.xy;
93
+ vec2 d = ray.dir.xy;
94
+ vec2 n1 = vec2(sin(minAngle), -cos(minAngle));
95
+ vec2 n2 = vec2(-sin(maxAngle), cos(maxAngle));
96
+
97
+ float a1 = dot(o, n1);
98
+ float a2 = dot(o, n2);
99
+ float b1 = dot(d, n1);
100
+ float b2 = dot(d, n2);
101
+
102
+ float t1 = -a1 / b1;
103
+ float t2 = -a2 / b2;
104
+ float s1 = sign(a1);
105
+ float s2 = sign(a2);
106
+
107
+ float tmin = min(t1, t2);
108
+ float tmax = max(t1, t2);
109
+ float smin = tmin == t1 ? s1 : s2;
110
+ float smax = tmin == t1 ? s2 : s1;
111
+
112
+ bool e = tmin >= 0.0;
113
+ bool f = tmax >= 0.0;
114
+ bool g = smin >= 0.0;
115
+ bool h = smax >= 0.0;
116
+
117
+ if (e != g && f == h) return vec2(tmin, tmax);
118
+ else if (e == g && f == h) return vec2(-INF_HIT, tmin);
119
+ else if (e != g && f != h) return vec2(tmax, +INF_HIT);
120
+ else return vec2(NO_HIT);
121
+ }
122
+
123
+ vec4 intersectFlippedWedge(Ray ray, float minAngle, float maxAngle)
124
+ {
125
+ vec2 planeIntersectMin = intersectHalfSpace(ray, minAngle);
126
+ vec2 planeIntersectMax = intersectHalfSpace(ray, maxAngle + czm_pi);
127
+ return vec4(planeIntersectMin, planeIntersectMax);
128
+ }
129
+
130
+ vec2 intersectUnitCylinder(Ray ray)
131
+ {
132
+ vec3 o = ray.pos;
133
+ vec3 d = ray.dir;
134
+
135
+ float a = dot(d.xy, d.xy);
136
+ float b = dot(o.xy, d.xy);
137
+ float c = dot(o.xy, o.xy) - 1.0;
138
+ float det = b * b - a * c;
139
+
140
+ if (det < 0.0) {
141
+ return vec2(NO_HIT);
142
+ }
143
+
144
+ det = sqrt(det);
145
+ float ta = (-b - det) / a;
146
+ float tb = (-b + det) / a;
147
+ float t1 = min(ta, tb);
148
+ float t2 = max(ta, tb);
149
+
150
+ float z1 = o.z + t1 * d.z;
151
+ float z2 = o.z + t2 * d.z;
152
+
153
+ if (abs(z1) >= 1.0)
154
+ {
155
+ float tCap = (sign(z1) - o.z) / d.z;
156
+ t1 = abs(b + a * tCap) < det ? tCap : NO_HIT;
157
+ }
158
+
159
+ if (abs(z2) >= 1.0)
160
+ {
161
+ float tCap = (sign(z2) - o.z) / d.z;
162
+ t2 = abs(b + a * tCap) < det ? tCap : NO_HIT;
163
+ }
164
+
165
+ return vec2(t1, t2);
166
+ }
167
+
168
+ vec2 intersectUnitCircle(Ray ray) {
169
+ vec3 o = ray.pos;
170
+ vec3 d = ray.dir;
171
+
172
+ float t = -o.z / d.z;
173
+ vec2 zPlanePos = o.xy + d.xy * t;
174
+ float distSqr = dot(zPlanePos, zPlanePos);
175
+
176
+ if (distSqr > 1.0) {
177
+ return vec2(NO_HIT);
178
+ }
179
+
180
+ return vec2(t, t);
181
+ }
182
+
183
+ vec2 intersectInfiniteUnitCylinder(Ray ray)
184
+ {
185
+ vec3 o = ray.pos;
186
+ vec3 d = ray.dir;
187
+
188
+ float a = dot(d.xy, d.xy);
189
+ float b = dot(o.xy, d.xy);
190
+ float c = dot(o.xy, o.xy) - 1.0;
191
+ float det = b * b - a * c;
192
+
193
+ if (det < 0.0) {
194
+ return vec2(NO_HIT);
195
+ }
196
+
197
+ det = sqrt(det);
198
+ float t1 = (-b - det) / a;
199
+ float t2 = (-b + det) / a;
200
+ float tmin = min(t1, t2);
201
+ float tmax = max(t1, t2);
202
+
203
+ return vec2(tmin, tmax);
204
+ }
205
+
206
+ void intersectShape(Ray ray, inout Intersections ix)
207
+ {
208
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)
209
+ ray.pos = ray.pos * u_cylinderUvToRenderBoundsScale + u_cylinderUvToRenderBoundsTranslate;
210
+ ray.dir *= u_cylinderUvToRenderBoundsScale;
211
+ #else
212
+ // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1].
213
+ // Direction is scaled as well to be in sync with position.
214
+ ray.pos = ray.pos * 2.0 - 1.0;
215
+ ray.dir *= 2.0;
216
+ #endif
217
+
218
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT)
219
+ vec2 outerIntersect = intersectUnitCircle(ray);
220
+ #else
221
+ vec2 outerIntersect = intersectUnitCylinder(ray);
222
+ #endif
223
+
224
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect);
225
+
226
+ if (outerIntersect.x == NO_HIT) {
227
+ return;
228
+ }
229
+
230
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)
231
+ // When the cylinder is perfectly thin it's necessary to sandwich the
232
+ // inner cylinder intersection inside the outer cylinder intersection.
233
+
234
+ // Without this special case,
235
+ // [outerMin, outerMax, innerMin, innerMax] will bubble sort to
236
+ // [outerMin, innerMin, outerMax, innerMax] which will cause the back
237
+ // side of the cylinder to be invisible because it will think the ray
238
+ // is still inside the inner (negative) cylinder after exiting the
239
+ // outer (positive) cylinder.
240
+
241
+ // With this special case,
242
+ // [outerMin, innerMin, innerMax, outerMax] will bubble sort to
243
+ // [outerMin, innerMin, innerMax, outerMax] which will work correctly.
244
+
245
+ // Note: If initializeIntersections() changes its sorting function
246
+ // from bubble sort to something else, this code may need to change.
247
+ vec2 innerIntersect = intersectInfiniteUnitCylinder(ray);
248
+ setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter
249
+ setIntersection(ix, 1, innerIntersect.x, false, true); // negative, enter
250
+ setIntersection(ix, 2, innerIntersect.y, false, false); // negative, exit
251
+ setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit
252
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN)
253
+ Ray innerRay = Ray(ray.pos * u_cylinderUvToRenderRadiusMin, ray.dir * u_cylinderUvToRenderRadiusMin);
254
+ vec2 innerIntersect = intersectInfiniteUnitCylinder(innerRay);
255
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect);
256
+ #endif
257
+
258
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)
259
+ vec2 wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);
260
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
261
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)
262
+ vec4 wedgeIntersect = intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);
263
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);
264
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);
265
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF)
266
+ vec2 wedgeIntersect = intersectHalfSpace(ray, u_cylinderRenderAngleMinMax.x);
267
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
268
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
269
+ vec4 wedgeIntersect = intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x);
270
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);
271
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);
272
+ #endif
273
+ }
@@ -0,0 +1,275 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "// See IntersectionUtils.glsl for the definitions of Ray, setIntersection,\n\
3
+ // setIntersectionPair\n\
4
+ \n\
5
+ /* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
6
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN\n\
7
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX\n\
8
+ #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT\n\
9
+ #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT\n\
10
+ #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT\n\
11
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE\n\
12
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF\n\
13
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF\n\
14
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF\n\
15
+ #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
16
+ \n\
17
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS\n\
18
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT\n\
19
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT\n\
20
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT\n\
21
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE\n\
22
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
23
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY\n\
24
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY\n\
25
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED\n\
26
+ \n\
27
+ #define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX\n\
28
+ #define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN\n\
29
+ #define CYLINDER_INTERSECTION_INDEX_ANGLE\n\
30
+ */\n\
31
+ \n\
32
+ // Cylinder uniforms\n\
33
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)\n\
34
+ uniform vec3 u_cylinderUvToRenderBoundsScale;\n\
35
+ uniform vec3 u_cylinderUvToRenderBoundsTranslate;\n\
36
+ #endif\n\
37
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN) && !defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)\n\
38
+ uniform float u_cylinderUvToRenderRadiusMin;\n\
39
+ #endif\n\
40
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE)\n\
41
+ uniform vec2 u_cylinderRenderAngleMinMax;\n\
42
+ #endif\n\
43
+ \n\
44
+ vec4 intersectHalfPlane(Ray ray, float angle) {\n\
45
+ vec2 o = ray.pos.xy;\n\
46
+ vec2 d = ray.dir.xy;\n\
47
+ vec2 planeDirection = vec2(cos(angle), sin(angle));\n\
48
+ vec2 planeNormal = vec2(planeDirection.y, -planeDirection.x);\n\
49
+ \n\
50
+ float a = dot(o, planeNormal);\n\
51
+ float b = dot(d, planeNormal);\n\
52
+ float t = -a / b;\n\
53
+ \n\
54
+ vec2 p = o + t * d;\n\
55
+ bool outside = dot(p, planeDirection) < 0.0;\n\
56
+ if (outside) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);\n\
57
+ \n\
58
+ return vec4(-INF_HIT, t, t, +INF_HIT);\n\
59
+ }\n\
60
+ \n\
61
+ #define POSITIVE_HIT vec2(t, +INF_HIT);\n\
62
+ #define NEGATIVE_HIT vec2(-INF_HIT, t);\n\
63
+ \n\
64
+ vec2 intersectHalfSpace(Ray ray, float angle)\n\
65
+ {\n\
66
+ vec2 o = ray.pos.xy;\n\
67
+ vec2 d = ray.dir.xy;\n\
68
+ vec2 n = vec2(sin(angle), -cos(angle));\n\
69
+ \n\
70
+ float a = dot(o, n);\n\
71
+ float b = dot(d, n);\n\
72
+ float t = -a / b;\n\
73
+ float s = sign(a);\n\
74
+ \n\
75
+ // Half space cuts right through the camera, pick the side to intersect\n\
76
+ if (a == 0.0) {\n\
77
+ if (b >= 0.0) {\n\
78
+ return POSITIVE_HIT;\n\
79
+ } else {\n\
80
+ return NEGATIVE_HIT;\n\
81
+ }\n\
82
+ }\n\
83
+ \n\
84
+ if (t >= 0.0 != s >= 0.0) {\n\
85
+ return POSITIVE_HIT;\n\
86
+ } else {\n\
87
+ return NEGATIVE_HIT;\n\
88
+ }\n\
89
+ }\n\
90
+ \n\
91
+ vec2 intersectRegularWedge(Ray ray, float minAngle, float maxAngle)\n\
92
+ {\n\
93
+ vec2 o = ray.pos.xy;\n\
94
+ vec2 d = ray.dir.xy;\n\
95
+ vec2 n1 = vec2(sin(minAngle), -cos(minAngle));\n\
96
+ vec2 n2 = vec2(-sin(maxAngle), cos(maxAngle));\n\
97
+ \n\
98
+ float a1 = dot(o, n1);\n\
99
+ float a2 = dot(o, n2);\n\
100
+ float b1 = dot(d, n1);\n\
101
+ float b2 = dot(d, n2);\n\
102
+ \n\
103
+ float t1 = -a1 / b1;\n\
104
+ float t2 = -a2 / b2;\n\
105
+ float s1 = sign(a1);\n\
106
+ float s2 = sign(a2);\n\
107
+ \n\
108
+ float tmin = min(t1, t2);\n\
109
+ float tmax = max(t1, t2);\n\
110
+ float smin = tmin == t1 ? s1 : s2;\n\
111
+ float smax = tmin == t1 ? s2 : s1;\n\
112
+ \n\
113
+ bool e = tmin >= 0.0;\n\
114
+ bool f = tmax >= 0.0;\n\
115
+ bool g = smin >= 0.0;\n\
116
+ bool h = smax >= 0.0;\n\
117
+ \n\
118
+ if (e != g && f == h) return vec2(tmin, tmax);\n\
119
+ else if (e == g && f == h) return vec2(-INF_HIT, tmin);\n\
120
+ else if (e != g && f != h) return vec2(tmax, +INF_HIT);\n\
121
+ else return vec2(NO_HIT);\n\
122
+ }\n\
123
+ \n\
124
+ vec4 intersectFlippedWedge(Ray ray, float minAngle, float maxAngle)\n\
125
+ {\n\
126
+ vec2 planeIntersectMin = intersectHalfSpace(ray, minAngle);\n\
127
+ vec2 planeIntersectMax = intersectHalfSpace(ray, maxAngle + czm_pi);\n\
128
+ return vec4(planeIntersectMin, planeIntersectMax);\n\
129
+ }\n\
130
+ \n\
131
+ vec2 intersectUnitCylinder(Ray ray)\n\
132
+ {\n\
133
+ vec3 o = ray.pos;\n\
134
+ vec3 d = ray.dir;\n\
135
+ \n\
136
+ float a = dot(d.xy, d.xy);\n\
137
+ float b = dot(o.xy, d.xy);\n\
138
+ float c = dot(o.xy, o.xy) - 1.0;\n\
139
+ float det = b * b - a * c;\n\
140
+ \n\
141
+ if (det < 0.0) {\n\
142
+ return vec2(NO_HIT);\n\
143
+ }\n\
144
+ \n\
145
+ det = sqrt(det);\n\
146
+ float ta = (-b - det) / a;\n\
147
+ float tb = (-b + det) / a;\n\
148
+ float t1 = min(ta, tb);\n\
149
+ float t2 = max(ta, tb);\n\
150
+ \n\
151
+ float z1 = o.z + t1 * d.z;\n\
152
+ float z2 = o.z + t2 * d.z;\n\
153
+ \n\
154
+ if (abs(z1) >= 1.0)\n\
155
+ {\n\
156
+ float tCap = (sign(z1) - o.z) / d.z;\n\
157
+ t1 = abs(b + a * tCap) < det ? tCap : NO_HIT;\n\
158
+ }\n\
159
+ \n\
160
+ if (abs(z2) >= 1.0)\n\
161
+ {\n\
162
+ float tCap = (sign(z2) - o.z) / d.z;\n\
163
+ t2 = abs(b + a * tCap) < det ? tCap : NO_HIT;\n\
164
+ }\n\
165
+ \n\
166
+ return vec2(t1, t2);\n\
167
+ }\n\
168
+ \n\
169
+ vec2 intersectUnitCircle(Ray ray) {\n\
170
+ vec3 o = ray.pos;\n\
171
+ vec3 d = ray.dir;\n\
172
+ \n\
173
+ float t = -o.z / d.z;\n\
174
+ vec2 zPlanePos = o.xy + d.xy * t;\n\
175
+ float distSqr = dot(zPlanePos, zPlanePos);\n\
176
+ \n\
177
+ if (distSqr > 1.0) {\n\
178
+ return vec2(NO_HIT);\n\
179
+ }\n\
180
+ \n\
181
+ return vec2(t, t);\n\
182
+ }\n\
183
+ \n\
184
+ vec2 intersectInfiniteUnitCylinder(Ray ray)\n\
185
+ {\n\
186
+ vec3 o = ray.pos;\n\
187
+ vec3 d = ray.dir;\n\
188
+ \n\
189
+ float a = dot(d.xy, d.xy);\n\
190
+ float b = dot(o.xy, d.xy);\n\
191
+ float c = dot(o.xy, o.xy) - 1.0;\n\
192
+ float det = b * b - a * c;\n\
193
+ \n\
194
+ if (det < 0.0) {\n\
195
+ return vec2(NO_HIT);\n\
196
+ }\n\
197
+ \n\
198
+ det = sqrt(det);\n\
199
+ float t1 = (-b - det) / a;\n\
200
+ float t2 = (-b + det) / a;\n\
201
+ float tmin = min(t1, t2);\n\
202
+ float tmax = max(t1, t2);\n\
203
+ \n\
204
+ return vec2(tmin, tmax);\n\
205
+ }\n\
206
+ \n\
207
+ void intersectShape(Ray ray, inout Intersections ix)\n\
208
+ {\n\
209
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)\n\
210
+ ray.pos = ray.pos * u_cylinderUvToRenderBoundsScale + u_cylinderUvToRenderBoundsTranslate;\n\
211
+ ray.dir *= u_cylinderUvToRenderBoundsScale;\n\
212
+ #else\n\
213
+ // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1].\n\
214
+ // Direction is scaled as well to be in sync with position.\n\
215
+ ray.pos = ray.pos * 2.0 - 1.0;\n\
216
+ ray.dir *= 2.0;\n\
217
+ #endif\n\
218
+ \n\
219
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT)\n\
220
+ vec2 outerIntersect = intersectUnitCircle(ray);\n\
221
+ #else\n\
222
+ vec2 outerIntersect = intersectUnitCylinder(ray);\n\
223
+ #endif\n\
224
+ \n\
225
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect);\n\
226
+ \n\
227
+ if (outerIntersect.x == NO_HIT) {\n\
228
+ return;\n\
229
+ }\n\
230
+ \n\
231
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)\n\
232
+ // When the cylinder is perfectly thin it's necessary to sandwich the\n\
233
+ // inner cylinder intersection inside the outer cylinder intersection.\n\
234
+ \n\
235
+ // Without this special case,\n\
236
+ // [outerMin, outerMax, innerMin, innerMax] will bubble sort to\n\
237
+ // [outerMin, innerMin, outerMax, innerMax] which will cause the back\n\
238
+ // side of the cylinder to be invisible because it will think the ray\n\
239
+ // is still inside the inner (negative) cylinder after exiting the\n\
240
+ // outer (positive) cylinder.\n\
241
+ \n\
242
+ // With this special case,\n\
243
+ // [outerMin, innerMin, innerMax, outerMax] will bubble sort to\n\
244
+ // [outerMin, innerMin, innerMax, outerMax] which will work correctly.\n\
245
+ \n\
246
+ // Note: If initializeIntersections() changes its sorting function\n\
247
+ // from bubble sort to something else, this code may need to change.\n\
248
+ vec2 innerIntersect = intersectInfiniteUnitCylinder(ray);\n\
249
+ setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter\n\
250
+ setIntersection(ix, 1, innerIntersect.x, false, true); // negative, enter\n\
251
+ setIntersection(ix, 2, innerIntersect.y, false, false); // negative, exit\n\
252
+ setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit\n\
253
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN)\n\
254
+ Ray innerRay = Ray(ray.pos * u_cylinderUvToRenderRadiusMin, ray.dir * u_cylinderUvToRenderRadiusMin);\n\
255
+ vec2 innerIntersect = intersectInfiniteUnitCylinder(innerRay);\n\
256
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect);\n\
257
+ #endif\n\
258
+ \n\
259
+ #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)\n\
260
+ vec2 wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);\n\
261
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);\n\
262
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)\n\
263
+ vec4 wedgeIntersect = intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);\n\
264
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);\n\
265
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);\n\
266
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF)\n\
267
+ vec2 wedgeIntersect = intersectHalfSpace(ray, u_cylinderRenderAngleMinMax.x);\n\
268
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);\n\
269
+ #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)\n\
270
+ vec4 wedgeIntersect = intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x);\n\
271
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);\n\
272
+ setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);\n\
273
+ #endif\n\
274
+ }\n\
275
+ ";
@@ -0,0 +1,23 @@
1
+ // See IntersectionUtils.glsl for the definitions of Ray, Intersections,
2
+ // setIntersectionPair, INF_HIT, NO_HIT
3
+
4
+ /* intersectDepth defines (set in Scene/VoxelRenderResources.js)
5
+ #define DEPTH_INTERSECTION_INDEX ###
6
+ */
7
+
8
+ uniform mat4 u_transformPositionViewToUv;
9
+
10
+ void intersectDepth(vec2 screenCoord, Ray ray, inout Intersections ix) {
11
+ float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, screenCoord));
12
+ if (logDepthOrDepth != 0.0) {
13
+ // Calculate how far the ray must travel before it hits the depth buffer.
14
+ vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth);
15
+ eyeCoordinateDepth /= eyeCoordinateDepth.w;
16
+ vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth);
17
+ float t = dot(depthPositionUv - ray.pos, ray.dir);
18
+ setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(t, +INF_HIT));
19
+ } else {
20
+ // There's no depth at this location.
21
+ setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(NO_HIT));
22
+ }
23
+ }
@@ -0,0 +1,25 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "// See IntersectionUtils.glsl for the definitions of Ray, Intersections,\n\
3
+ // setIntersectionPair, INF_HIT, NO_HIT\n\
4
+ \n\
5
+ /* intersectDepth defines (set in Scene/VoxelRenderResources.js)\n\
6
+ #define DEPTH_INTERSECTION_INDEX ###\n\
7
+ */\n\
8
+ \n\
9
+ uniform mat4 u_transformPositionViewToUv;\n\
10
+ \n\
11
+ void intersectDepth(vec2 screenCoord, Ray ray, inout Intersections ix) {\n\
12
+ float logDepthOrDepth = czm_unpackDepth(texture2D(czm_globeDepthTexture, screenCoord));\n\
13
+ if (logDepthOrDepth != 0.0) {\n\
14
+ // Calculate how far the ray must travel before it hits the depth buffer.\n\
15
+ vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth);\n\
16
+ eyeCoordinateDepth /= eyeCoordinateDepth.w;\n\
17
+ vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth);\n\
18
+ float t = dot(depthPositionUv - ray.pos, ray.dir);\n\
19
+ setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(t, +INF_HIT));\n\
20
+ } else {\n\
21
+ // There's no depth at this location.\n\
22
+ setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(NO_HIT));\n\
23
+ }\n\
24
+ }\n\
25
+ ";