cesium 0.13.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.
- data/LICENSE.md +259 -0
- data/README.rdoc +90 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
- data/app/assets/javascripts/Assets/package.json +6 -0
- data/app/assets/javascripts/Cesium.js +320 -0
- data/app/assets/javascripts/Core/AnimationController.js +148 -0
- data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
- data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
- data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
- data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
- data/app/assets/javascripts/Core/Cartesian2.js +762 -0
- data/app/assets/javascripts/Core/Cartesian3.js +861 -0
- data/app/assets/javascripts/Core/Cartesian4.js +762 -0
- data/app/assets/javascripts/Core/Cartographic.js +211 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
- data/app/assets/javascripts/Core/Clock.js +195 -0
- data/app/assets/javascripts/Core/ClockRange.js +37 -0
- data/app/assets/javascripts/Core/ClockStep.js +32 -0
- data/app/assets/javascripts/Core/Color.js +1629 -0
- data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
- data/app/assets/javascripts/Core/Core.profile.js +8 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
- data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
- data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
- data/app/assets/javascripts/Core/DeveloperError.js +60 -0
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
- data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
- data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
- data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
- data/app/assets/javascripts/Core/Enumeration.js +67 -0
- data/app/assets/javascripts/Core/Event.js +122 -0
- data/app/assets/javascripts/Core/Extent.js +383 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
- data/app/assets/javascripts/Core/FAR.js +13 -0
- data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
- data/app/assets/javascripts/Core/Fullscreen.js +235 -0
- data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
- data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
- data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
- data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
- data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
- data/app/assets/javascripts/Core/Intersect.js +40 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
- data/app/assets/javascripts/Core/Interval.js +27 -0
- data/app/assets/javascripts/Core/Iso8601.js +46 -0
- data/app/assets/javascripts/Core/JulianDate.js +1228 -0
- data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
- data/app/assets/javascripts/Core/LeapSecond.js +158 -0
- data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
- data/app/assets/javascripts/Core/Math.js +532 -0
- data/app/assets/javascripts/Core/Matrix2.js +833 -0
- data/app/assets/javascripts/Core/Matrix3.js +1099 -0
- data/app/assets/javascripts/Core/Matrix4.js +2164 -0
- data/app/assets/javascripts/Core/MeshFilters.js +568 -0
- data/app/assets/javascripts/Core/Occluder.js +474 -0
- data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
- data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
- data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
- data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
- data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
- data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
- data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
- data/app/assets/javascripts/Core/Quaternion.js +947 -0
- data/app/assets/javascripts/Core/Queue.js +95 -0
- data/app/assets/javascripts/Core/Ray.js +64 -0
- data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
- data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
- data/app/assets/javascripts/Core/RuntimeError.js +59 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
- data/app/assets/javascripts/Core/Shapes.js +230 -0
- data/app/assets/javascripts/Core/Spherical.js +192 -0
- data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
- data/app/assets/javascripts/Core/TimeConstants.js +85 -0
- data/app/assets/javascripts/Core/TimeInterval.js +305 -0
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
- data/app/assets/javascripts/Core/TimeStandard.js +31 -0
- data/app/assets/javascripts/Core/Tipsify.js +285 -0
- data/app/assets/javascripts/Core/Transforms.js +614 -0
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
- data/app/assets/javascripts/Core/Visibility.js +38 -0
- data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
- data/app/assets/javascripts/Core/WindingOrder.js +40 -0
- data/app/assets/javascripts/Core/binarySearch.js +69 -0
- data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
- data/app/assets/javascripts/Core/clone.js +21 -0
- data/app/assets/javascripts/Core/combine.js +81 -0
- data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
- data/app/assets/javascripts/Core/createGuid.js +25 -0
- data/app/assets/javascripts/Core/defaultValue.js +22 -0
- data/app/assets/javascripts/Core/destroyObject.js +61 -0
- data/app/assets/javascripts/Core/freezeObject.js +20 -0
- data/app/assets/javascripts/Core/getImagePixels.js +46 -0
- data/app/assets/javascripts/Core/isLeapYear.js +30 -0
- data/app/assets/javascripts/Core/jsonp.js +116 -0
- data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
- data/app/assets/javascripts/Core/loadImage.js +85 -0
- data/app/assets/javascripts/Core/loadJson.js +54 -0
- data/app/assets/javascripts/Core/loadText.js +78 -0
- data/app/assets/javascripts/Core/loadXML.js +76 -0
- data/app/assets/javascripts/Core/package.json +6 -0
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
- data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
- data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
- data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
- data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
- data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
- data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
- data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
- data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
- data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
- data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
- data/app/assets/javascripts/DynamicScene/package.json +6 -0
- data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
- data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
- data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
- data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
- data/app/assets/javascripts/Renderer/Buffer.js +141 -0
- data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
- data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
- data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
- data/app/assets/javascripts/Renderer/Context.js +2805 -0
- data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
- data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
- data/app/assets/javascripts/Renderer/CullFace.js +50 -0
- data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
- data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
- data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
- data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
- data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
- data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
- data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
- data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
- data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
- data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
- data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
- data/app/assets/javascripts/Renderer/Texture.js +395 -0
- data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
- data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
- data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
- data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
- data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
- data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
- data/app/assets/javascripts/Renderer/UniformState.js +799 -0
- data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
- data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
- data/app/assets/javascripts/Renderer/package.json +6 -0
- data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
- data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
- data/app/assets/javascripts/Scene/Billboard.js +680 -0
- data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
- data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
- data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
- data/app/assets/javascripts/Scene/Camera.js +358 -0
- data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
- data/app/assets/javascripts/Scene/CameraController.js +1258 -0
- data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
- data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
- data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
- data/app/assets/javascripts/Scene/CentralBody.js +817 -0
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
- data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
- data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
- data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
- data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
- data/app/assets/javascripts/Scene/FrameState.js +86 -0
- data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
- data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
- data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/Imagery.js +85 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
- data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
- data/app/assets/javascripts/Scene/ImageryState.js +20 -0
- data/app/assets/javascripts/Scene/Label.js +706 -0
- data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
- data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
- data/app/assets/javascripts/Scene/Material.js +1177 -0
- data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
- data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
- data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
- data/app/assets/javascripts/Scene/Polygon.js +886 -0
- data/app/assets/javascripts/Scene/Polyline.js +441 -0
- data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
- data/app/assets/javascripts/Scene/Projections.js +93 -0
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
- data/app/assets/javascripts/Scene/Scene.js +632 -0
- data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
- data/app/assets/javascripts/Scene/SceneMode.js +51 -0
- data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
- data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
- data/app/assets/javascripts/Scene/SkyBox.js +231 -0
- data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
- data/app/assets/javascripts/Scene/TexturePool.js +154 -0
- data/app/assets/javascripts/Scene/Tile.js +322 -0
- data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
- data/app/assets/javascripts/Scene/TileImagery.js +36 -0
- data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
- data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
- data/app/assets/javascripts/Scene/TileState.js +19 -0
- data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
- data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
- data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
- data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
- data/app/assets/javascripts/Scene/package.json +6 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
- data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
- data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
- data/app/assets/javascripts/Shaders/Noise.js +242 -0
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
- data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
- data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
- data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
- data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
- data/app/assets/javascripts/Shaders/Ray.js +357 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
- data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
- data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
- data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
- data/app/assets/javascripts/Shaders/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
- data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
- data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
- data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
- data/app/assets/javascripts/ThirdParty/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
- data/app/assets/javascripts/ThirdParty/when.js +748 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
- data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
- data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
- data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline.css +113 -0
- data/app/assets/javascripts/Widgets/Timeline.js +629 -0
- data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
- data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
- data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
- data/app/assets/javascripts/Widgets/package.json +6 -0
- data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
- data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
- data/app/assets/javascripts/Workers/package.json +6 -0
- data/app/assets/javascripts/copyrightHeader.js +22 -0
- data/app/assets/javascripts/main.js +10 -0
- data/app/assets/stylesheets/cesium.css +4 -0
- data/app/controllers/cesium_controller.rb +4 -0
- data/app/helpers/cesium_helper.rb +2 -0
- data/app/views/cesium/index.html.erb +3 -0
- data/config/routes.rb +3 -0
- data/lib/cesium.rb +4 -0
- data/lib/cesium/engine.rb +4 -0
- data/lib/cesium/version.rb +3 -0
- data/lib/tasks/cesium_tasks.rake +4 -0
- data/test/cesium_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
- data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
- data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
- data/test/dummy/app/assets/stylesheets/application.css +12 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/requirejs.yml +10 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/functional/cesium_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/cesium_helper_test.rb +4 -0
- metadata +641 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
varying vec4 positionEC;
|
|
2
|
+
|
|
3
|
+
void main()
|
|
4
|
+
{
|
|
5
|
+
// TODO: make arbitrary ellipsoid
|
|
6
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
|
|
7
|
+
|
|
8
|
+
vec3 direction = normalize(positionEC.xyz);
|
|
9
|
+
czm_ray ray = czm_ray(vec3(0.0), direction);
|
|
10
|
+
|
|
11
|
+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
|
|
12
|
+
if (!czm_isEmpty(intersection))
|
|
13
|
+
{
|
|
14
|
+
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
|
|
15
|
+
}
|
|
16
|
+
else
|
|
17
|
+
{
|
|
18
|
+
discard;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
/*global define*/
|
|
3
|
+
define(function() {
|
|
4
|
+
"use strict";
|
|
5
|
+
return "varying vec4 positionEC;\n\
|
|
6
|
+
void main()\n\
|
|
7
|
+
{\n\
|
|
8
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();\n\
|
|
9
|
+
vec3 direction = normalize(positionEC.xyz);\n\
|
|
10
|
+
czm_ray ray = czm_ray(vec3(0.0), direction);\n\
|
|
11
|
+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);\n\
|
|
12
|
+
if (!czm_isEmpty(intersection))\n\
|
|
13
|
+
{\n\
|
|
14
|
+
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\n\
|
|
15
|
+
}\n\
|
|
16
|
+
else\n\
|
|
17
|
+
{\n\
|
|
18
|
+
discard;\n\
|
|
19
|
+
}\n\
|
|
20
|
+
}\n\
|
|
21
|
+
";
|
|
22
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
uniform vec3 u_color;
|
|
2
|
+
|
|
3
|
+
varying vec2 v_textureCoordinates;
|
|
4
|
+
|
|
5
|
+
void main()
|
|
6
|
+
{
|
|
7
|
+
// TODO: make arbitrary ellipsoid
|
|
8
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
|
|
9
|
+
vec3 direction = normalize(czm_windowToEyeCoordinates(gl_FragCoord).xyz);
|
|
10
|
+
czm_ray ray = czm_ray(vec3(0.0), direction);
|
|
11
|
+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
|
|
12
|
+
|
|
13
|
+
if (!czm_isEmpty(intersection))
|
|
14
|
+
{
|
|
15
|
+
vec3 positionEC = czm_pointAlongRay(ray, intersection.start);
|
|
16
|
+
vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;
|
|
17
|
+
|
|
18
|
+
vec3 normalMC = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), vec3(1.0)));
|
|
19
|
+
vec3 normalEC = normalize(czm_normal * normalMC);
|
|
20
|
+
|
|
21
|
+
vec3 startDayColor = u_color;
|
|
22
|
+
|
|
23
|
+
gl_FragColor = vec4(startDayColor, 1.0);
|
|
24
|
+
}
|
|
25
|
+
else
|
|
26
|
+
{
|
|
27
|
+
discard;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
/*global define*/
|
|
3
|
+
define(function() {
|
|
4
|
+
"use strict";
|
|
5
|
+
return "uniform vec3 u_color;\n\
|
|
6
|
+
varying vec2 v_textureCoordinates;\n\
|
|
7
|
+
void main()\n\
|
|
8
|
+
{\n\
|
|
9
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();\n\
|
|
10
|
+
vec3 direction = normalize(czm_windowToEyeCoordinates(gl_FragCoord).xyz);\n\
|
|
11
|
+
czm_ray ray = czm_ray(vec3(0.0), direction);\n\
|
|
12
|
+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);\n\
|
|
13
|
+
if (!czm_isEmpty(intersection))\n\
|
|
14
|
+
{\n\
|
|
15
|
+
vec3 positionEC = czm_pointAlongRay(ray, intersection.start);\n\
|
|
16
|
+
vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;\n\
|
|
17
|
+
vec3 normalMC = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), vec3(1.0)));\n\
|
|
18
|
+
vec3 normalEC = normalize(czm_normal * normalMC);\n\
|
|
19
|
+
vec3 startDayColor = u_color;\n\
|
|
20
|
+
gl_FragColor = vec4(startDayColor, 1.0);\n\
|
|
21
|
+
}\n\
|
|
22
|
+
else\n\
|
|
23
|
+
{\n\
|
|
24
|
+
discard;\n\
|
|
25
|
+
}\n\
|
|
26
|
+
}\n\
|
|
27
|
+
";
|
|
28
|
+
});
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
attribute vec3 position3D;
|
|
2
|
+
attribute vec2 textureCoordinates;
|
|
3
|
+
|
|
4
|
+
uniform float u_morphTime;
|
|
5
|
+
|
|
6
|
+
uniform vec3 u_center3D;
|
|
7
|
+
uniform mat4 u_modifiedModelView;
|
|
8
|
+
uniform vec4 u_tileExtent;
|
|
9
|
+
|
|
10
|
+
// Uniforms for 2D Mercator projection
|
|
11
|
+
uniform vec2 u_southAndNorthLatitude;
|
|
12
|
+
uniform vec3 u_southMercatorYLowAndHighAndOneOverHeight;
|
|
13
|
+
|
|
14
|
+
varying vec3 v_positionMC;
|
|
15
|
+
varying vec3 v_positionEC;
|
|
16
|
+
|
|
17
|
+
varying vec2 v_textureCoordinates;
|
|
18
|
+
|
|
19
|
+
// These functions are generated at runtime.
|
|
20
|
+
vec4 getPosition(vec3 position3DWC);
|
|
21
|
+
float get2DYPositionFraction();
|
|
22
|
+
|
|
23
|
+
vec4 getPosition3DMode(vec3 position3DWC)
|
|
24
|
+
{
|
|
25
|
+
return czm_projection * (u_modifiedModelView * vec4(position3D, 1.0));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
float get2DMercatorYPositionFraction()
|
|
29
|
+
{
|
|
30
|
+
// The width of a tile at level 11, in radians and assuming a single root tile, is
|
|
31
|
+
// 2.0 * czm_pi / pow(2.0, 11.0)
|
|
32
|
+
// We want to just linearly interpolate the 2D position from the texture coordinates
|
|
33
|
+
// when we're at this level or higher. The constant below is the expression
|
|
34
|
+
// above evaluated and then rounded up at the 4th significant digit.
|
|
35
|
+
const float maxTileWidth = 0.003068;
|
|
36
|
+
float positionFraction = textureCoordinates.y;
|
|
37
|
+
float southLatitude = u_southAndNorthLatitude.x;
|
|
38
|
+
float northLatitude = u_southAndNorthLatitude.y;
|
|
39
|
+
if (northLatitude - southLatitude > maxTileWidth)
|
|
40
|
+
{
|
|
41
|
+
float southMercatorYLow = u_southMercatorYLowAndHighAndOneOverHeight.x;
|
|
42
|
+
float southMercatorYHigh = u_southMercatorYLowAndHighAndOneOverHeight.y;
|
|
43
|
+
float oneOverMercatorHeight = u_southMercatorYLowAndHighAndOneOverHeight.z;
|
|
44
|
+
|
|
45
|
+
float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);
|
|
46
|
+
currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);
|
|
47
|
+
positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorYLow, southMercatorYHigh, oneOverMercatorHeight);
|
|
48
|
+
}
|
|
49
|
+
return positionFraction;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
float get2DGeographicYPositionFraction()
|
|
53
|
+
{
|
|
54
|
+
return textureCoordinates.y;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
vec4 getPosition2DMode(vec3 position3DWC)
|
|
58
|
+
{
|
|
59
|
+
float yPositionFraction = get2DYPositionFraction();
|
|
60
|
+
vec4 rtcPosition2D = vec4(0.0, mix(u_tileExtent.st, u_tileExtent.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);
|
|
61
|
+
return czm_projection * (u_modifiedModelView * rtcPosition2D);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
vec4 getPositionColumbusViewMode(vec3 position3DWC)
|
|
65
|
+
{
|
|
66
|
+
return getPosition2DMode(position3DWC);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
vec4 getPositionMorphingMode(vec3 position3DWC)
|
|
70
|
+
{
|
|
71
|
+
// We do not do RTC while morphing, so there is potential for jitter.
|
|
72
|
+
// This is unlikely to be noticable, though.
|
|
73
|
+
float yPositionFraction = get2DYPositionFraction();
|
|
74
|
+
vec3 position2DWC = vec3(0.0, mix(u_tileExtent.st, u_tileExtent.pq, vec2(textureCoordinates.x, yPositionFraction)));
|
|
75
|
+
vec4 morphPosition = czm_columbusViewMorph(position2DWC, position3DWC, u_morphTime);
|
|
76
|
+
return czm_modelViewProjection * morphPosition;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void main()
|
|
80
|
+
{
|
|
81
|
+
vec3 position3DWC = position3D + u_center3D;
|
|
82
|
+
|
|
83
|
+
gl_Position = getPosition(position3DWC);
|
|
84
|
+
|
|
85
|
+
v_positionEC = (czm_modelView * vec4(position3DWC, 1.0)).xyz;
|
|
86
|
+
v_positionMC = position3DWC; // position in model coordinates
|
|
87
|
+
v_textureCoordinates = textureCoordinates;
|
|
88
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
/*global define*/
|
|
3
|
+
define(function() {
|
|
4
|
+
"use strict";
|
|
5
|
+
return "attribute vec3 position3D;\n\
|
|
6
|
+
attribute vec2 textureCoordinates;\n\
|
|
7
|
+
uniform float u_morphTime;\n\
|
|
8
|
+
uniform vec3 u_center3D;\n\
|
|
9
|
+
uniform mat4 u_modifiedModelView;\n\
|
|
10
|
+
uniform vec4 u_tileExtent;\n\
|
|
11
|
+
uniform vec2 u_southAndNorthLatitude;\n\
|
|
12
|
+
uniform vec3 u_southMercatorYLowAndHighAndOneOverHeight;\n\
|
|
13
|
+
varying vec3 v_positionMC;\n\
|
|
14
|
+
varying vec3 v_positionEC;\n\
|
|
15
|
+
varying vec2 v_textureCoordinates;\n\
|
|
16
|
+
vec4 getPosition(vec3 position3DWC);\n\
|
|
17
|
+
float get2DYPositionFraction();\n\
|
|
18
|
+
vec4 getPosition3DMode(vec3 position3DWC)\n\
|
|
19
|
+
{\n\
|
|
20
|
+
return czm_projection * (u_modifiedModelView * vec4(position3D, 1.0));\n\
|
|
21
|
+
}\n\
|
|
22
|
+
float get2DMercatorYPositionFraction()\n\
|
|
23
|
+
{\n\
|
|
24
|
+
const float maxTileWidth = 0.003068;\n\
|
|
25
|
+
float positionFraction = textureCoordinates.y;\n\
|
|
26
|
+
float southLatitude = u_southAndNorthLatitude.x;\n\
|
|
27
|
+
float northLatitude = u_southAndNorthLatitude.y;\n\
|
|
28
|
+
if (northLatitude - southLatitude > maxTileWidth)\n\
|
|
29
|
+
{\n\
|
|
30
|
+
float southMercatorYLow = u_southMercatorYLowAndHighAndOneOverHeight.x;\n\
|
|
31
|
+
float southMercatorYHigh = u_southMercatorYLowAndHighAndOneOverHeight.y;\n\
|
|
32
|
+
float oneOverMercatorHeight = u_southMercatorYLowAndHighAndOneOverHeight.z;\n\
|
|
33
|
+
float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);\n\
|
|
34
|
+
currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);\n\
|
|
35
|
+
positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorYLow, southMercatorYHigh, oneOverMercatorHeight);\n\
|
|
36
|
+
}\n\
|
|
37
|
+
return positionFraction;\n\
|
|
38
|
+
}\n\
|
|
39
|
+
float get2DGeographicYPositionFraction()\n\
|
|
40
|
+
{\n\
|
|
41
|
+
return textureCoordinates.y;\n\
|
|
42
|
+
}\n\
|
|
43
|
+
vec4 getPosition2DMode(vec3 position3DWC)\n\
|
|
44
|
+
{\n\
|
|
45
|
+
float yPositionFraction = get2DYPositionFraction();\n\
|
|
46
|
+
vec4 rtcPosition2D = vec4(0.0, mix(u_tileExtent.st, u_tileExtent.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\n\
|
|
47
|
+
return czm_projection * (u_modifiedModelView * rtcPosition2D);\n\
|
|
48
|
+
}\n\
|
|
49
|
+
vec4 getPositionColumbusViewMode(vec3 position3DWC)\n\
|
|
50
|
+
{\n\
|
|
51
|
+
return getPosition2DMode(position3DWC);\n\
|
|
52
|
+
}\n\
|
|
53
|
+
vec4 getPositionMorphingMode(vec3 position3DWC)\n\
|
|
54
|
+
{\n\
|
|
55
|
+
float yPositionFraction = get2DYPositionFraction();\n\
|
|
56
|
+
vec3 position2DWC = vec3(0.0, mix(u_tileExtent.st, u_tileExtent.pq, vec2(textureCoordinates.x, yPositionFraction)));\n\
|
|
57
|
+
vec4 morphPosition = czm_columbusViewMorph(position2DWC, position3DWC, u_morphTime);\n\
|
|
58
|
+
return czm_modelViewProjection * morphPosition;\n\
|
|
59
|
+
}\n\
|
|
60
|
+
void main()\n\
|
|
61
|
+
{\n\
|
|
62
|
+
vec3 position3DWC = position3D + u_center3D;\n\
|
|
63
|
+
gl_Position = getPosition(position3DWC);\n\
|
|
64
|
+
v_positionEC = (czm_modelView * vec4(position3DWC, 1.0)).xyz;\n\
|
|
65
|
+
v_positionMC = position3DWC;\n\
|
|
66
|
+
v_textureCoordinates = textureCoordinates;\n\
|
|
67
|
+
}\n\
|
|
68
|
+
";
|
|
69
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
/*global define*/
|
|
3
|
+
define(function() {
|
|
4
|
+
"use strict";
|
|
5
|
+
return "attribute vec4 position;\n\
|
|
6
|
+
varying vec4 positionEC;\n\
|
|
7
|
+
void main()\n\
|
|
8
|
+
{\n\
|
|
9
|
+
positionEC = czm_modelView * position;\n\
|
|
10
|
+
gl_Position = czm_projection * positionEC;\n\
|
|
11
|
+
}\n\
|
|
12
|
+
";
|
|
13
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
attribute vec4 position;
|
|
2
|
+
|
|
3
|
+
varying vec2 v_textureCoordinates;
|
|
4
|
+
|
|
5
|
+
void main()
|
|
6
|
+
{
|
|
7
|
+
float x = (position.x - czm_viewport.x) / czm_viewport.z;
|
|
8
|
+
float y = (position.y - czm_viewport.y) / czm_viewport.w;
|
|
9
|
+
v_textureCoordinates = vec2(x, y);
|
|
10
|
+
|
|
11
|
+
gl_Position = czm_viewportOrthographic * position;
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
/*global define*/
|
|
3
|
+
define(function() {
|
|
4
|
+
"use strict";
|
|
5
|
+
return "attribute vec4 position;\n\
|
|
6
|
+
varying vec2 v_textureCoordinates;\n\
|
|
7
|
+
void main()\n\
|
|
8
|
+
{\n\
|
|
9
|
+
float x = (position.x - czm_viewport.x) / czm_viewport.z;\n\
|
|
10
|
+
float y = (position.y - czm_viewport.y) / czm_viewport.w;\n\
|
|
11
|
+
v_textureCoordinates = vec2(x, y);\n\
|
|
12
|
+
gl_Position = czm_viewportOrthographic * position;\n\
|
|
13
|
+
}\n\
|
|
14
|
+
";
|
|
15
|
+
});
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
#ifdef GL_OES_standard_derivatives
|
|
2
|
+
#extension GL_OES_standard_derivatives : enable
|
|
3
|
+
#endif
|
|
4
|
+
|
|
5
|
+
uniform float u_sensorRadius;
|
|
6
|
+
uniform float u_outerHalfAngle;
|
|
7
|
+
uniform float u_innerHalfAngle;
|
|
8
|
+
uniform float u_maximumClockAngle;
|
|
9
|
+
uniform float u_minimumClockAngle;
|
|
10
|
+
uniform bool u_showIntersection;
|
|
11
|
+
uniform vec4 u_pickColor;
|
|
12
|
+
|
|
13
|
+
varying vec3 v_positionEC;
|
|
14
|
+
varying vec3 v_sensorVertexWC;
|
|
15
|
+
varying vec3 v_sensorVertexEC;
|
|
16
|
+
varying vec3 v_sensorAxisEC;
|
|
17
|
+
|
|
18
|
+
#ifndef RENDER_FOR_PICK
|
|
19
|
+
|
|
20
|
+
czm_materialInput getMaterialInput(float sensorRadius, vec3 pointEC, vec3 normalEC)
|
|
21
|
+
{
|
|
22
|
+
czm_materialInput materialInput;
|
|
23
|
+
|
|
24
|
+
vec3 pointMC = (czm_inverseModelView * vec4(pointEC, 1.0)).xyz;
|
|
25
|
+
materialInput.positionToEyeEC = -v_positionEC;
|
|
26
|
+
materialInput.normalEC = normalEC;
|
|
27
|
+
|
|
28
|
+
materialInput.st = sensor2dTextureCoordinates(sensorRadius, pointMC);
|
|
29
|
+
materialInput.str = pointMC / sensorRadius;
|
|
30
|
+
materialInput.positionMC = pointMC;
|
|
31
|
+
|
|
32
|
+
return materialInput;
|
|
33
|
+
}
|
|
34
|
+
vec4 getOuterColor(float sensorRadius, vec3 pointEC, vec3 normalEC)
|
|
35
|
+
{
|
|
36
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);
|
|
37
|
+
czm_material material = czm_getOuterMaterial(materialInput);
|
|
38
|
+
|
|
39
|
+
//Final
|
|
40
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);
|
|
41
|
+
|
|
42
|
+
return czm_phong(positionToEyeEC, material);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
vec4 getInnerColor(float sensorRadius, vec3 pointEC, vec3 normalEC)
|
|
46
|
+
{
|
|
47
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);
|
|
48
|
+
czm_material material = czm_getInnerMaterial(materialInput);
|
|
49
|
+
|
|
50
|
+
//Final
|
|
51
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);
|
|
52
|
+
|
|
53
|
+
return czm_phong(positionToEyeEC, material);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
vec4 getCapColor(float sensorRadius, vec3 pointEC, vec3 normalEC)
|
|
57
|
+
{
|
|
58
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);
|
|
59
|
+
czm_material material = czm_getCapMaterial(materialInput);
|
|
60
|
+
|
|
61
|
+
//Final
|
|
62
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);
|
|
63
|
+
|
|
64
|
+
return czm_phong(positionToEyeEC, material);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
vec4 getSilhouetteColor(float sensorRadius, vec3 pointEC, vec3 normalEC)
|
|
68
|
+
{
|
|
69
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);
|
|
70
|
+
czm_material material = czm_getSilhouetteMaterial(materialInput);
|
|
71
|
+
|
|
72
|
+
//Final
|
|
73
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);
|
|
74
|
+
|
|
75
|
+
return czm_phong(positionToEyeEC, material);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
#endif
|
|
79
|
+
|
|
80
|
+
bool czm_isOnOrNear(float d, czm_raySegment interval, float epsilon)
|
|
81
|
+
{
|
|
82
|
+
bool answer = (czm_equalsEpsilon(d, interval.start, epsilon) || czm_equalsEpsilon(d, interval.stop, epsilon));
|
|
83
|
+
return answer;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
bool czm_isOnOrNear(float d, czm_raySegmentCollection coneIntervals, float epsilon)
|
|
87
|
+
{
|
|
88
|
+
// Can have a maximum of two ray segments from cone intersection.
|
|
89
|
+
bool answer = (coneIntervals.count > 0 && (czm_isOnOrNear(d, coneIntervals.intervals[0], epsilon)))
|
|
90
|
+
|| (coneIntervals.count > 1 && (czm_isOnOrNear(d, coneIntervals.intervals[1], epsilon)));
|
|
91
|
+
return answer;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
bool czm_isOnOrNearSensor(float d, czm_raySegmentCollection outerIntervals, czm_raySegmentCollection innerIntervals, float epsilon)
|
|
95
|
+
{
|
|
96
|
+
bool answer = czm_isOnOrNear(d, outerIntervals, epsilon) || czm_isOnOrNear(d, innerIntervals, epsilon);
|
|
97
|
+
return answer;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
bool ellipsoidSensorIntersection(czm_raySegment sphereInterval,
|
|
101
|
+
czm_raySegmentCollection outerIntervals, czm_raySegmentCollection innerIntervals,
|
|
102
|
+
czm_raySegmentCollection clockIntervals,
|
|
103
|
+
czm_raySegment ellipsoidInterval, czm_raySegment silhouetteHalfspaceInterval, czm_raySegmentCollection solid)
|
|
104
|
+
{
|
|
105
|
+
if (czm_isEmpty(ellipsoidInterval))
|
|
106
|
+
{
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
float t = ellipsoidInterval.start;
|
|
111
|
+
|
|
112
|
+
#ifdef GL_OES_standard_derivatives
|
|
113
|
+
// TODO: This seems to be too aggressive in some areas, and too conservative in others
|
|
114
|
+
float epsilon = max(abs(dFdx(t)), abs(dFdy(t)));
|
|
115
|
+
#else
|
|
116
|
+
// TODO: Don't hardcode this.
|
|
117
|
+
float epsilon = t / 500.0;
|
|
118
|
+
#endif
|
|
119
|
+
|
|
120
|
+
float width = 2.0; // TODO: Expose as a uniform
|
|
121
|
+
epsilon *= width;
|
|
122
|
+
|
|
123
|
+
// TODO: Rework this once the ray segments have associated boundary surfaces with their start/stop values.
|
|
124
|
+
if (solid.count > 0)
|
|
125
|
+
{
|
|
126
|
+
float d = solid.intervals[0].start;
|
|
127
|
+
if (d == ellipsoidInterval.start
|
|
128
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)
|
|
129
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon)
|
|
130
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon)
|
|
131
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;
|
|
132
|
+
d = solid.intervals[0].stop;
|
|
133
|
+
if (d == ellipsoidInterval.start
|
|
134
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)
|
|
135
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon)
|
|
136
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon)
|
|
137
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;
|
|
138
|
+
|
|
139
|
+
if (solid.count > 1)
|
|
140
|
+
{
|
|
141
|
+
d = solid.intervals[1].start;
|
|
142
|
+
if (d == ellipsoidInterval.start
|
|
143
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)
|
|
144
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon)
|
|
145
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon)
|
|
146
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;
|
|
147
|
+
d = solid.intervals[1].stop;
|
|
148
|
+
if (d == ellipsoidInterval.start
|
|
149
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)
|
|
150
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon)
|
|
151
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon)
|
|
152
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
else
|
|
158
|
+
{
|
|
159
|
+
false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
vec4 shade(
|
|
164
|
+
czm_ray ray,
|
|
165
|
+
float nearestRayTime,
|
|
166
|
+
czm_sphere sphere,
|
|
167
|
+
czm_cone outerCone,
|
|
168
|
+
czm_cone innerCone,
|
|
169
|
+
czm_halfspace maxClock,
|
|
170
|
+
czm_halfspace minClock,
|
|
171
|
+
czm_ellipsoidSilhouetteCone silhouetteCone,
|
|
172
|
+
czm_ellipsoidSilhouetteHalfspace silhouetteHalfspace,
|
|
173
|
+
czm_raySegment sphereInterval,
|
|
174
|
+
czm_raySegmentCollection outerConeInterval,
|
|
175
|
+
czm_raySegmentCollection innerConeInterval,
|
|
176
|
+
czm_raySegment maxClockInterval,
|
|
177
|
+
czm_raySegment minClockInterval,
|
|
178
|
+
czm_raySegmentCollection clockIntervals,
|
|
179
|
+
czm_raySegment silhouetteConeInterval,
|
|
180
|
+
czm_raySegment silhouetteHalfspaceInterval,
|
|
181
|
+
czm_raySegment ellipsoidInterval,
|
|
182
|
+
czm_raySegmentCollection intervals)
|
|
183
|
+
{
|
|
184
|
+
#ifdef RENDER_FOR_PICK
|
|
185
|
+
return u_pickColor;
|
|
186
|
+
#else
|
|
187
|
+
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);
|
|
188
|
+
|
|
189
|
+
// Visualization TODO: Segment stop surface can be used to determine which pixels to "fill"
|
|
190
|
+
// in order to indicate projection onto the ellipsoid surface.
|
|
191
|
+
|
|
192
|
+
if (u_showIntersection && ellipsoidSensorIntersection(sphereInterval,
|
|
193
|
+
outerConeInterval, innerConeInterval, clockIntervals,
|
|
194
|
+
ellipsoidInterval, silhouetteHalfspaceInterval, intervals))
|
|
195
|
+
{
|
|
196
|
+
return getIntersectionColor(u_sensorRadius, nearestPoint);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
vec3 positionToEyeEC = -ray.direction; // normalized position-to-eye vector in eye coordinates
|
|
200
|
+
vec3 czm_sunDirectionEC = czm_sunDirectionEC; // normalized position-to-sun vector in eye coordinates
|
|
201
|
+
|
|
202
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)
|
|
203
|
+
{
|
|
204
|
+
if (i < outerConeInterval.count &&
|
|
205
|
+
((nearestRayTime == outerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume
|
|
206
|
+
(nearestRayTime == outerConeInterval.intervals[i].stop))) // Viewer inside
|
|
207
|
+
{
|
|
208
|
+
// Shade outer cone
|
|
209
|
+
vec3 normal = czm_coneNormal(outerCone, nearestPoint);
|
|
210
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
211
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)
|
|
216
|
+
{
|
|
217
|
+
if (i < innerConeInterval.count &&
|
|
218
|
+
((nearestRayTime == innerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume
|
|
219
|
+
(nearestRayTime == innerConeInterval.intervals[i].stop))) // Viewer inside
|
|
220
|
+
{
|
|
221
|
+
// Shade inner cone
|
|
222
|
+
vec3 normal = -czm_coneNormal(innerCone, nearestPoint);
|
|
223
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
224
|
+
return getInnerColor(u_sensorRadius, nearestPoint, normal);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if ((nearestRayTime == sphereInterval.start) || // Viewer outside sensor CSG volume
|
|
229
|
+
(nearestRayTime == sphereInterval.stop)) // Viewer inside
|
|
230
|
+
{
|
|
231
|
+
// Shade top cap
|
|
232
|
+
vec3 normal = czm_sphereNormal(sphere, nearestPoint);
|
|
233
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
234
|
+
return getCapColor(u_sensorRadius, nearestPoint, normal);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if ((nearestRayTime == maxClockInterval.start) || // Viewer outside sensor CSG volume
|
|
238
|
+
(nearestRayTime == maxClockInterval.stop)) // Viewer inside
|
|
239
|
+
{
|
|
240
|
+
// Shade top cap
|
|
241
|
+
vec3 normal = maxClock.normal;
|
|
242
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
243
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if ((nearestRayTime == minClockInterval.start) || // Viewer outside sensor CSG volume
|
|
247
|
+
(nearestRayTime == minClockInterval.stop)) // Viewer inside
|
|
248
|
+
{
|
|
249
|
+
// Shade top cap
|
|
250
|
+
vec3 normal = minClock.normal;
|
|
251
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
252
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if ((nearestRayTime == silhouetteConeInterval.start) || // Viewer outside sensor CSG volume
|
|
256
|
+
(nearestRayTime == silhouetteConeInterval.stop)) // Viewer inside
|
|
257
|
+
{
|
|
258
|
+
vec3 normal = czm_ellipsoidSilhouetteConeNormal(silhouetteCone, nearestPoint); // Normal is already inverted.
|
|
259
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
260
|
+
return getSilhouetteColor(u_sensorRadius, nearestPoint, normal);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Should never happen
|
|
264
|
+
return vec4(1.0, 0.0, 0.0, 1.0);
|
|
265
|
+
#endif
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
vec4 shade(
|
|
269
|
+
czm_ray ray,
|
|
270
|
+
float nearestRayTime,
|
|
271
|
+
czm_sphere sphere,
|
|
272
|
+
czm_cone outerCone,
|
|
273
|
+
czm_cone innerCone,
|
|
274
|
+
czm_halfspace maxClock,
|
|
275
|
+
czm_halfspace minClock,
|
|
276
|
+
czm_raySegment sphereInterval,
|
|
277
|
+
czm_raySegmentCollection outerConeInterval,
|
|
278
|
+
czm_raySegmentCollection innerConeInterval,
|
|
279
|
+
czm_raySegment maxClockInterval,
|
|
280
|
+
czm_raySegment minClockInterval,
|
|
281
|
+
czm_raySegmentCollection intervals)
|
|
282
|
+
{
|
|
283
|
+
#ifdef RENDER_FOR_PICK
|
|
284
|
+
return u_pickColor;
|
|
285
|
+
#else
|
|
286
|
+
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);
|
|
287
|
+
|
|
288
|
+
vec3 positionToEyeEC = -ray.direction; // normalized position-to-eye vector in eye coordinates
|
|
289
|
+
|
|
290
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)
|
|
291
|
+
{
|
|
292
|
+
if (i < outerConeInterval.count &&
|
|
293
|
+
((nearestRayTime == outerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume
|
|
294
|
+
(nearestRayTime == outerConeInterval.intervals[i].stop))) // Viewer inside
|
|
295
|
+
{
|
|
296
|
+
// Shade outer cone
|
|
297
|
+
vec3 normal = czm_coneNormal(outerCone, nearestPoint);
|
|
298
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
299
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)
|
|
304
|
+
{
|
|
305
|
+
if (i < innerConeInterval.count &&
|
|
306
|
+
((nearestRayTime == innerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume
|
|
307
|
+
(nearestRayTime == innerConeInterval.intervals[i].stop))) // Viewer inside
|
|
308
|
+
{
|
|
309
|
+
// Shade inner cone
|
|
310
|
+
vec3 normal = -czm_coneNormal(innerCone, nearestPoint);
|
|
311
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
312
|
+
return getInnerColor(u_sensorRadius, nearestPoint, normal);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if ((nearestRayTime == sphereInterval.start) || // Viewer outside sensor CSG volume
|
|
317
|
+
(nearestRayTime == sphereInterval.stop)) // Viewer inside
|
|
318
|
+
{
|
|
319
|
+
// Shade top cap
|
|
320
|
+
vec3 normal = czm_sphereNormal(sphere, nearestPoint);
|
|
321
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
322
|
+
return getCapColor(u_sensorRadius, nearestPoint, normal);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
if ((nearestRayTime == maxClockInterval.start) || // Viewer outside sensor CSG volume
|
|
326
|
+
(nearestRayTime == maxClockInterval.stop)) // Viewer inside
|
|
327
|
+
{
|
|
328
|
+
// Shade top cap
|
|
329
|
+
vec3 normal = maxClock.normal;
|
|
330
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
331
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if ((nearestRayTime == minClockInterval.start) || // Viewer outside sensor CSG volume
|
|
335
|
+
(nearestRayTime == minClockInterval.stop)) // Viewer inside
|
|
336
|
+
{
|
|
337
|
+
// Shade top cap
|
|
338
|
+
vec3 normal = minClock.normal;
|
|
339
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer
|
|
340
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Should never happen
|
|
344
|
+
return vec4(1.0, 0.0, 0.0, 1.0);
|
|
345
|
+
#endif
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
void main()
|
|
349
|
+
{
|
|
350
|
+
czm_ray ray = czm_ray(vec3(0.0), normalize(v_positionEC)); // Ray from eye to fragment in eye coordinates
|
|
351
|
+
|
|
352
|
+
// Determine the sensor primitive intervals.
|
|
353
|
+
|
|
354
|
+
czm_sphere sphere = czm_sphere(v_sensorVertexEC, u_sensorRadius);
|
|
355
|
+
czm_raySegment sphereInterval = czm_raySphereIntersectionInterval(ray, sphere);
|
|
356
|
+
if (czm_isEmpty(sphereInterval))
|
|
357
|
+
{
|
|
358
|
+
discard;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
vec3 coneAxisEC = normalize(v_sensorAxisEC);
|
|
362
|
+
|
|
363
|
+
czm_cone outerCone = czm_coneNew(v_sensorVertexEC, coneAxisEC, u_outerHalfAngle);
|
|
364
|
+
czm_raySegmentCollection outerConeInterval = czm_rayConeIntersectionInterval(ray, outerCone);
|
|
365
|
+
if (outerConeInterval.count == 0)
|
|
366
|
+
{
|
|
367
|
+
discard;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
czm_cone innerCone = czm_coneNew(v_sensorVertexEC, coneAxisEC, u_innerHalfAngle);
|
|
371
|
+
czm_raySegmentCollection innerConeInterval = czm_rayConeIntersectionInterval(ray, innerCone);
|
|
372
|
+
|
|
373
|
+
// Build up the CSG representation of the sensor.
|
|
374
|
+
czm_raySegmentCollection difference = (innerConeInterval.count == 0) ? outerConeInterval : czm_subtraction(outerConeInterval, innerConeInterval);
|
|
375
|
+
if (difference.count == 0)
|
|
376
|
+
{
|
|
377
|
+
discard;
|
|
378
|
+
}
|
|
379
|
+
czm_raySegmentCollection capped = czm_intersection(difference, sphereInterval);
|
|
380
|
+
if (capped.count == 0)
|
|
381
|
+
{
|
|
382
|
+
discard;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
vec3 maxNormal = normalize((czm_modelView * vec4(-sin(u_maximumClockAngle), cos(u_maximumClockAngle), 0.0, 0.0)).xyz);
|
|
386
|
+
czm_halfspace maxClock = czm_halfspace(v_sensorVertexEC, maxNormal);
|
|
387
|
+
czm_raySegment maxClockInterval = czm_rayHalfspaceIntersectionInterval(ray, maxClock);
|
|
388
|
+
|
|
389
|
+
vec3 minNormal = normalize((czm_modelView * vec4(sin(u_minimumClockAngle), -cos(u_minimumClockAngle), 0.0, 0.0)).xyz);
|
|
390
|
+
czm_halfspace minClock = czm_halfspace(v_sensorVertexEC, minNormal);
|
|
391
|
+
czm_raySegment minClockInterval = czm_rayHalfspaceIntersectionInterval(ray, minClock);
|
|
392
|
+
|
|
393
|
+
czm_raySegmentCollection clockIntervals = ((u_maximumClockAngle - u_minimumClockAngle) > czm_pi)
|
|
394
|
+
? (czm_isEmpty(maxClockInterval)
|
|
395
|
+
? (czm_isEmpty(minClockInterval) ? czm_raySegmentCollectionNew() : czm_raySegmentCollectionNew(minClockInterval))
|
|
396
|
+
: (czm_isEmpty(minClockInterval) ? czm_raySegmentCollectionNew(maxClockInterval) : czm_union(maxClockInterval, minClockInterval)))
|
|
397
|
+
: ((czm_isEmpty(maxClockInterval) || czm_isEmpty(minClockInterval)) ? czm_raySegmentCollectionNew() : czm_raySegmentCollectionNew(czm_intersection(maxClockInterval, minClockInterval)));
|
|
398
|
+
|
|
399
|
+
czm_raySegmentCollection sensor = (clockIntervals.count == 0) ? czm_raySegmentCollectionNew() : czm_intersection(capped, clockIntervals);
|
|
400
|
+
if (sensor.count == 0)
|
|
401
|
+
{
|
|
402
|
+
discard;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Determine the obstruction primitive intervals.
|
|
406
|
+
|
|
407
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
|
|
408
|
+
|
|
409
|
+
czm_ellipsoidSilhouetteCone silhouetteCone = czm_ellipsoidSilhouetteConeNew(ellipsoid, v_sensorVertexEC);
|
|
410
|
+
czm_raySegment silhouetteConeInterval = czm_rayEllipsoidSilhouetteConeIntersectionInterval(ray, silhouetteCone);
|
|
411
|
+
|
|
412
|
+
if (czm_isEmpty(silhouetteConeInterval))
|
|
413
|
+
{
|
|
414
|
+
gl_FragColor = shade(ray, sensor.intervals[0].start,
|
|
415
|
+
sphere, outerCone, innerCone, maxClock, minClock,
|
|
416
|
+
sphereInterval, outerConeInterval, innerConeInterval, maxClockInterval, minClockInterval,
|
|
417
|
+
sensor);
|
|
418
|
+
}
|
|
419
|
+
else
|
|
420
|
+
{
|
|
421
|
+
czm_ellipsoidSilhouetteHalfspace silhouetteHalfspace = czm_ellipsoidSilhouetteHalfspaceNew(ellipsoid, v_sensorVertexEC);
|
|
422
|
+
czm_raySegment silhouetteHalfspaceInterval = czm_rayEllipsoidSilhouetteHalfspaceIntersectionInterval(ray, silhouetteHalfspace);
|
|
423
|
+
|
|
424
|
+
// Build up the CSG representation of the composite.
|
|
425
|
+
czm_raySegment temp = (czm_isEmpty(silhouetteHalfspaceInterval)) ? czm_emptyRaySegment : czm_intersection(silhouetteConeInterval, silhouetteHalfspaceInterval);
|
|
426
|
+
czm_raySegmentCollection stuff = (czm_isEmpty(temp)) ? sensor : czm_subtraction(sensor, temp);
|
|
427
|
+
if (stuff.count == 0)
|
|
428
|
+
{
|
|
429
|
+
discard;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
czm_raySegment ellipsoidInterval = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
|
|
433
|
+
czm_raySegmentCollection result = (czm_isEmpty(ellipsoidInterval)) ? stuff : czm_subtraction(stuff, ellipsoidInterval);
|
|
434
|
+
|
|
435
|
+
if ((result.count == 0)
|
|
436
|
+
|| (!czm_isEmpty(ellipsoidInterval) && (result.intervals[0].start > ellipsoidInterval.start))) // Fails depth test with ellipsoid
|
|
437
|
+
{
|
|
438
|
+
discard;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
gl_FragColor = shade(ray, result.intervals[0].start,
|
|
442
|
+
sphere, outerCone, innerCone, maxClock, minClock,
|
|
443
|
+
silhouetteCone, silhouetteHalfspace,
|
|
444
|
+
sphereInterval, outerConeInterval, innerConeInterval, maxClockInterval, minClockInterval, clockIntervals,
|
|
445
|
+
silhouetteConeInterval, silhouetteHalfspaceInterval, ellipsoidInterval,
|
|
446
|
+
result);
|
|
447
|
+
}
|
|
448
|
+
}
|