@cesium/engine 6.2.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Build/ThirdParty/Workers/z-worker-pako.js +568 -407
- package/Build/Workers/{chunk-RH4N2ONY.js → chunk-23UFSGND.js} +7 -7
- package/Build/Workers/{chunk-HPP4JLNH.js → chunk-2A75IWRS.js} +7 -7
- package/Build/Workers/{chunk-5IRLXUTA.js → chunk-2FRVPMCS.js} +10 -10
- package/Build/Workers/{chunk-ZQRZBHYI.js → chunk-2FWRMUTY.js} +4 -4
- package/Build/Workers/{chunk-Z2SIPUKB.js → chunk-2UPKWTMJ.js} +6 -6
- package/Build/Workers/{chunk-434ZTTFX.js → chunk-34FXV7D7.js} +2 -2
- package/Build/Workers/{chunk-MW3CJYLX.js → chunk-3VAZEH7M.js} +2 -2
- package/Build/Workers/{chunk-HUPNRBWW.js → chunk-4DO5W5XZ.js} +6 -6
- package/Build/Workers/{chunk-PIXK6KHB.js → chunk-4H7PY4U5.js} +2 -2
- package/Build/Workers/{chunk-BP467WX3.js → chunk-5QULIR53.js} +4 -4
- package/Build/Workers/{chunk-R3HUGXBH.js → chunk-7TC63SJW.js} +8 -8
- package/Build/Workers/{chunk-SQVTYRZY.js → chunk-7ZFGPDJA.js} +4 -4
- package/Build/Workers/{chunk-TIXXVKUY.js → chunk-A5DWLWCY.js} +10 -10
- package/Build/Workers/{chunk-CWJQGBWT.js → chunk-BBWDMCVU.js} +1 -1
- package/Build/Workers/{chunk-4KP73B43.js → chunk-BG4UCVXN.js} +3 -3
- package/Build/Workers/{chunk-Y4OJ4B23.js → chunk-BIKA3NRA.js} +5 -5
- package/Build/Workers/{chunk-DR5XZ6K5.js → chunk-BROJAZRZ.js} +13 -13
- package/Build/Workers/{chunk-FWGNCYP6.js → chunk-DDUQAJ4P.js} +7 -7
- package/Build/Workers/{chunk-QRBRVGZC.js → chunk-EERJKOAF.js} +4 -4
- package/Build/Workers/{chunk-52VSIKEA.js → chunk-EG6PTBY2.js} +15 -15
- package/Build/Workers/{chunk-O43GWBSF.js → chunk-EHWHNOEX.js} +1 -1
- package/Build/Workers/{chunk-MN34FIF5.js → chunk-F3YA3Y2Z.js} +1 -1
- package/Build/Workers/{chunk-GF5TNNKP.js → chunk-F4HFJMGM.js} +6 -6
- package/Build/Workers/{chunk-HOT2SNXP.js → chunk-FJKNFAKQ.js} +133 -553
- package/Build/Workers/{chunk-TMPVBFJQ.js → chunk-FNIRWHJB.js} +10 -10
- package/Build/Workers/{chunk-DMCSY5BU.js → chunk-FZRIVR7Y.js} +5 -5
- package/Build/Workers/{chunk-Z4JUBRHP.js → chunk-G43QFN4Q.js} +6 -6
- package/Build/Workers/{chunk-HPH5HSFE.js → chunk-GATZHF3K.js} +2 -2
- package/Build/Workers/{chunk-CSIZ3BGT.js → chunk-GRC2ZTAF.js} +14 -14
- package/Build/Workers/{chunk-NE4JNU6H.js → chunk-HU6N6EXB.js} +10 -10
- package/Build/Workers/{chunk-GVL5I7TC.js → chunk-I46ZRR5W.js} +17 -17
- package/Build/Workers/{chunk-5GDBZTHX.js → chunk-JURN7NPV.js} +17 -17
- package/Build/Workers/{chunk-H5DUXHCV.js → chunk-KKCR2YOP.js} +11 -11
- package/Build/Workers/{chunk-LX6XV4DK.js → chunk-LPR3YNP2.js} +5 -5
- package/Build/Workers/{chunk-HFKSAB5K.js → chunk-M7ERACJJ.js} +13 -13
- package/Build/Workers/{chunk-BUZDZBUH.js → chunk-MDWEGWPA.js} +10 -10
- package/Build/Workers/{chunk-LGJUI2CE.js → chunk-OGXZVPPM.js} +9 -5
- package/Build/Workers/{chunk-PZ2WJWUG.js → chunk-PGSJK77E.js} +6 -6
- package/Build/Workers/{chunk-ARPTYYKS.js → chunk-PPH7OFP3.js} +5 -5
- package/Build/Workers/{chunk-R4OZKBXH.js → chunk-SH5USDPI.js} +6 -6
- package/Build/Workers/{chunk-SV7DDPAC.js → chunk-SOWMRMWA.js} +1 -1
- package/Build/Workers/{chunk-RIDPF7PO.js → chunk-STW2DGFI.js} +2 -2
- package/Build/Workers/{chunk-CDGHUKQ4.js → chunk-T3XIFPYR.js} +13 -13
- package/Build/Workers/chunk-TTUZP4BO.js +501 -0
- package/Build/Workers/{chunk-QTZQZY2C.js → chunk-UEXTBDBE.js} +34 -10
- package/Build/Workers/{chunk-XUTVA4K5.js → chunk-VOXYEYJT.js} +11 -11
- package/Build/Workers/{chunk-AXFRNOVC.js → chunk-X4356LRH.js} +12 -12
- package/Build/Workers/{chunk-5HLGKKG3.js → chunk-XGI5BXZY.js} +2 -2
- package/Build/Workers/{chunk-SNN7WOC2.js → chunk-Y2ME2IJV.js} +13 -13
- package/Build/Workers/{chunk-LGL4P5KL.js → chunk-Y5UQJLYE.js} +6 -6
- package/Build/Workers/{chunk-3PW6ZBN4.js → chunk-YJEBABKH.js} +7 -7
- package/Build/Workers/{chunk-YBKFS53K.js → chunk-YWTJ2B4B.js} +1 -1
- package/Build/Workers/{chunk-5SK36PU4.js → chunk-Z3TIFFGF.js} +7 -7
- package/Build/Workers/{chunk-JGG36SQV.js → chunk-ZT7KWISZ.js} +4 -4
- package/Build/Workers/combineGeometry.js +24 -23
- package/Build/Workers/createBoxGeometry.js +18 -17
- package/Build/Workers/createBoxOutlineGeometry.js +16 -15
- package/Build/Workers/createCircleGeometry.js +26 -25
- package/Build/Workers/createCircleOutlineGeometry.js +19 -18
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -32
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -30
- package/Build/Workers/createCorridorGeometry.js +29 -29
- package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
- package/Build/Workers/createCylinderGeometry.js +20 -19
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -17
- package/Build/Workers/createEllipseGeometry.js +26 -25
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -18
- package/Build/Workers/createEllipsoidGeometry.js +19 -18
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -17
- package/Build/Workers/createFrustumGeometry.js +18 -17
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -17
- package/Build/Workers/createGeometry.js +54 -33
- package/Build/Workers/createGroundPolylineGeometry.js +22 -21
- package/Build/Workers/createPlaneGeometry.js +16 -15
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -14
- package/Build/Workers/createPolygonGeometry.js +32 -166
- package/Build/Workers/createPolygonOutlineGeometry.js +30 -29
- package/Build/Workers/createPolylineGeometry.js +25 -24
- package/Build/Workers/createPolylineVolumeGeometry.js +32 -33
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
- package/Build/Workers/createRectangleGeometry.js +27 -26
- package/Build/Workers/createRectangleOutlineGeometry.js +20 -19
- package/Build/Workers/createSimplePolylineGeometry.js +23 -22
- package/Build/Workers/createSphereGeometry.js +19 -18
- package/Build/Workers/createSphereOutlineGeometry.js +18 -17
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -23
- package/Build/Workers/createVectorTilePoints.js +12 -12
- package/Build/Workers/createVectorTilePolygons.js +22 -21
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -21
- package/Build/Workers/createVerticesFromHeightmap.js +22 -21
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -18
- package/Build/Workers/createWallGeometry.js +24 -23
- package/Build/Workers/createWallOutlineGeometry.js +23 -22
- package/Build/Workers/decodeDraco.js +11 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +601 -92
- package/Build/Workers/transcodeKTX2.js +7 -7
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -21
- package/LICENSE.md +1 -1
- package/Source/Assets/approximateTerrainHeights.json +1 -1
- package/Source/Core/Ellipsoid.js +6 -0
- package/Source/Core/GregorianDate.js +85 -0
- package/Source/Core/HeadingPitchRange.js +2 -2
- package/Source/Core/IntersectionTests.js +6 -3
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/PixelFormat.js +5 -0
- package/Source/Core/PolygonGeometry.js +0 -169
- package/Source/Core/Resource.js +30 -69
- package/Source/Core/Transforms.js +30 -18
- package/Source/Core/createWorldBathymetryAsync.js +45 -0
- package/Source/Core/srgbToLinear.js +32 -0
- package/Source/DataSources/CzmlDataSource.js +51 -23
- package/Source/DataSources/DataSourceDisplay.js +27 -0
- package/Source/DataSources/EllipsoidGeometryUpdater.js +3 -4
- package/Source/DataSources/Entity.js +28 -7
- package/Source/DataSources/EntityCollection.js +1 -2
- package/Source/DataSources/GeometryUpdater.js +1 -2
- package/Source/DataSources/GeometryUpdaterSet.js +114 -0
- package/Source/DataSources/GeometryVisualizer.js +19 -83
- package/Source/DataSources/GroundGeometryUpdater.js +6 -3
- package/Source/DataSources/ModelVisualizer.js +19 -98
- package/Source/DataSources/PolygonGeometryUpdater.js +14 -2
- package/Source/DataSources/PolylineGeometryUpdater.js +9 -8
- package/Source/DataSources/TerrainOffsetProperty.js +15 -23
- package/Source/Renderer/AutomaticUniforms.js +121 -1
- package/Source/Renderer/Context.js +10 -0
- package/Source/Renderer/ContextLimits.js +2 -0
- package/Source/Renderer/UniformState.js +127 -0
- package/Source/Renderer/demodernizeShader.js +4 -1
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Atmosphere.js +127 -0
- package/Source/Scene/Axis.js +12 -7
- package/Source/Scene/Billboard.js +29 -26
- package/Source/Scene/BillboardCollection.js +3 -3
- package/Source/Scene/Camera.js +47 -5
- package/Source/Scene/Cesium3DTile.js +1 -0
- package/Source/Scene/Cesium3DTileContent.js +14 -0
- package/Source/Scene/Cesium3DTileset.js +364 -45
- package/Source/Scene/Cesium3DTilesetBaseTraversal.js +2 -4
- package/Source/Scene/Cesium3DTilesetTraversal.js +4 -0
- package/Source/Scene/Composite3DTileContent.js +42 -0
- package/Source/Scene/DynamicAtmosphereLightingType.js +56 -0
- package/Source/Scene/Empty3DTileContent.js +4 -0
- package/Source/Scene/Fog.js +1 -0
- package/Source/Scene/FrameState.js +14 -1
- package/Source/Scene/Geometry3DTileContent.js +4 -0
- package/Source/Scene/Globe.js +3 -2
- package/Source/Scene/GlobeSurfaceTileProvider.js +3 -1
- package/Source/Scene/GlobeTranslucencyState.js +1 -1
- package/Source/Scene/GltfLoader.js +15 -5
- package/Source/Scene/GltfPipeline/updateVersion.js +69 -68
- package/Source/Scene/HeightReference.js +59 -2
- package/Source/Scene/I3SDataProvider.js +270 -53
- package/Source/Scene/I3SDecoder.js +8 -1
- package/Source/Scene/I3SFeature.js +2 -5
- package/Source/Scene/I3SField.js +136 -31
- package/Source/Scene/I3SGeometry.js +70 -2
- package/Source/Scene/I3SLayer.js +55 -10
- package/Source/Scene/I3SNode.js +175 -18
- package/Source/Scene/I3SStatistics.js +94 -0
- package/Source/Scene/I3SSublayer.js +176 -0
- package/Source/Scene/I3SSymbology.js +337 -0
- package/Source/Scene/Implicit3DTileContent.js +4 -0
- package/Source/Scene/KeyframeNode.js +1 -1
- package/Source/Scene/LabelCollection.js +2 -2
- package/Source/Scene/Model/AtmospherePipelineStage.js +59 -0
- package/Source/Scene/Model/B3dmLoader.js +4 -0
- package/Source/Scene/Model/FeatureIdPipelineStage.js +25 -2
- package/Source/Scene/Model/I3dmLoader.js +4 -0
- package/Source/Scene/Model/InstancingPipelineStage.js +24 -6
- package/Source/Scene/Model/MetadataPipelineStage.js +31 -3
- package/Source/Scene/Model/Model.js +82 -32
- package/Source/Scene/Model/Model3DTileContent.js +31 -0
- package/Source/Scene/Model/ModelAnimationChannel.js +16 -15
- package/Source/Scene/Model/ModelSceneGraph.js +6 -0
- package/Source/Scene/Model/pickModel.js +426 -0
- package/Source/Scene/Multiple3DTileContent.js +42 -0
- package/Source/Scene/PickFramebuffer.js +37 -2
- package/Source/Scene/Picking.js +113 -39
- package/Source/Scene/Primitive.js +6 -2
- package/Source/Scene/QuadtreePrimitive.js +1 -1
- package/Source/Scene/Scene.js +312 -46
- package/Source/Scene/ScreenSpaceCameraController.js +23 -13
- package/Source/Scene/SensorVolumePortionToDisplay.js +69 -0
- package/Source/Scene/SkyAtmosphere.js +5 -6
- package/Source/Scene/SpatialNode.js +12 -19
- package/Source/Scene/StructuralMetadata.js +1 -1
- package/Source/Scene/Terrain.js +49 -0
- package/Source/Scene/TileBoundingS2Cell.js +2 -2
- package/Source/Scene/Tileset3DTileContent.js +4 -0
- package/Source/Scene/Vector3DTileContent.js +4 -0
- package/Source/Scene/VoxelBoxShape.js +76 -0
- package/Source/Scene/VoxelCell.js +273 -0
- package/Source/Scene/VoxelCylinderShape.js +114 -43
- package/Source/Scene/VoxelEllipsoidShape.js +158 -116
- package/Source/Scene/VoxelPrimitive.js +3 -1
- package/Source/Scene/VoxelRenderResources.js +3 -0
- package/Source/Scene/VoxelShape.js +13 -0
- package/Source/Scene/VoxelTraversal.js +76 -54
- package/Source/Scene/buildVoxelDrawCommands.js +23 -0
- package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -0
- package/Source/Scene/processVoxelProperties.js +2 -0
- package/Source/Shaders/AtmosphereCommon.glsl +3 -11
- package/Source/Shaders/AtmosphereCommon.js +3 -11
- package/Source/Shaders/Builtin/CzmBuiltins.js +12 -0
- package/Source/Shaders/Builtin/Functions/applyHSBShift.glsl +32 -0
- package/Source/Shaders/Builtin/Functions/applyHSBShift.js +34 -0
- package/Source/Shaders/Builtin/Functions/approximateTanh.glsl +10 -0
- package/Source/Shaders/Builtin/Functions/approximateTanh.js +12 -0
- package/Source/Shaders/Builtin/Functions/computeAtmosphereColor.glsl +44 -0
- package/Source/Shaders/Builtin/Functions/computeAtmosphereColor.js +46 -0
- package/Source/Shaders/Builtin/Functions/computeGroundAtmosphereScattering.glsl +30 -0
- package/Source/Shaders/Builtin/Functions/computeGroundAtmosphereScattering.js +32 -0
- package/Source/Shaders/Builtin/Functions/computeScattering.glsl +150 -0
- package/Source/Shaders/Builtin/Functions/computeScattering.js +152 -0
- package/Source/Shaders/Builtin/Functions/getDynamicAtmosphereLightDirection.glsl +22 -0
- package/Source/Shaders/Builtin/Functions/getDynamicAtmosphereLightDirection.js +24 -0
- package/Source/Shaders/Builtin/Functions/translateRelativeToEye.glsl +5 -0
- package/Source/Shaders/Builtin/Functions/translateRelativeToEye.js +5 -0
- package/Source/Shaders/GlobeFS.glsl +16 -25
- package/Source/Shaders/GlobeFS.js +16 -25
- package/Source/Shaders/GlobeVS.glsl +1 -1
- package/Source/Shaders/GlobeVS.js +1 -1
- package/Source/Shaders/Model/AtmosphereStageFS.glsl +111 -0
- package/Source/Shaders/Model/AtmosphereStageFS.js +113 -0
- package/Source/Shaders/Model/AtmosphereStageVS.glsl +12 -0
- package/Source/Shaders/Model/AtmosphereStageVS.js +14 -0
- package/Source/Shaders/Model/GeometryStageFS.glsl +1 -1
- package/Source/Shaders/Model/GeometryStageFS.js +1 -1
- package/Source/Shaders/Model/GeometryStageVS.glsl +4 -4
- package/Source/Shaders/Model/GeometryStageVS.js +4 -4
- package/Source/Shaders/Model/ModelColorStageFS.glsl +1 -1
- package/Source/Shaders/Model/ModelColorStageFS.js +2 -1
- package/Source/Shaders/Model/ModelFS.glsl +4 -0
- package/Source/Shaders/Model/ModelFS.js +4 -0
- package/Source/Shaders/Model/ModelVS.glsl +9 -4
- package/Source/Shaders/Model/ModelVS.js +9 -4
- package/Source/Shaders/SkyAtmosphereCommon.glsl +3 -13
- package/Source/Shaders/SkyAtmosphereCommon.js +3 -13
- package/Source/Shaders/SkyAtmosphereFS.glsl +5 -10
- package/Source/Shaders/SkyAtmosphereFS.js +5 -10
- package/Source/Shaders/SkyAtmosphereVS.glsl +3 -2
- package/Source/Shaders/SkyAtmosphereVS.js +3 -2
- package/Source/Shaders/Voxels/IntersectCylinder.glsl +14 -111
- package/Source/Shaders/Voxels/IntersectCylinder.js +14 -111
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +32 -113
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +32 -113
- package/Source/Shaders/Voxels/IntersectLongitude.glsl +102 -0
- package/Source/Shaders/Voxels/IntersectLongitude.js +104 -0
- package/Source/Shaders/Voxels/VoxelFS.glsl +39 -1
- package/Source/Shaders/Voxels/VoxelFS.js +39 -1
- package/Source/Shaders/Voxels/convertUvToCylinder.glsl +19 -37
- package/Source/Shaders/Voxels/convertUvToCylinder.js +19 -37
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +24 -44
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +24 -44
- package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
- package/Source/ThirdParty/draco_decoder.wasm +0 -0
- package/Source/Workers/createGeometry.js +40 -11
- package/Source/Workers/decodeI3S.js +720 -94
- package/index.d.ts +574 -71
- package/index.js +217 -196
- package/package.json +3 -3
- package/Build/Workers/chunk-ATB2I7OS.js +0 -55
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
// See IntersectionUtils.glsl for the definitions of Ray,
|
|
2
|
-
// setIntersectionPair
|
|
1
|
+
// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT,
|
|
2
|
+
// setIntersection, setIntersectionPair, setShapeIntersection
|
|
3
|
+
// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,
|
|
4
|
+
// intersectFlippedWedge, intersectRegularWedge
|
|
3
5
|
|
|
4
6
|
/* Cylinder defines (set in Scene/VoxelCylinderShape.js)
|
|
5
7
|
#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN
|
|
@@ -10,19 +12,8 @@
|
|
|
10
12
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE
|
|
11
13
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF
|
|
12
14
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF
|
|
13
|
-
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF
|
|
14
15
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
|
|
15
16
|
|
|
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
17
|
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX
|
|
27
18
|
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN
|
|
28
19
|
#define CYLINDER_INTERSECTION_INDEX_ANGLE
|
|
@@ -40,93 +31,6 @@
|
|
|
40
31
|
uniform vec2 u_cylinderRenderAngleMinMax;
|
|
41
32
|
#endif
|
|
42
33
|
|
|
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
34
|
vec2 intersectUnitCylinder(Ray ray)
|
|
131
35
|
{
|
|
132
36
|
vec3 o = ray.pos;
|
|
@@ -256,18 +160,17 @@ void intersectShape(Ray ray, inout Intersections ix)
|
|
|
256
160
|
#endif
|
|
257
161
|
|
|
258
162
|
#if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)
|
|
259
|
-
|
|
260
|
-
|
|
163
|
+
RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax);
|
|
164
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
|
|
261
165
|
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
vec2 wedgeIntersect = intersectHalfSpace(ray, u_cylinderRenderAngleMinMax.x);
|
|
267
|
-
setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
|
|
166
|
+
RayShapeIntersection wedgeIntersects[2];
|
|
167
|
+
intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects);
|
|
168
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);
|
|
169
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);
|
|
268
170
|
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
171
|
+
RayShapeIntersection wedgeIntersects[2];
|
|
172
|
+
intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects);
|
|
173
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);
|
|
174
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);
|
|
272
175
|
#endif
|
|
273
176
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
-
export default "// See IntersectionUtils.glsl for the definitions of Ray,
|
|
3
|
-
// setIntersectionPair\n\
|
|
2
|
+
export default "// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT,\n\
|
|
3
|
+
// setIntersection, setIntersectionPair, setShapeIntersection\n\
|
|
4
|
+
// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,\n\
|
|
5
|
+
// intersectFlippedWedge, intersectRegularWedge\n\
|
|
4
6
|
\n\
|
|
5
7
|
/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
|
|
6
8
|
#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN\n\
|
|
@@ -11,19 +13,8 @@ export default "// See IntersectionUtils.glsl for the definitions of Ray, setInt
|
|
|
11
13
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE\n\
|
|
12
14
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF\n\
|
|
13
15
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF\n\
|
|
14
|
-
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF\n\
|
|
15
16
|
#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
|
|
16
17
|
\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
18
|
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX\n\
|
|
28
19
|
#define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN\n\
|
|
29
20
|
#define CYLINDER_INTERSECTION_INDEX_ANGLE\n\
|
|
@@ -41,93 +32,6 @@ export default "// See IntersectionUtils.glsl for the definitions of Ray, setInt
|
|
|
41
32
|
uniform vec2 u_cylinderRenderAngleMinMax;\n\
|
|
42
33
|
#endif\n\
|
|
43
34
|
\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
35
|
vec2 intersectUnitCylinder(Ray ray)\n\
|
|
132
36
|
{\n\
|
|
133
37
|
vec3 o = ray.pos;\n\
|
|
@@ -257,19 +161,18 @@ void intersectShape(Ray ray, inout Intersections ix)\n\
|
|
|
257
161
|
#endif\n\
|
|
258
162
|
\n\
|
|
259
163
|
#if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)\n\
|
|
260
|
-
|
|
261
|
-
|
|
164
|
+
RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax);\n\
|
|
165
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);\n\
|
|
262
166
|
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)\n\
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
vec2 wedgeIntersect = intersectHalfSpace(ray, u_cylinderRenderAngleMinMax.x);\n\
|
|
268
|
-
setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);\n\
|
|
167
|
+
RayShapeIntersection wedgeIntersects[2];\n\
|
|
168
|
+
intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects);\n\
|
|
169
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);\n\
|
|
170
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);\n\
|
|
269
171
|
#elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)\n\
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
172
|
+
RayShapeIntersection wedgeIntersects[2];\n\
|
|
173
|
+
intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects);\n\
|
|
174
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);\n\
|
|
175
|
+
setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);\n\
|
|
273
176
|
#endif\n\
|
|
274
177
|
}\n\
|
|
275
178
|
";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// See IntersectionUtils.glsl for the definitions of Ray, Intersections,
|
|
2
2
|
// setIntersection, setIntersectionPair, INF_HIT, NO_HIT
|
|
3
|
+
// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,
|
|
4
|
+
// intersectFlippedWedge, intersectRegularWedge
|
|
3
5
|
|
|
4
6
|
/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)
|
|
5
7
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE
|
|
6
8
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
|
|
7
9
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF
|
|
8
|
-
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF
|
|
9
10
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF
|
|
10
|
-
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE
|
|
11
11
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF
|
|
12
12
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF
|
|
13
13
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF
|
|
17
17
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX
|
|
18
18
|
#define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN
|
|
19
|
-
#define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT
|
|
20
19
|
#define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE
|
|
21
20
|
#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX
|
|
22
21
|
#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN
|
|
@@ -48,78 +47,6 @@ vec2 intersectZPlane(Ray ray)
|
|
|
48
47
|
else return vec2(-INF_HIT, t);
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
vec4 intersectHalfPlane(Ray ray, float angle) {
|
|
52
|
-
vec2 o = ray.pos.xy;
|
|
53
|
-
vec2 d = ray.dir.xy;
|
|
54
|
-
vec2 planeDirection = vec2(cos(angle), sin(angle));
|
|
55
|
-
vec2 planeNormal = vec2(planeDirection.y, -planeDirection.x);
|
|
56
|
-
|
|
57
|
-
float a = dot(o, planeNormal);
|
|
58
|
-
float b = dot(d, planeNormal);
|
|
59
|
-
float t = -a / b;
|
|
60
|
-
|
|
61
|
-
vec2 p = o + t * d;
|
|
62
|
-
bool outside = dot(p, planeDirection) < 0.0;
|
|
63
|
-
if (outside) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
|
|
64
|
-
|
|
65
|
-
return vec4(-INF_HIT, t, t, +INF_HIT);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
vec2 intersectHalfSpace(Ray ray, float angle)
|
|
69
|
-
{
|
|
70
|
-
vec2 o = ray.pos.xy;
|
|
71
|
-
vec2 d = ray.dir.xy;
|
|
72
|
-
vec2 n = vec2(sin(angle), -cos(angle));
|
|
73
|
-
|
|
74
|
-
float a = dot(o, n);
|
|
75
|
-
float b = dot(d, n);
|
|
76
|
-
float t = -a / b;
|
|
77
|
-
float s = sign(a);
|
|
78
|
-
|
|
79
|
-
if (t >= 0.0 != s >= 0.0) return vec2(t, +INF_HIT);
|
|
80
|
-
else return vec2(-INF_HIT, t);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
vec2 intersectRegularWedge(Ray ray, float minAngle, float maxAngle)
|
|
84
|
-
{
|
|
85
|
-
vec2 o = ray.pos.xy;
|
|
86
|
-
vec2 d = ray.dir.xy;
|
|
87
|
-
vec2 n1 = vec2(sin(minAngle), -cos(minAngle));
|
|
88
|
-
vec2 n2 = vec2(-sin(maxAngle), cos(maxAngle));
|
|
89
|
-
|
|
90
|
-
float a1 = dot(o, n1);
|
|
91
|
-
float a2 = dot(o, n2);
|
|
92
|
-
float b1 = dot(d, n1);
|
|
93
|
-
float b2 = dot(d, n2);
|
|
94
|
-
|
|
95
|
-
float t1 = -a1 / b1;
|
|
96
|
-
float t2 = -a2 / b2;
|
|
97
|
-
float s1 = sign(a1);
|
|
98
|
-
float s2 = sign(a2);
|
|
99
|
-
|
|
100
|
-
float tmin = min(t1, t2);
|
|
101
|
-
float tmax = max(t1, t2);
|
|
102
|
-
float smin = tmin == t1 ? s1 : s2;
|
|
103
|
-
float smax = tmin == t1 ? s2 : s1;
|
|
104
|
-
|
|
105
|
-
bool e = tmin >= 0.0;
|
|
106
|
-
bool f = tmax >= 0.0;
|
|
107
|
-
bool g = smin >= 0.0;
|
|
108
|
-
bool h = smax >= 0.0;
|
|
109
|
-
|
|
110
|
-
if (e != g && f == h) return vec2(tmin, tmax);
|
|
111
|
-
else if (e == g && f == h) return vec2(-INF_HIT, tmin);
|
|
112
|
-
else if (e != g && f != h) return vec2(tmax, +INF_HIT);
|
|
113
|
-
else return vec2(NO_HIT);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
vec4 intersectFlippedWedge(Ray ray, float minAngle, float maxAngle)
|
|
117
|
-
{
|
|
118
|
-
vec2 planeIntersectMin = intersectHalfSpace(ray, minAngle);
|
|
119
|
-
vec2 planeIntersectMax = intersectHalfSpace(ray, maxAngle + czm_pi);
|
|
120
|
-
return vec4(planeIntersectMin, planeIntersectMax);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
50
|
vec2 intersectUnitSphere(Ray ray)
|
|
124
51
|
{
|
|
125
52
|
vec3 o = ray.pos;
|
|
@@ -250,39 +177,32 @@ void intersectShape(in Ray ray, inout Intersections ix) {
|
|
|
250
177
|
}
|
|
251
178
|
|
|
252
179
|
// Inner ellipsoid
|
|
253
|
-
#if defined(
|
|
254
|
-
// When the ellipsoid is perfectly thin it's necessary to sandwich the
|
|
255
|
-
// inner ellipsoid intersection inside the outer ellipsoid intersection.
|
|
256
|
-
|
|
257
|
-
// Without this special case,
|
|
258
|
-
// [outerMin, outerMax, innerMin, innerMax] will bubble sort to
|
|
259
|
-
// [outerMin, innerMin, outerMax, innerMax] which will cause the back
|
|
260
|
-
// side of the ellipsoid to be invisible because it will think the ray
|
|
261
|
-
// is still inside the inner (negative) ellipsoid after exiting the
|
|
262
|
-
// outer (positive) ellipsoid.
|
|
263
|
-
|
|
264
|
-
// With this special case,
|
|
265
|
-
// [outerMin, innerMin, innerMax, outerMax] will bubble sort to
|
|
266
|
-
// [outerMin, innerMin, innerMax, outerMax] which will work correctly.
|
|
267
|
-
|
|
268
|
-
// Note: If initializeIntersections() changes its sorting function
|
|
269
|
-
// from bubble sort to something else, this code may need to change.
|
|
270
|
-
setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter
|
|
271
|
-
setIntersection(ix, 1, outerIntersect.x, false, true); // negative, enter
|
|
272
|
-
setIntersection(ix, 2, outerIntersect.y, false, false); // negative, exit
|
|
273
|
-
setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit
|
|
274
|
-
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN)
|
|
180
|
+
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN)
|
|
275
181
|
Ray innerRay = Ray(ray.pos * u_ellipsoidInverseInnerScaleUv, ray.dir * u_ellipsoidInverseInnerScaleUv);
|
|
276
182
|
vec2 innerIntersect = intersectUnitSphereUnnormalizedDirection(innerRay);
|
|
277
183
|
|
|
278
184
|
if (innerIntersect == vec2(NO_HIT)) {
|
|
279
185
|
setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect);
|
|
280
186
|
} else {
|
|
281
|
-
// When the ellipsoid is
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
//
|
|
285
|
-
|
|
187
|
+
// When the ellipsoid is large and thin it's possible for floating point math
|
|
188
|
+
// to cause the ray to intersect the inner ellipsoid before the outer ellipsoid.
|
|
189
|
+
// To prevent this from happening, clamp innerIntersect to outerIntersect and
|
|
190
|
+
// sandwich the inner ellipsoid intersection inside the outer ellipsoid intersection.
|
|
191
|
+
|
|
192
|
+
// Without this special case,
|
|
193
|
+
// [outerMin, outerMax, innerMin, innerMax] will bubble sort to
|
|
194
|
+
// [outerMin, innerMin, outerMax, innerMax] which will cause the back
|
|
195
|
+
// side of the ellipsoid to be invisible because it will think the ray
|
|
196
|
+
// is still inside the inner (negative) ellipsoid after exiting the
|
|
197
|
+
// outer (positive) ellipsoid.
|
|
198
|
+
|
|
199
|
+
// With this special case,
|
|
200
|
+
// [outerMin, innerMin, innerMax, outerMax] will bubble sort to
|
|
201
|
+
// [outerMin, innerMin, innerMax, outerMax] which will work correctly.
|
|
202
|
+
|
|
203
|
+
// Note: If initializeIntersections() changes its sorting function
|
|
204
|
+
// from bubble sort to something else, this code may need to change.
|
|
205
|
+
|
|
286
206
|
// In theory a similar fix is needed for cylinders, however it's more
|
|
287
207
|
// complicated to implement because the inner shape is allowed to be
|
|
288
208
|
// intersected first.
|
|
@@ -330,18 +250,17 @@ void intersectShape(in Ray ray, inout Intersections ix) {
|
|
|
330
250
|
|
|
331
251
|
// Wedge
|
|
332
252
|
#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
253
|
+
RayShapeIntersection wedgeIntersects[2];
|
|
254
|
+
intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x, wedgeIntersects);
|
|
255
|
+
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);
|
|
256
|
+
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);
|
|
336
257
|
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF)
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF)
|
|
340
|
-
vec2 wedgeIntersect = intersectHalfSpace(ray, u_ellipsoidRenderLongitudeMinMax.x);
|
|
341
|
-
setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);
|
|
258
|
+
RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax);
|
|
259
|
+
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);
|
|
342
260
|
#elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF)
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
261
|
+
RayShapeIntersection wedgeIntersects[2];
|
|
262
|
+
intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax, wedgeIntersects);
|
|
263
|
+
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);
|
|
264
|
+
setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);
|
|
346
265
|
#endif
|
|
347
266
|
}
|