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,474 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'./defaultValue',
|
|
4
|
+
'./DeveloperError',
|
|
5
|
+
'./Math',
|
|
6
|
+
'./Cartesian3',
|
|
7
|
+
'./Visibility',
|
|
8
|
+
'./Ellipsoid',
|
|
9
|
+
'./BoundingSphere'
|
|
10
|
+
], function(
|
|
11
|
+
defaultValue,
|
|
12
|
+
DeveloperError,
|
|
13
|
+
CesiumMath,
|
|
14
|
+
Cartesian3,
|
|
15
|
+
Visibility,
|
|
16
|
+
Ellipsoid,
|
|
17
|
+
BoundingSphere) {
|
|
18
|
+
"use strict";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Creates an Occluder derived from an object's position and radius, as well as the camera position.
|
|
22
|
+
* The occluder can be used to determine whether or not other objects are visible or hidden behind the
|
|
23
|
+
* visible horizon defined by the occluder and camera position.
|
|
24
|
+
*
|
|
25
|
+
* @alias Occluder
|
|
26
|
+
*
|
|
27
|
+
* @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.
|
|
28
|
+
* @param {Cartesian3} cameraPosition The coordinate of the viewer/camera.
|
|
29
|
+
*
|
|
30
|
+
* @exception {DeveloperError} <code>occluderBoundingSphere</code> is required.
|
|
31
|
+
* @exception {DeveloperError} <code>cameraPosition</code> is required.
|
|
32
|
+
*
|
|
33
|
+
* @constructor
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Construct an occluder one unit away from the origin with a radius of one.
|
|
37
|
+
* var cameraPosition = new Cartesian3.ZERO;
|
|
38
|
+
* var occluderBoundingSphere = new BoundingSphere(new Cartesian3(0, 0, -1), 1);
|
|
39
|
+
* var occluder = new Occluder(occluderBoundingSphere, cameraPosition);
|
|
40
|
+
*/
|
|
41
|
+
var Occluder = function(occluderBoundingSphere, cameraPosition) {
|
|
42
|
+
if (!occluderBoundingSphere) {
|
|
43
|
+
throw new DeveloperError('occluderBoundingSphere is required.');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!cameraPosition) {
|
|
47
|
+
throw new DeveloperError('camera position is required.');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this._occluderPosition = occluderBoundingSphere.center.clone();
|
|
51
|
+
this._occluderRadius = occluderBoundingSphere.radius;
|
|
52
|
+
|
|
53
|
+
this._horizonDistance = 0.0;
|
|
54
|
+
this._horizonPlaneNormal = undefined;
|
|
55
|
+
this._horizonPlanePosition = undefined;
|
|
56
|
+
this._cameraPosition = undefined;
|
|
57
|
+
|
|
58
|
+
// setCameraPosition fills in the above values
|
|
59
|
+
this.setCameraPosition(cameraPosition);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Returns the position of the occluder.
|
|
64
|
+
*
|
|
65
|
+
* @memberof Occluder
|
|
66
|
+
*
|
|
67
|
+
* @return {Cartesian3} The position of the occluder.
|
|
68
|
+
*/
|
|
69
|
+
Occluder.prototype.getPosition = function() {
|
|
70
|
+
return this._occluderPosition;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns the radius of the occluder.
|
|
75
|
+
*
|
|
76
|
+
* @return {Number} The radius of the occluder.
|
|
77
|
+
*/
|
|
78
|
+
Occluder.prototype.getRadius = function() {
|
|
79
|
+
return this._occluderRadius;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Sets the position of the camera.
|
|
84
|
+
*
|
|
85
|
+
* @param {Cartesian3} cameraPosition The new position of the camera.
|
|
86
|
+
*/
|
|
87
|
+
Occluder.prototype.setCameraPosition = function(cameraPosition) {
|
|
88
|
+
cameraPosition = Cartesian3.clone(cameraPosition);
|
|
89
|
+
|
|
90
|
+
var cameraToOccluderVec = this._occluderPosition.subtract(cameraPosition);
|
|
91
|
+
var invCameraToOccluderDistance = cameraToOccluderVec.magnitudeSquared();
|
|
92
|
+
var occluderRadiusSqrd = this._occluderRadius * this._occluderRadius;
|
|
93
|
+
|
|
94
|
+
var horizonDistance;
|
|
95
|
+
var horizonPlaneNormal;
|
|
96
|
+
var horizonPlanePosition;
|
|
97
|
+
if (invCameraToOccluderDistance > occluderRadiusSqrd) {
|
|
98
|
+
horizonDistance = Math.sqrt(invCameraToOccluderDistance - occluderRadiusSqrd);
|
|
99
|
+
invCameraToOccluderDistance = 1.0 / Math.sqrt(invCameraToOccluderDistance);
|
|
100
|
+
horizonPlaneNormal = cameraToOccluderVec.multiplyByScalar(invCameraToOccluderDistance);
|
|
101
|
+
var nearPlaneDistance = horizonDistance * horizonDistance * invCameraToOccluderDistance;
|
|
102
|
+
horizonPlanePosition = cameraPosition.add(horizonPlaneNormal.multiplyByScalar(nearPlaneDistance));
|
|
103
|
+
} else {
|
|
104
|
+
horizonDistance = Number.MAX_VALUE;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
this._horizonDistance = horizonDistance;
|
|
108
|
+
this._horizonPlaneNormal = horizonPlaneNormal;
|
|
109
|
+
this._horizonPlanePosition = horizonPlanePosition;
|
|
110
|
+
this._cameraPosition = cameraPosition;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
var tempVecScratch = new Cartesian3(0.0, 0.0, 0.0);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Determines whether or not a point, the <code>occludee</code>, is hidden from view by the occluder.
|
|
117
|
+
*
|
|
118
|
+
* @memberof Occluder
|
|
119
|
+
*
|
|
120
|
+
* @param {Cartesian3} occludee The point surrounding the occludee object.
|
|
121
|
+
*
|
|
122
|
+
* @return {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* var cameraPosition = new Cartesian3(0, 0, 0);
|
|
126
|
+
* var littleSphere = new BoundingSphere(new Cartesian3(0, 0, -1), 0.25);
|
|
127
|
+
* var occluder = new Occluder(littleSphere, cameraPosition);
|
|
128
|
+
* var point = new Cartesian3(0, 0, -3);
|
|
129
|
+
* occluder.isPointVisible(point); //returns true
|
|
130
|
+
*
|
|
131
|
+
* @see Occluder#getVisibility
|
|
132
|
+
*/
|
|
133
|
+
Occluder.prototype.isPointVisible = function(occludee) {
|
|
134
|
+
if (this._horizonDistance !== Number.MAX_VALUE) {
|
|
135
|
+
var tempVec = Cartesian3.subtract(occludee, this._occluderPosition, tempVecScratch);
|
|
136
|
+
var temp = this._occluderRadius;
|
|
137
|
+
temp = tempVec.magnitudeSquared() - (temp * temp);
|
|
138
|
+
if (temp > 0.0) {
|
|
139
|
+
temp = Math.sqrt(temp) + this._horizonDistance;
|
|
140
|
+
tempVec = Cartesian3.subtract(occludee, this._cameraPosition, tempVec);
|
|
141
|
+
return temp * temp > tempVec.magnitudeSquared();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Determines whether or not a sphere, the <code>occludee</code>, is hidden from view by the occluder.
|
|
149
|
+
*
|
|
150
|
+
* @memberof Occluder
|
|
151
|
+
*
|
|
152
|
+
* @param {BoundingSphere} occludee The bounding sphere surrounding the occludee object.
|
|
153
|
+
*
|
|
154
|
+
* @return {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* var cameraPosition = new Cartesian3(0, 0, 0);
|
|
158
|
+
* var littleSphere = new BoundingSphere(new Cartesian3(0, 0, -1), 0.25);
|
|
159
|
+
* var occluder = new Occluder(littleSphere, cameraPosition);
|
|
160
|
+
* var bigSphere = new BoundingSphere(new Cartesian3(0, 0, -3), 1);
|
|
161
|
+
* occluder.isBoundingSphereVisible(bigSphere); //returns true
|
|
162
|
+
*
|
|
163
|
+
* @see Occluder#getVisibility
|
|
164
|
+
*/
|
|
165
|
+
Occluder.prototype.isBoundingSphereVisible = function(occludee) {
|
|
166
|
+
var occludeePosition = occludee.center.clone();
|
|
167
|
+
var occludeeRadius = occludee.radius;
|
|
168
|
+
|
|
169
|
+
if (this._horizonDistance !== Number.MAX_VALUE) {
|
|
170
|
+
var tempVec = Cartesian3.subtract(occludeePosition, this._occluderPosition, tempVecScratch);
|
|
171
|
+
var temp = this._occluderRadius - occludeeRadius;
|
|
172
|
+
temp = tempVec.magnitudeSquared() - (temp * temp);
|
|
173
|
+
if (occludeeRadius < this._occluderRadius) {
|
|
174
|
+
if (temp > 0.0) {
|
|
175
|
+
temp = Math.sqrt(temp) + this._horizonDistance;
|
|
176
|
+
tempVec = Cartesian3.subtract(occludeePosition, this._cameraPosition, tempVec);
|
|
177
|
+
return ((temp * temp) + (occludeeRadius * occludeeRadius)) > tempVec.magnitudeSquared();
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Prevent against the case where the occludee radius is larger than the occluder's; since this is
|
|
183
|
+
// an uncommon case, the following code should rarely execute.
|
|
184
|
+
if (temp > 0.0) {
|
|
185
|
+
tempVec = occludeePosition.subtract(this._cameraPosition);
|
|
186
|
+
var tempVecMagnitudeSquared = tempVec.magnitudeSquared();
|
|
187
|
+
var occluderRadiusSquared = this._occluderRadius * this._occluderRadius;
|
|
188
|
+
var occludeeRadiusSquared = occludeeRadius * occludeeRadius;
|
|
189
|
+
if ((((this._horizonDistance * this._horizonDistance) + occluderRadiusSquared) * occludeeRadiusSquared) >
|
|
190
|
+
(tempVecMagnitudeSquared * occluderRadiusSquared)) {
|
|
191
|
+
// The occludee is close enough that the occluder cannot possible occlude the occludee
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
temp = Math.sqrt(temp) + this._horizonDistance;
|
|
195
|
+
return ((temp * temp) + occludeeRadiusSquared) > tempVecMagnitudeSquared;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// The occludee completely encompasses the occluder
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return false;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Determine to what extent an occludee is visible (not visible, partially visible, or fully visible).
|
|
207
|
+
*
|
|
208
|
+
* @memberof Occluder
|
|
209
|
+
*
|
|
210
|
+
* @param {BoundingSphere} occludeeBS
|
|
211
|
+
*
|
|
212
|
+
* @return {Enumeration} Visibility.NONE if the occludee is not visible,
|
|
213
|
+
* Visibility.PARTIAL if the occludee is partially visible, or
|
|
214
|
+
* Visibility.FULL if the occludee is fully visible.
|
|
215
|
+
* @example
|
|
216
|
+
* var sphere1 = new BoundingSphere(new Cartesian3(0, 0, -1.5), 0.5);
|
|
217
|
+
* var sphere2 = new BoundingSphere(new Cartesian3(0, 0, -2.5), 0.5);
|
|
218
|
+
* var cameraPosition = new Cartesian3(0, 0, 0);
|
|
219
|
+
* var occluder = new Occluder(sphere1, cameraPosition);
|
|
220
|
+
* occluder.getVisibility(sphere2); //returns Visibility.NONE
|
|
221
|
+
*
|
|
222
|
+
* @see Occluder#isVisible
|
|
223
|
+
*/
|
|
224
|
+
Occluder.prototype.getVisibility = function(occludeeBS) {
|
|
225
|
+
// If the occludee radius is larger than the occluders, this will return that
|
|
226
|
+
// the entire ocludee is visible, even though that may not be the case, though this should
|
|
227
|
+
// not occur too often.
|
|
228
|
+
var occludeePosition = occludeeBS.center.clone();
|
|
229
|
+
var occludeeRadius = occludeeBS.radius;
|
|
230
|
+
|
|
231
|
+
if (occludeeRadius > this._occluderRadius) {
|
|
232
|
+
return Visibility.FULL;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (this._horizonDistance !== Number.MAX_VALUE) {
|
|
236
|
+
// The camera is outside the occluder
|
|
237
|
+
var tempVec = occludeePosition.subtract(this._occluderPosition);
|
|
238
|
+
var temp = this._occluderRadius - occludeeRadius;
|
|
239
|
+
var occluderToOccludeeDistSqrd = tempVec.magnitudeSquared();
|
|
240
|
+
temp = occluderToOccludeeDistSqrd - (temp * temp);
|
|
241
|
+
if (temp > 0.0) {
|
|
242
|
+
// The occludee is not completely inside the occluder
|
|
243
|
+
// Check to see if the occluder completely hides the occludee
|
|
244
|
+
temp = Math.sqrt(temp) + this._horizonDistance;
|
|
245
|
+
tempVec = occludeePosition.subtract(this._cameraPosition);
|
|
246
|
+
var cameraToOccludeeDistSqrd = tempVec.magnitudeSquared();
|
|
247
|
+
if (((temp * temp) + (occludeeRadius * occludeeRadius)) < cameraToOccludeeDistSqrd) {
|
|
248
|
+
return Visibility.NONE;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Check to see whether the occluder is fully or partially visible
|
|
252
|
+
// when the occludee does not intersect the occluder
|
|
253
|
+
temp = this._occluderRadius + occludeeRadius;
|
|
254
|
+
temp = occluderToOccludeeDistSqrd - (temp * temp);
|
|
255
|
+
if (temp > 0.0) {
|
|
256
|
+
// The occludee does not intersect the occluder.
|
|
257
|
+
temp = Math.sqrt(temp) + this._horizonDistance;
|
|
258
|
+
return (cameraToOccludeeDistSqrd < ((temp * temp)) + (occludeeRadius * occludeeRadius)) ? Visibility.FULL : Visibility.PARTIAL;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
//Check to see if the occluder is fully or partially visible when the occludee DOES
|
|
262
|
+
//intersect the occluder
|
|
263
|
+
tempVec = occludeePosition.subtract(this._horizonPlanePosition);
|
|
264
|
+
return (tempVec.dot(this._horizonPlaneNormal) > -occludeeRadius) ? Visibility.PARTIAL : Visibility.FULL;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return Visibility.NONE;
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Computes a point that can be used as the occludee position to the visibility functions.
|
|
272
|
+
* Use a radius of zero for the occludee radius. Typically, a user computes a bounding sphere around
|
|
273
|
+
* an object that is used for visibility; however it is also possible to compute a point that if
|
|
274
|
+
* seen/not seen would also indicate if an object is visible/not visible. This function is better
|
|
275
|
+
* called for objects that do not move relative to the occluder and is large, such as a chunk of
|
|
276
|
+
* terrain. You are better off not calling this and using the object's bounding sphere for objects
|
|
277
|
+
* such as a satellite or ground vehicle.
|
|
278
|
+
*
|
|
279
|
+
* @memberof Occluder
|
|
280
|
+
*
|
|
281
|
+
* @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.
|
|
282
|
+
* @param {Cartesian3} occludeePosition The point where the occludee (bounding sphere of radius 0) is located.
|
|
283
|
+
* @param {Array} positions List of altitude points on the horizon near the surface of the occluder.
|
|
284
|
+
*
|
|
285
|
+
* @exception {DeveloperError} <code>positions</code> is a required, non-empty array.
|
|
286
|
+
* @exception {DeveloperError} <code>occluderBoundingSphere</code> is required.
|
|
287
|
+
* @exception {DeveloperError} <code>occludeePosition</code> must have a value other than <code>occluderBoundingSphere.center</code>.
|
|
288
|
+
*
|
|
289
|
+
* @return {Object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>
|
|
290
|
+
* which is a boolean value.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* var cameraPosition = new Cartesian3(0, 0, 0);
|
|
294
|
+
* var occluderBoundingSphere = new BoundingSphere(new Cartesian3(0, 0, -8), 2);
|
|
295
|
+
* var occluder = new Occluder(occluderBoundingSphere, cameraPosition);
|
|
296
|
+
* var positions = [new Cartesian3(-0.25, 0, -5.3), new Cartesian3(0.25, 0, -5.3)];
|
|
297
|
+
* var tileOccluderSphere = BoundingSphere.fromPoints(positions);
|
|
298
|
+
* var occludeePosition = tileOccluderSphere.center;
|
|
299
|
+
* var occludeePt = occluder.getOccludeePoint(occluderBoundingSphere, occludeePosition, positions);
|
|
300
|
+
*
|
|
301
|
+
*/
|
|
302
|
+
Occluder.getOccludeePoint = function(occluderBoundingSphere, occludeePosition, positions) {
|
|
303
|
+
// Validate input data
|
|
304
|
+
if (!occluderBoundingSphere) {
|
|
305
|
+
throw new DeveloperError('occluderBoundingSphere is required.');
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (!positions) {
|
|
309
|
+
throw new DeveloperError('positions is required.');
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (positions.length === 0) {
|
|
313
|
+
throw new DeveloperError('positions must contain at least one element');
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
var occludeePos = Cartesian3.clone(occludeePosition);
|
|
317
|
+
var occluderPosition = occluderBoundingSphere.center.clone();
|
|
318
|
+
var occluderRadius = occluderBoundingSphere.radius;
|
|
319
|
+
var numPositions = positions.length;
|
|
320
|
+
|
|
321
|
+
if (occluderPosition.equals(occludeePosition)) {
|
|
322
|
+
throw new DeveloperError('occludeePosition must be different than occluderBoundingSphere.center');
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Compute a plane with a normal from the occluder to the occludee position.
|
|
326
|
+
var occluderPlaneNormal = occludeePos.subtract(occluderPosition).normalize();
|
|
327
|
+
var occluderPlaneD = -(occluderPlaneNormal.dot(occluderPosition));
|
|
328
|
+
|
|
329
|
+
//For each position, determine the horizon intersection. Choose the position and intersection
|
|
330
|
+
//that results in the greatest angle with the occcluder plane.
|
|
331
|
+
var aRotationVector = Occluder._anyRotationVector(occluderPosition, occluderPlaneNormal, occluderPlaneD);
|
|
332
|
+
var dot = Occluder._horizonToPlaneNormalDotProduct(occluderBoundingSphere, occluderPlaneNormal, occluderPlaneD, aRotationVector, positions[0]);
|
|
333
|
+
if (!dot) {
|
|
334
|
+
//The position is inside the mimimum radius, which is invalid
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
var tempDot;
|
|
338
|
+
for ( var i = 1; i < numPositions; ++i) {
|
|
339
|
+
tempDot = Occluder._horizonToPlaneNormalDotProduct(occluderBoundingSphere, occluderPlaneNormal, occluderPlaneD, aRotationVector, positions[i]);
|
|
340
|
+
if (!tempDot) {
|
|
341
|
+
//The position is inside the minimum radius, which is invalid
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
if (tempDot < dot) {
|
|
345
|
+
dot = tempDot;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
//Verify that the dot is not near 90 degress
|
|
349
|
+
if (dot < 0.00174532836589830883577820272085) {
|
|
350
|
+
return undefined;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
var distance = occluderRadius / dot;
|
|
354
|
+
return occluderPosition.add(occluderPlaneNormal.multiplyByScalar(distance));
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
var computeOccludeePointFromExtentScratch = [];
|
|
358
|
+
/**
|
|
359
|
+
* Computes a point that can be used as the occludee position to the visibility functions from an extent.
|
|
360
|
+
*
|
|
361
|
+
* @memberof Occluder
|
|
362
|
+
*
|
|
363
|
+
* @param {Extent} extent The extent used to create a bounding sphere.
|
|
364
|
+
* @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the extent.
|
|
365
|
+
*
|
|
366
|
+
* @exception {DeveloperError} extent is required.
|
|
367
|
+
*
|
|
368
|
+
* @return {Object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>
|
|
369
|
+
* which is a boolean value.
|
|
370
|
+
*/
|
|
371
|
+
Occluder.computeOccludeePointFromExtent = function(extent, ellipsoid) {
|
|
372
|
+
if (typeof extent === 'undefined') {
|
|
373
|
+
throw new DeveloperError('extent is required.');
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
|
|
377
|
+
var positions = extent.subsample(ellipsoid, computeOccludeePointFromExtentScratch);
|
|
378
|
+
var bs = BoundingSphere.fromPoints(positions);
|
|
379
|
+
|
|
380
|
+
// TODO: get correct ellipsoid center
|
|
381
|
+
var ellipsoidCenter = Cartesian3.ZERO;
|
|
382
|
+
if (!ellipsoidCenter.equals(bs.center)) {
|
|
383
|
+
return Occluder.getOccludeePoint(new BoundingSphere(ellipsoidCenter, ellipsoid.getMinimumRadius()), bs.center, positions);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return undefined;
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
Occluder._anyRotationVector = function(occluderPosition, occluderPlaneNormal, occluderPlaneD) {
|
|
390
|
+
var tempVec0 = occluderPlaneNormal.clone().abs();
|
|
391
|
+
var majorAxis = tempVec0.x > tempVec0.y ? 0 : 1;
|
|
392
|
+
if (((majorAxis === 0) && (tempVec0.z > tempVec0.x)) || ((majorAxis === 1) && (tempVec0.z > tempVec0.y))) {
|
|
393
|
+
majorAxis = 2;
|
|
394
|
+
}
|
|
395
|
+
var tempVec1 = new Cartesian3();
|
|
396
|
+
if (majorAxis === 0) {
|
|
397
|
+
tempVec0.x = occluderPosition.x;
|
|
398
|
+
tempVec0.y = occluderPosition.y + 1.0;
|
|
399
|
+
tempVec0.z = occluderPosition.z + 1.0;
|
|
400
|
+
tempVec1 = Cartesian3.UNIT_X;
|
|
401
|
+
} else if (majorAxis === 1) {
|
|
402
|
+
tempVec0.x = occluderPosition.x + 1.0;
|
|
403
|
+
tempVec0.y = occluderPosition.y;
|
|
404
|
+
tempVec0.z = occluderPosition.z + 1.0;
|
|
405
|
+
tempVec1 = Cartesian3.UNIT_Y;
|
|
406
|
+
} else {
|
|
407
|
+
tempVec0.x = occluderPosition.x + 1.0;
|
|
408
|
+
tempVec0.y = occluderPosition.y + 1.0;
|
|
409
|
+
tempVec0.z = occluderPosition.z;
|
|
410
|
+
tempVec1 = Cartesian3.UNIT_Z;
|
|
411
|
+
}
|
|
412
|
+
var u = ((occluderPlaneNormal.dot(tempVec0)) + occluderPlaneD) / -(occluderPlaneNormal.dot(tempVec1));
|
|
413
|
+
return ((tempVec0.add(tempVec1.multiplyByScalar(u))).subtract(occluderPosition)).normalize();
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
Occluder._rotationVector = function(occluderPosition, occluderPlaneNormal, occluderPlaneD, position, anyRotationVector) {
|
|
417
|
+
//Determine the angle between the occluder plane normal and the position direction
|
|
418
|
+
var positionDirection = position.subtract(occluderPosition);
|
|
419
|
+
positionDirection = positionDirection.normalize();
|
|
420
|
+
if (occluderPlaneNormal.dot(positionDirection) < 0.99999998476912904932780850903444) {
|
|
421
|
+
var crossProduct = occluderPlaneNormal.cross(positionDirection);
|
|
422
|
+
var length = crossProduct.magnitude();
|
|
423
|
+
if (length > CesiumMath.EPSILON13) {
|
|
424
|
+
return crossProduct.normalize();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
//The occluder plane normal and the position direction are colinear. Use any
|
|
428
|
+
//vector in the occluder plane as the rotation vector
|
|
429
|
+
return anyRotationVector;
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
Occluder._horizonToPlaneNormalDotProduct = function(occluderBS, occluderPlaneNormal, occluderPlaneD, anyRotationVector, position) {
|
|
433
|
+
var pos = Cartesian3.clone(position);
|
|
434
|
+
var occluderPosition = occluderBS.center.clone();
|
|
435
|
+
var occluderRadius = occluderBS.radius;
|
|
436
|
+
|
|
437
|
+
//Verify that the position is outside the occluder
|
|
438
|
+
var positionToOccluder = occluderPosition.subtract(pos);
|
|
439
|
+
var occluderToPositionDistanceSquared = positionToOccluder.magnitudeSquared();
|
|
440
|
+
var occluderRadiusSquared = occluderRadius * occluderRadius;
|
|
441
|
+
if (occluderToPositionDistanceSquared < occluderRadiusSquared) {
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
//Horizon parameters
|
|
446
|
+
var horizonDistanceSquared = occluderToPositionDistanceSquared - occluderRadiusSquared;
|
|
447
|
+
var horizonDistance = Math.sqrt(horizonDistanceSquared);
|
|
448
|
+
var occluderToPositionDistance = Math.sqrt(occluderToPositionDistanceSquared);
|
|
449
|
+
var invOccluderToPositionDistance = 1.0 / occluderToPositionDistance;
|
|
450
|
+
var cosTheta = horizonDistance * invOccluderToPositionDistance;
|
|
451
|
+
var horizonPlaneDistance = cosTheta * horizonDistance;
|
|
452
|
+
positionToOccluder = positionToOccluder.normalize();
|
|
453
|
+
var horizonPlanePosition = pos.add(positionToOccluder.multiplyByScalar(horizonPlaneDistance));
|
|
454
|
+
var horizonCrossDistance = Math.sqrt(horizonDistanceSquared - (horizonPlaneDistance * horizonPlaneDistance));
|
|
455
|
+
|
|
456
|
+
//Rotate the position to occluder vector 90 degrees
|
|
457
|
+
var tempVec = this._rotationVector(occluderPosition, occluderPlaneNormal, occluderPlaneD, pos, anyRotationVector);
|
|
458
|
+
var horizonCrossDirection = new Cartesian3(
|
|
459
|
+
(tempVec.x * tempVec.x * positionToOccluder.x) + ((tempVec.x * tempVec.y - tempVec.z) * positionToOccluder.y) + ((tempVec.x * tempVec.z + tempVec.y) * positionToOccluder.z),
|
|
460
|
+
((tempVec.x * tempVec.y + tempVec.z) * positionToOccluder.x) + (tempVec.y * tempVec.y * positionToOccluder.y) + ((tempVec.y * tempVec.z - tempVec.x) * positionToOccluder.z),
|
|
461
|
+
((tempVec.x * tempVec.z - tempVec.y) * positionToOccluder.x) + ((tempVec.y * tempVec.z + tempVec.x) * positionToOccluder.y) + (tempVec.z * tempVec.z * positionToOccluder.z));
|
|
462
|
+
horizonCrossDirection = horizonCrossDirection.normalize();
|
|
463
|
+
|
|
464
|
+
//Horizon positions
|
|
465
|
+
var offset = horizonCrossDirection.multiplyByScalar(horizonCrossDistance);
|
|
466
|
+
tempVec = ((horizonPlanePosition.add(offset)).subtract(occluderPosition)).normalize();
|
|
467
|
+
var dot0 = occluderPlaneNormal.dot(tempVec);
|
|
468
|
+
tempVec = ((horizonPlanePosition.subtract(offset)).subtract(occluderPosition)).normalize();
|
|
469
|
+
var dot1 = occluderPlaneNormal.dot(tempVec);
|
|
470
|
+
return (dot0 < dot1) ? dot0 : dot1;
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
return Occluder;
|
|
474
|
+
});
|