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,93 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/DeveloperError',
|
|
4
|
+
'../Core/Enumeration'
|
|
5
|
+
], function(
|
|
6
|
+
DeveloperError,
|
|
7
|
+
Enumeration) {
|
|
8
|
+
"use strict";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* DOC_TBA
|
|
12
|
+
*
|
|
13
|
+
* @exports Projections
|
|
14
|
+
*/
|
|
15
|
+
var Projections = {
|
|
16
|
+
WGS84 : new Enumeration(0, 'WGS84', {
|
|
17
|
+
toWgs84 : function(extent, image) {
|
|
18
|
+
return image;
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
MERCATOR : new Enumeration(1, 'MERCATOR', {
|
|
22
|
+
toWgs84 : function(extent, image) {
|
|
23
|
+
if (!extent || typeof extent.north === 'undefined' || typeof extent.south === 'undefined') {
|
|
24
|
+
throw new DeveloperError('extent, extent.north and extent.south are required.');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!image) {
|
|
28
|
+
throw new DeveloperError('image is required.');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var width = parseInt(image.width, 10);
|
|
32
|
+
var height = parseInt(image.height, 10);
|
|
33
|
+
var wRowBytes = width * 4; // Always 4 bytes per pixel.
|
|
34
|
+
|
|
35
|
+
// draw image to canvas and get the pixels
|
|
36
|
+
var canvas = document.createElement('canvas');
|
|
37
|
+
canvas.width = width;
|
|
38
|
+
canvas.height = height;
|
|
39
|
+
var context = canvas.getContext('2d');
|
|
40
|
+
context.drawImage(image, 0, 0);
|
|
41
|
+
var fromPixels = context.getImageData(0, 0, width, height).data;
|
|
42
|
+
|
|
43
|
+
// create array of pixels
|
|
44
|
+
var newImageData = context.createImageData(width, height);
|
|
45
|
+
var toPixels = newImageData.data;
|
|
46
|
+
|
|
47
|
+
// WGS84 parameters
|
|
48
|
+
var deltaWLat = (extent.north - extent.south) / height;
|
|
49
|
+
var currentWLat = extent.north - (0.5 * deltaWLat);
|
|
50
|
+
|
|
51
|
+
// mercator parameters
|
|
52
|
+
var sinTheta = Math.sin(extent.south);
|
|
53
|
+
var minMLat = 0.5 * Math.log((1 + sinTheta) / (1 - sinTheta));
|
|
54
|
+
sinTheta = Math.sin(extent.north);
|
|
55
|
+
var maxMLat = 0.5 * Math.log((1 + sinTheta) / (1 - sinTheta));
|
|
56
|
+
var invMLatDim = 1.0 / (maxMLat - minMLat);
|
|
57
|
+
|
|
58
|
+
// first row
|
|
59
|
+
var heightMinusOne = height - 1;
|
|
60
|
+
var i = 0;
|
|
61
|
+
for (; i < wRowBytes; ++i) {
|
|
62
|
+
toPixels[i] = fromPixels[i];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// interior rows
|
|
66
|
+
var end, mLat, mRow;
|
|
67
|
+
var j = 1;
|
|
68
|
+
for (; j < heightMinusOne; ++j, currentWLat -= deltaWLat) {
|
|
69
|
+
sinTheta = Math.sin(currentWLat);
|
|
70
|
+
mLat = 0.5 * Math.log((1.0 + sinTheta) / (1.0 - sinTheta));
|
|
71
|
+
mRow = Math.floor(heightMinusOne - ((heightMinusOne * (mLat - minMLat) * invMLatDim)));
|
|
72
|
+
end = i + wRowBytes;
|
|
73
|
+
for ( var k = 0; i < end; ++i, ++k) {
|
|
74
|
+
toPixels[i] = fromPixels[mRow * wRowBytes + k];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// last row
|
|
79
|
+
end = i + wRowBytes;
|
|
80
|
+
for (j = 0; i < end; ++i, ++j) {
|
|
81
|
+
toPixels[i] = fromPixels[i];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// paint new image to canvas
|
|
85
|
+
context.putImageData(newImageData, 0, 0);
|
|
86
|
+
|
|
87
|
+
return canvas;
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return Projections;
|
|
93
|
+
});
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/DeveloperError',
|
|
4
|
+
'../Core/Color',
|
|
5
|
+
'../Core/destroyObject',
|
|
6
|
+
'../Core/Math',
|
|
7
|
+
'../Core/Matrix4',
|
|
8
|
+
'../Renderer/BufferUsage',
|
|
9
|
+
'./Material',
|
|
10
|
+
'./CustomSensorVolume'
|
|
11
|
+
], function(
|
|
12
|
+
DeveloperError,
|
|
13
|
+
Color,
|
|
14
|
+
destroyObject,
|
|
15
|
+
CesiumMath,
|
|
16
|
+
Matrix4,
|
|
17
|
+
BufferUsage,
|
|
18
|
+
Material,
|
|
19
|
+
CustomSensorVolume) {
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* DOC_TBA
|
|
24
|
+
*
|
|
25
|
+
* @alias RectangularPyramidSensorVolume
|
|
26
|
+
* @constructor
|
|
27
|
+
*
|
|
28
|
+
* @see SensorVolumeCollection#addRectangularPyramid
|
|
29
|
+
*/
|
|
30
|
+
var RectangularPyramidSensorVolume = function(template) {
|
|
31
|
+
var t = template || {};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* <code>true</code> if this sensor will be shown; otherwise, <code>false</code>
|
|
35
|
+
*
|
|
36
|
+
* @type Boolean
|
|
37
|
+
*/
|
|
38
|
+
this.show = (typeof t.show === 'undefined') ? true : t.show;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* When <code>true</code>, a polyline is shown where the sensor outline intersections the central body. The default is <code>true</code>.
|
|
42
|
+
*
|
|
43
|
+
* @type Boolean
|
|
44
|
+
*
|
|
45
|
+
* @see RectangularPyramidSensorVolume#intersectionColor
|
|
46
|
+
*/
|
|
47
|
+
this.showIntersection = (typeof t.showIntersection === 'undefined') ? true : t.showIntersection;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* <p>
|
|
51
|
+
* Determines if a sensor intersecting the ellipsoid is drawn through the ellipsoid and potentially out
|
|
52
|
+
* to the other side, or if the part of the sensor intersecting the ellipsoid stops at the ellipsoid.
|
|
53
|
+
* </p>
|
|
54
|
+
* <p>
|
|
55
|
+
* The default is <code>false</code>, meaning the sensor will not go through the ellipsoid.
|
|
56
|
+
* </p>
|
|
57
|
+
*
|
|
58
|
+
* @type Boolean
|
|
59
|
+
*/
|
|
60
|
+
this.showThroughEllipsoid = (typeof t.showThroughEllipsoid === 'undefined') ? false : t.showThroughEllipsoid;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The 4x4 transformation matrix that transforms this sensor from model to world coordinates. In it's model
|
|
64
|
+
* coordinates, the sensor's principal direction is along the positive z-axis. Half angles measured from the
|
|
65
|
+
* principal direction and in the direction of the x-axis and y-axis define the extent of the rectangular
|
|
66
|
+
* cross section. This matrix is available to GLSL vertex and fragment shaders via
|
|
67
|
+
* {@link czm_model} and derived uniforms.
|
|
68
|
+
* <br /><br />
|
|
69
|
+
* <div align='center'>
|
|
70
|
+
* <img src='images/RectangularPyramidSensorVolume.setModelMatrix.png' /><br />
|
|
71
|
+
* Model coordinate system for a sensor
|
|
72
|
+
* </div>
|
|
73
|
+
*
|
|
74
|
+
* @type Matrix4
|
|
75
|
+
*
|
|
76
|
+
* @see czm_model
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // The sensor's vertex is located on the surface at -75.59777 degrees longitude and 40.03883 degrees latitude.
|
|
80
|
+
* // The sensor's opens upward, along the surface normal.
|
|
81
|
+
* var center = ellipsoid.cartographicToCartesian(Cartographic.fromDegrees(-75.59777, 40.03883));
|
|
82
|
+
* sensor.modelMatrix = Transforms.eastNorthUpToFixedFrame(center);
|
|
83
|
+
*/
|
|
84
|
+
this.modelMatrix = t.modelMatrix || Matrix4.IDENTITY.clone();
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* DOC_TBA
|
|
88
|
+
*
|
|
89
|
+
* @type BufferUsage
|
|
90
|
+
*/
|
|
91
|
+
this.bufferUsage = t.bufferUsage || BufferUsage.STATIC_DRAW;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* DOC_TBA
|
|
95
|
+
*
|
|
96
|
+
* @type Number
|
|
97
|
+
*/
|
|
98
|
+
this.radius = (typeof t.radius === 'undefined') ? Number.POSITIVE_INFINITY : t.radius;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* DOC_TBA
|
|
102
|
+
*
|
|
103
|
+
* @type Number
|
|
104
|
+
*
|
|
105
|
+
* @see RectangularPyramidSensorVolume#yHalfAngle
|
|
106
|
+
*/
|
|
107
|
+
this.xHalfAngle = (typeof t.xHalfAngle === 'undefined') ? CesiumMath.PI_OVER_TWO : t.xHalfAngle;
|
|
108
|
+
this._xHalfAngle = undefined;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* DOC_TBA
|
|
112
|
+
*
|
|
113
|
+
* @type Number
|
|
114
|
+
*
|
|
115
|
+
* @see RectangularPyramidSensorVolume#xHalfAngle
|
|
116
|
+
*/
|
|
117
|
+
this.yHalfAngle = (typeof t.yHalfAngle === 'undefined') ? CesiumMath.PI_OVER_TWO : t.yHalfAngle;
|
|
118
|
+
this._yHalfAngle = undefined;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The surface appearance of the sensor. This can be one of several built-in {@link Material} objects or a custom material, scripted with
|
|
122
|
+
* <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>.
|
|
123
|
+
* <p>
|
|
124
|
+
* The default material is <code>Material.ColorType</code>.
|
|
125
|
+
* </p>
|
|
126
|
+
*
|
|
127
|
+
* @type Material
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* // 1. Change the color of the default material to yellow
|
|
131
|
+
* sensor.material.uniforms.color = new Color(1.0, 1.0, 0.0, 1.0);
|
|
132
|
+
*
|
|
133
|
+
* // 2. Change material to horizontal stripes
|
|
134
|
+
* sensor.material = Material.fromType(scene.getContext(), Material.StripeType);
|
|
135
|
+
*
|
|
136
|
+
* @see <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>
|
|
137
|
+
*/
|
|
138
|
+
this.material = (typeof t.material !== 'undefined') ? t.material : Material.fromType(undefined, Material.ColorType);
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The color of the polyline where the sensor outline intersects the central body. The default is {@link Color.WHITE}.
|
|
142
|
+
*
|
|
143
|
+
* @type Color
|
|
144
|
+
*
|
|
145
|
+
* @see RectangularPyramidSensorVolume#showIntersection
|
|
146
|
+
*/
|
|
147
|
+
this.intersectionColor = (typeof t.intersectionColor !== 'undefined') ? Color.clone(t.intersectionColor) : Color.clone(Color.WHITE);
|
|
148
|
+
|
|
149
|
+
t._pickIdThis = t._pickIdThis || this;
|
|
150
|
+
this._customSensor = new CustomSensorVolume(t);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* DOC_TBA
|
|
155
|
+
*
|
|
156
|
+
* @memberof RectangularPyramidSensorVolume
|
|
157
|
+
*
|
|
158
|
+
* @exception {DeveloperError} this.xHalfAngle and this.yHalfAngle must each be less than 90 degrees.
|
|
159
|
+
* @exception {DeveloperError} this.radius must be greater than or equal to zero.
|
|
160
|
+
*/
|
|
161
|
+
RectangularPyramidSensorVolume.prototype.update = function(context, frameState, commandList) {
|
|
162
|
+
if ((this.xHalfAngle > CesiumMath.PI_OVER_TWO) || (this.yHalfAngle > CesiumMath.PI_OVER_TWO)) {
|
|
163
|
+
throw new DeveloperError('this.xHalfAngle and this.yHalfAngle must each be less than or equal to 90 degrees.');
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
var s = this._customSensor;
|
|
167
|
+
|
|
168
|
+
s.show = this.show;
|
|
169
|
+
s.showIntersection = this.showIntersection;
|
|
170
|
+
s.showThroughEllipsoid = this.showThroughEllipsoid;
|
|
171
|
+
s.modelMatrix = this.modelMatrix;
|
|
172
|
+
s.bufferUsage = this.bufferUsage;
|
|
173
|
+
s.radius = this.radius;
|
|
174
|
+
s.material = this.material;
|
|
175
|
+
s.intersectionColor = this.intersectionColor;
|
|
176
|
+
|
|
177
|
+
if ((this._xHalfAngle !== this.xHalfAngle) || (this._yHalfAngle !== this.yHalfAngle)) {
|
|
178
|
+
|
|
179
|
+
this._xHalfAngle = this.xHalfAngle;
|
|
180
|
+
this._yHalfAngle = this.yHalfAngle;
|
|
181
|
+
|
|
182
|
+
// At 90 degrees the sensor is completely open, and tan() goes to infinity.
|
|
183
|
+
var tanX = Math.tan(Math.min(this.xHalfAngle, CesiumMath.toRadians(89.0)));
|
|
184
|
+
var tanY = Math.tan(Math.min(this.yHalfAngle, CesiumMath.toRadians(89.0)));
|
|
185
|
+
var theta = Math.atan(tanX / tanY);
|
|
186
|
+
var cone = Math.atan(Math.sqrt(tanX * tanX + tanY * tanY));
|
|
187
|
+
|
|
188
|
+
s.setDirections([{
|
|
189
|
+
clock : theta,
|
|
190
|
+
cone : cone
|
|
191
|
+
}, {
|
|
192
|
+
clock : CesiumMath.toRadians(180.0) - theta,
|
|
193
|
+
cone : cone
|
|
194
|
+
}, {
|
|
195
|
+
clock : CesiumMath.toRadians(180.0) + theta,
|
|
196
|
+
cone : cone
|
|
197
|
+
}, {
|
|
198
|
+
clock : -theta,
|
|
199
|
+
cone : cone
|
|
200
|
+
}]);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
s.update(context, frameState, commandList);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* DOC_TBA
|
|
208
|
+
* @memberof RectangularPyramidSensorVolume
|
|
209
|
+
*/
|
|
210
|
+
RectangularPyramidSensorVolume.prototype.isDestroyed = function() {
|
|
211
|
+
return false;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* DOC_TBA
|
|
216
|
+
* @memberof RectangularPyramidSensorVolume
|
|
217
|
+
*/
|
|
218
|
+
RectangularPyramidSensorVolume.prototype.destroy = function() {
|
|
219
|
+
this._customSensor = this._customSensor && this._customSensor.destroy();
|
|
220
|
+
return destroyObject(this);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
return RectangularPyramidSensorVolume;
|
|
224
|
+
});
|
|
@@ -0,0 +1,632 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/Math',
|
|
4
|
+
'../Core/Color',
|
|
5
|
+
'../Core/defaultValue',
|
|
6
|
+
'../Core/destroyObject',
|
|
7
|
+
'../Core/GeographicProjection',
|
|
8
|
+
'../Core/Ellipsoid',
|
|
9
|
+
'../Core/DeveloperError',
|
|
10
|
+
'../Core/Occluder',
|
|
11
|
+
'../Core/BoundingRectangle',
|
|
12
|
+
'../Core/BoundingSphere',
|
|
13
|
+
'../Core/Cartesian2',
|
|
14
|
+
'../Core/Cartesian3',
|
|
15
|
+
'../Core/Cartesian4',
|
|
16
|
+
'../Core/Intersect',
|
|
17
|
+
'../Core/IntersectionTests',
|
|
18
|
+
'../Core/Interval',
|
|
19
|
+
'../Core/Matrix4',
|
|
20
|
+
'../Core/JulianDate',
|
|
21
|
+
'../Renderer/Context',
|
|
22
|
+
'../Renderer/ClearCommand',
|
|
23
|
+
'./Camera',
|
|
24
|
+
'./ScreenSpaceCameraController',
|
|
25
|
+
'./CompositePrimitive',
|
|
26
|
+
'./CullingVolume',
|
|
27
|
+
'./AnimationCollection',
|
|
28
|
+
'./SceneMode',
|
|
29
|
+
'./FrameState',
|
|
30
|
+
'./OrthographicFrustum',
|
|
31
|
+
'./PerspectiveOffCenterFrustum',
|
|
32
|
+
'./FrustumCommands'
|
|
33
|
+
], function(
|
|
34
|
+
CesiumMath,
|
|
35
|
+
Color,
|
|
36
|
+
defaultValue,
|
|
37
|
+
destroyObject,
|
|
38
|
+
GeographicProjection,
|
|
39
|
+
Ellipsoid,
|
|
40
|
+
DeveloperError,
|
|
41
|
+
Occluder,
|
|
42
|
+
BoundingRectangle,
|
|
43
|
+
BoundingSphere,
|
|
44
|
+
Cartesian2,
|
|
45
|
+
Cartesian3,
|
|
46
|
+
Cartesian4,
|
|
47
|
+
Intersect,
|
|
48
|
+
IntersectionTests,
|
|
49
|
+
Interval,
|
|
50
|
+
Matrix4,
|
|
51
|
+
JulianDate,
|
|
52
|
+
Context,
|
|
53
|
+
ClearCommand,
|
|
54
|
+
Camera,
|
|
55
|
+
ScreenSpaceCameraController,
|
|
56
|
+
CompositePrimitive,
|
|
57
|
+
CullingVolume,
|
|
58
|
+
AnimationCollection,
|
|
59
|
+
SceneMode,
|
|
60
|
+
FrameState,
|
|
61
|
+
OrthographicFrustum,
|
|
62
|
+
PerspectiveOffCenterFrustum,
|
|
63
|
+
FrustumCommands) {
|
|
64
|
+
"use strict";
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* DOC_TBA
|
|
68
|
+
*
|
|
69
|
+
* @alias Scene
|
|
70
|
+
* @constructor
|
|
71
|
+
*/
|
|
72
|
+
var Scene = function(canvas) {
|
|
73
|
+
var context = new Context(canvas);
|
|
74
|
+
|
|
75
|
+
this._frameState = new FrameState();
|
|
76
|
+
this._canvas = canvas;
|
|
77
|
+
this._context = context;
|
|
78
|
+
this._primitives = new CompositePrimitive();
|
|
79
|
+
this._pickFramebuffer = undefined;
|
|
80
|
+
this._camera = new Camera(canvas);
|
|
81
|
+
this._screenSpaceCameraController = new ScreenSpaceCameraController(canvas, this._camera.controller);
|
|
82
|
+
|
|
83
|
+
this._animations = new AnimationCollection();
|
|
84
|
+
|
|
85
|
+
this._shaderFrameCount = 0;
|
|
86
|
+
|
|
87
|
+
this._commandList = [];
|
|
88
|
+
this._frustumCommandsList = [];
|
|
89
|
+
|
|
90
|
+
this._clearColorCommand = new ClearCommand();
|
|
91
|
+
this._clearColorCommand.clearState = context.createClearState({
|
|
92
|
+
color : new Color()
|
|
93
|
+
});
|
|
94
|
+
this._clearDepthStencilCommand = new ClearCommand();
|
|
95
|
+
this._clearDepthStencilCommand.clearState = context.createClearState({
|
|
96
|
+
depth : 1.0,
|
|
97
|
+
stencil : 0.0
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The {@link SkyBox} used to draw the stars.
|
|
102
|
+
*
|
|
103
|
+
* @type SkyBox
|
|
104
|
+
*
|
|
105
|
+
* @default undefined
|
|
106
|
+
*
|
|
107
|
+
* @see Scene#backgroundColor
|
|
108
|
+
*/
|
|
109
|
+
this.skyBox = undefined;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The sky atmosphere drawn around the globe.
|
|
113
|
+
*
|
|
114
|
+
* @type SkyAtmosphere
|
|
115
|
+
*
|
|
116
|
+
* @default undefined
|
|
117
|
+
*/
|
|
118
|
+
this.skyAtmosphere = undefined;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The background color, which is only visible if there is no sky box, i.e., {@link Scene#skyBox} is undefined.
|
|
122
|
+
*
|
|
123
|
+
* @type Color
|
|
124
|
+
*
|
|
125
|
+
* @default Color.BLACK
|
|
126
|
+
*
|
|
127
|
+
* @see Scene#skyBox
|
|
128
|
+
*/
|
|
129
|
+
this.backgroundColor = Color.BLACK.clone();
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The current mode of the scene.
|
|
133
|
+
*
|
|
134
|
+
* @type SceneMode
|
|
135
|
+
*/
|
|
136
|
+
this.mode = SceneMode.SCENE3D;
|
|
137
|
+
/**
|
|
138
|
+
* DOC_TBA
|
|
139
|
+
*/
|
|
140
|
+
this.scene2D = {
|
|
141
|
+
/**
|
|
142
|
+
* The projection to use in 2D mode.
|
|
143
|
+
*/
|
|
144
|
+
projection : new GeographicProjection(Ellipsoid.WGS84)
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* The current morph transition time between 2D/Columbus View and 3D,
|
|
148
|
+
* with 0.0 being 2D or Columbus View and 1.0 being 3D.
|
|
149
|
+
*
|
|
150
|
+
* @type Number
|
|
151
|
+
*/
|
|
152
|
+
this.morphTime = 1.0;
|
|
153
|
+
/**
|
|
154
|
+
* The far-to-near ratio of the multi-frustum. The default is 1,000.0.
|
|
155
|
+
*
|
|
156
|
+
* @type Number
|
|
157
|
+
*/
|
|
158
|
+
this.farToNearRatio = 1000.0;
|
|
159
|
+
|
|
160
|
+
// initial guess at frustums.
|
|
161
|
+
var near = this._camera.frustum.near;
|
|
162
|
+
var far = this._camera.frustum.far;
|
|
163
|
+
var numFrustums = Math.ceil(Math.log(far / near) / Math.log(this.farToNearRatio));
|
|
164
|
+
updateFrustums(near, far, this.farToNearRatio, numFrustums, this._frustumCommandsList);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* DOC_TBA
|
|
169
|
+
* @memberof Scene
|
|
170
|
+
*/
|
|
171
|
+
Scene.prototype.getCanvas = function() {
|
|
172
|
+
return this._canvas;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* DOC_TBA
|
|
177
|
+
* @memberof Scene
|
|
178
|
+
*/
|
|
179
|
+
Scene.prototype.getContext = function() {
|
|
180
|
+
return this._context;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* DOC_TBA
|
|
185
|
+
* @memberof Scene
|
|
186
|
+
*/
|
|
187
|
+
Scene.prototype.getPrimitives = function() {
|
|
188
|
+
return this._primitives;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* DOC_TBA
|
|
193
|
+
* @memberof Scene
|
|
194
|
+
*/
|
|
195
|
+
Scene.prototype.getCamera = function() {
|
|
196
|
+
return this._camera;
|
|
197
|
+
};
|
|
198
|
+
// TODO: setCamera
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* DOC_TBA
|
|
202
|
+
* @memberof Scene
|
|
203
|
+
*/
|
|
204
|
+
Scene.prototype.getScreenSpaceCameraController = function() {
|
|
205
|
+
return this._screenSpaceCameraController;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* DOC_TBA
|
|
210
|
+
* @memberof Scene
|
|
211
|
+
*/
|
|
212
|
+
Scene.prototype.getUniformState = function() {
|
|
213
|
+
return this._context.getUniformState();
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Gets state information about the current scene. If called outside of a primitive's <code>update</code>
|
|
218
|
+
* function, the previous frame's state is returned.
|
|
219
|
+
*
|
|
220
|
+
* @memberof Scene
|
|
221
|
+
*/
|
|
222
|
+
Scene.prototype.getFrameState = function() {
|
|
223
|
+
return this._frameState;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* DOC_TBA
|
|
228
|
+
* @memberof Scene
|
|
229
|
+
*/
|
|
230
|
+
Scene.prototype.getAnimations = function() {
|
|
231
|
+
return this._animations;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* DOC_TBA
|
|
236
|
+
* @memberof Scene
|
|
237
|
+
*/
|
|
238
|
+
function clearPasses(passes) {
|
|
239
|
+
passes.color = false;
|
|
240
|
+
passes.pick = false;
|
|
241
|
+
passes.overlay = false;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function updateFrameState(scene, frameNumber, time) {
|
|
245
|
+
var camera = scene._camera;
|
|
246
|
+
|
|
247
|
+
var frameState = scene._frameState;
|
|
248
|
+
frameState.mode = scene.mode;
|
|
249
|
+
frameState.morphTime = scene.morphTime;
|
|
250
|
+
frameState.scene2D = scene.scene2D;
|
|
251
|
+
frameState.frameNumber = frameNumber;
|
|
252
|
+
frameState.time = time;
|
|
253
|
+
frameState.camera = camera;
|
|
254
|
+
frameState.cullingVolume = camera.frustum.computeCullingVolume(camera.getPositionWC(), camera.getDirectionWC(), camera.getUpWC());
|
|
255
|
+
frameState.occluder = undefined;
|
|
256
|
+
|
|
257
|
+
// TODO: The occluder is the top-level central body. When we add
|
|
258
|
+
// support for multiple central bodies, this should be the closest one.
|
|
259
|
+
var cb = scene._primitives.getCentralBody();
|
|
260
|
+
if (scene.mode === SceneMode.SCENE3D && typeof cb !== 'undefined') {
|
|
261
|
+
var ellipsoid = cb.getEllipsoid();
|
|
262
|
+
var occluder = new Occluder(new BoundingSphere(Cartesian3.ZERO, ellipsoid.getMinimumRadius()), camera.getPositionWC());
|
|
263
|
+
frameState.occluder = occluder;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
clearPasses(frameState.passes);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function updateFrustums(near, far, farToNearRatio, numFrustums, frustumCommandsList) {
|
|
270
|
+
frustumCommandsList.length = numFrustums;
|
|
271
|
+
for (var m = 0; m < numFrustums; ++m) {
|
|
272
|
+
var curNear = Math.max(near, Math.pow(farToNearRatio, m) * near);
|
|
273
|
+
var curFar = Math.min(far, farToNearRatio * curNear);
|
|
274
|
+
curNear *= 0.99;
|
|
275
|
+
|
|
276
|
+
var frustumCommands = frustumCommandsList[m];
|
|
277
|
+
if (typeof frustumCommands === 'undefined') {
|
|
278
|
+
frustumCommands = frustumCommandsList[m] = new FrustumCommands(curNear, curFar);
|
|
279
|
+
} else {
|
|
280
|
+
frustumCommands.near = curNear;
|
|
281
|
+
frustumCommands.far = curFar;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
function insertIntoBin(scene, command, distance) {
|
|
287
|
+
var frustumCommandsList = scene._frustumCommandsList;
|
|
288
|
+
var length = frustumCommandsList.length;
|
|
289
|
+
for (var i = 0; i < length; ++i) {
|
|
290
|
+
var frustumCommands = frustumCommandsList[i];
|
|
291
|
+
var curNear = frustumCommands.near;
|
|
292
|
+
var curFar = frustumCommands.far;
|
|
293
|
+
|
|
294
|
+
if (typeof distance !== 'undefined') {
|
|
295
|
+
if (distance.start > curFar) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (distance.stop < curNear) {
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// PERFORMANCE_IDEA: sort bins
|
|
305
|
+
frustumCommands.commands.push(command);
|
|
306
|
+
|
|
307
|
+
if (command.executeInClosestFrustum) {
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
var scratchCullingVolume = new CullingVolume();
|
|
314
|
+
var distances = new Interval();
|
|
315
|
+
function createPotentiallyVisibleSet(scene, listName) {
|
|
316
|
+
var commandLists = scene._commandList;
|
|
317
|
+
var cullingVolume = scene._frameState.cullingVolume;
|
|
318
|
+
var camera = scene._camera;
|
|
319
|
+
|
|
320
|
+
var direction = camera.getDirectionWC();
|
|
321
|
+
var position = camera.getPositionWC();
|
|
322
|
+
|
|
323
|
+
var frustumCommandsList = scene._frustumCommandsList;
|
|
324
|
+
var frustumsLength = frustumCommandsList.length;
|
|
325
|
+
for (var n = 0; n < frustumsLength; ++n) {
|
|
326
|
+
frustumCommandsList[n].commands.length = 0;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
var near = Number.MAX_VALUE;
|
|
330
|
+
var far = Number.MIN_VALUE;
|
|
331
|
+
var undefBV = false;
|
|
332
|
+
|
|
333
|
+
var occluder;
|
|
334
|
+
if (scene._frameState.mode === SceneMode.SCENE3D) {
|
|
335
|
+
occluder = scene._frameState.occluder;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// get user culling volume minus the far plane.
|
|
339
|
+
var planes = scratchCullingVolume.planes;
|
|
340
|
+
for (var k = 0; k < 5; ++k) {
|
|
341
|
+
planes[k] = cullingVolume.planes[k];
|
|
342
|
+
}
|
|
343
|
+
cullingVolume = scratchCullingVolume;
|
|
344
|
+
|
|
345
|
+
var length = commandLists.length;
|
|
346
|
+
for (var i = 0; i < length; ++i) {
|
|
347
|
+
var commandList = commandLists[i][listName];
|
|
348
|
+
var commandListLength = commandList.length;
|
|
349
|
+
for (var j = 0; j < commandListLength; ++j) {
|
|
350
|
+
var command = commandList[j];
|
|
351
|
+
var boundingVolume = command.boundingVolume;
|
|
352
|
+
if (typeof boundingVolume !== 'undefined') {
|
|
353
|
+
var modelMatrix = defaultValue(command.modelMatrix, Matrix4.IDENTITY);
|
|
354
|
+
var transformedBV = boundingVolume.transform(modelMatrix); //TODO: Remove this allocation.
|
|
355
|
+
if (cullingVolume.getVisibility(transformedBV) === Intersect.OUTSIDE ||
|
|
356
|
+
(typeof occluder !== 'undefined' && !occluder.isBoundingSphereVisible(transformedBV))) {
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
distances = transformedBV.getPlaneDistances(position, direction, distances);
|
|
361
|
+
near = Math.min(near, distances.start);
|
|
362
|
+
far = Math.max(far, distances.stop);
|
|
363
|
+
|
|
364
|
+
insertIntoBin(scene, command, distances);
|
|
365
|
+
} else {
|
|
366
|
+
// Clear commands don't need a bounding volume - just add the clear to all frustums.
|
|
367
|
+
// If another command has no bounding volume, though, we need to use the camera's
|
|
368
|
+
// worst-case near and far planes to avoid clipping something important.
|
|
369
|
+
undefBV = !(command instanceof ClearCommand);
|
|
370
|
+
insertIntoBin(scene, command);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (undefBV) {
|
|
376
|
+
near = camera.frustum.near;
|
|
377
|
+
far = camera.frustum.far;
|
|
378
|
+
} else {
|
|
379
|
+
// The computed near plane must be between the user defined near and far planes.
|
|
380
|
+
// The computed far plane must between the user defined far and computed near.
|
|
381
|
+
// This will handle the case where the computed near plane is further than the user defined far plane.
|
|
382
|
+
near = Math.min(Math.max(near, camera.frustum.near), camera.frustum.far);
|
|
383
|
+
far = Math.max(Math.min(far, camera.frustum.far), near);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Exploit temporal coherence. If the frustums haven't changed much, use the frustums computed
|
|
387
|
+
// last frame, else compute the new frustums and sort them by frustum again.
|
|
388
|
+
var farToNearRatio = scene.farToNearRatio;
|
|
389
|
+
var numFrustums = Math.ceil(Math.log(far / near) / Math.log(farToNearRatio));
|
|
390
|
+
if (near !== Number.MAX_VALUE && (numFrustums !== frustumsLength || (frustumCommandsList.length !== 0 &&
|
|
391
|
+
(near < frustumCommandsList[0].near || far > frustumCommandsList[frustumsLength - 1].far)))) {
|
|
392
|
+
updateFrustums(near, far, farToNearRatio, numFrustums, frustumCommandsList);
|
|
393
|
+
createPotentiallyVisibleSet(scene, listName);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function executeCommands(scene, framebuffer) {
|
|
398
|
+
var camera = scene._camera;
|
|
399
|
+
var frustum = camera.frustum.clone();
|
|
400
|
+
var context = scene._context;
|
|
401
|
+
var us = context.getUniformState();
|
|
402
|
+
var skyBoxCommand = (typeof scene.skyBox !== 'undefined') ? scene.skyBox.update(context, scene._frameState) : undefined;
|
|
403
|
+
var skyAtmosphereCommand = (typeof scene.skyAtmosphere !== 'undefined') ? scene.skyAtmosphere.update(context, scene._frameState) : undefined;
|
|
404
|
+
|
|
405
|
+
var clear = scene._clearColorCommand;
|
|
406
|
+
Color.clone(defaultValue(scene.backgroundColor, Color.BLACK), clear.clearState.color);
|
|
407
|
+
clear.execute(context, framebuffer);
|
|
408
|
+
|
|
409
|
+
// Ideally, we would render the sky box and atmosphere last for
|
|
410
|
+
// early-z, but we would have to draw it in each frustum
|
|
411
|
+
frustum.near = camera.frustum.near;
|
|
412
|
+
frustum.far = camera.frustum.far;
|
|
413
|
+
us.updateFrustum(frustum);
|
|
414
|
+
|
|
415
|
+
if (typeof skyBoxCommand !== 'undefined') {
|
|
416
|
+
skyBoxCommand.execute(context, framebuffer);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (typeof skyAtmosphereCommand !== 'undefined') {
|
|
420
|
+
skyAtmosphereCommand.execute(context, framebuffer);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
var clearDepthStencil = scene._clearDepthStencilCommand;
|
|
424
|
+
|
|
425
|
+
var frustumCommandsList = scene._frustumCommandsList;
|
|
426
|
+
var numFrustums = frustumCommandsList.length;
|
|
427
|
+
for (var i = 0; i < numFrustums; ++i) {
|
|
428
|
+
clearDepthStencil.execute(context, framebuffer);
|
|
429
|
+
|
|
430
|
+
var index = numFrustums - i - 1.0;
|
|
431
|
+
var frustumCommands = frustumCommandsList[index];
|
|
432
|
+
frustum.near = frustumCommands.near;
|
|
433
|
+
frustum.far = frustumCommands.far;
|
|
434
|
+
|
|
435
|
+
us.updateFrustum(frustum);
|
|
436
|
+
|
|
437
|
+
var commands = frustumCommands.commands;
|
|
438
|
+
var length = commands.length;
|
|
439
|
+
for (var j = 0; j < length; ++j) {
|
|
440
|
+
commands[j].execute(context, framebuffer);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
function executeOverlayCommands(scene) {
|
|
446
|
+
var context = scene._context;
|
|
447
|
+
var commandLists = scene._commandList;
|
|
448
|
+
var length = commandLists.length;
|
|
449
|
+
for (var i = 0; i < length; ++i) {
|
|
450
|
+
var commandList = commandLists[i].overlayList;
|
|
451
|
+
var commandListLength = commandList.length;
|
|
452
|
+
for (var j = 0; j < commandListLength; ++j) {
|
|
453
|
+
commandList[j].execute(context);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* DOC_TBA
|
|
460
|
+
* @memberof Scene
|
|
461
|
+
*/
|
|
462
|
+
Scene.prototype.initializeFrame = function() {
|
|
463
|
+
// Destroy released shaders once every 120 frames to avoid thrashing the cache
|
|
464
|
+
if (this._shaderFrameCount++ === 120) {
|
|
465
|
+
this._shaderFrameCount = 0;
|
|
466
|
+
this._context.getShaderCache().destroyReleasedShaderPrograms();
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
this._animations.update();
|
|
470
|
+
this._camera.controller.update(this.mode, this.scene2D);
|
|
471
|
+
this._screenSpaceCameraController.update(this.mode);
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* DOC_TBA
|
|
476
|
+
* @memberof Scene
|
|
477
|
+
*/
|
|
478
|
+
Scene.prototype.render = function(time) {
|
|
479
|
+
if (typeof time === 'undefined') {
|
|
480
|
+
time = new JulianDate();
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
var us = this.getUniformState();
|
|
484
|
+
var frameState = this._frameState;
|
|
485
|
+
|
|
486
|
+
var frameNumber = CesiumMath.incrementWrap(us.getFrameNumber(), 15000000.0, 1.0);
|
|
487
|
+
updateFrameState(this, frameNumber, time);
|
|
488
|
+
frameState.passes.color = true;
|
|
489
|
+
frameState.passes.overlay = true;
|
|
490
|
+
|
|
491
|
+
us.update(frameState);
|
|
492
|
+
|
|
493
|
+
this._commandList.length = 0;
|
|
494
|
+
this._primitives.update(this._context, frameState, this._commandList);
|
|
495
|
+
|
|
496
|
+
createPotentiallyVisibleSet(this, 'colorList');
|
|
497
|
+
executeCommands(this);
|
|
498
|
+
executeOverlayCommands(this);
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
var orthoPickingFrustum = new OrthographicFrustum();
|
|
502
|
+
function getPickOrthographicCullingVolume(scene, windowPosition, width, height) {
|
|
503
|
+
var canvas = scene._canvas;
|
|
504
|
+
var camera = scene._camera;
|
|
505
|
+
var frustum = camera.frustum;
|
|
506
|
+
|
|
507
|
+
var canvasWidth = canvas.clientWidth;
|
|
508
|
+
var canvasHeight = canvas.clientHeight;
|
|
509
|
+
|
|
510
|
+
var x = (2.0 / canvasWidth) * windowPosition.x - 1.0;
|
|
511
|
+
x *= (frustum.right - frustum.left) * 0.5;
|
|
512
|
+
var y = (2.0 / canvasHeight) * (canvasHeight - windowPosition.y) - 1.0;
|
|
513
|
+
y *= (frustum.top - frustum.bottom) * 0.5;
|
|
514
|
+
|
|
515
|
+
var position = camera.position;
|
|
516
|
+
position = new Cartesian3(position.z, position.x, position.y);
|
|
517
|
+
position.y += x;
|
|
518
|
+
position.z += y;
|
|
519
|
+
|
|
520
|
+
var pixelSize = frustum.getPixelSize(new Cartesian2(canvasWidth, canvasHeight));
|
|
521
|
+
|
|
522
|
+
var ortho = orthoPickingFrustum;
|
|
523
|
+
ortho.right = pixelSize.x * 0.5;
|
|
524
|
+
ortho.left = -ortho.right;
|
|
525
|
+
ortho.top = pixelSize.y * 0.5;
|
|
526
|
+
ortho.bottom = -ortho.top;
|
|
527
|
+
ortho.near = frustum.near;
|
|
528
|
+
ortho.far = frustum.far;
|
|
529
|
+
|
|
530
|
+
return ortho.computeCullingVolume(position, camera.getDirectionWC(), camera.getUpWC());
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
var perspPickingFrustum = new PerspectiveOffCenterFrustum();
|
|
534
|
+
function getPickPerspectiveCullingVolume(scene, windowPosition, width, height) {
|
|
535
|
+
var canvas = scene._canvas;
|
|
536
|
+
var camera = scene._camera;
|
|
537
|
+
var frustum = camera.frustum;
|
|
538
|
+
var near = frustum.near;
|
|
539
|
+
|
|
540
|
+
var canvasWidth = canvas.clientWidth;
|
|
541
|
+
var canvasHeight = canvas.clientHeight;
|
|
542
|
+
|
|
543
|
+
var tanPhi = Math.tan(frustum.fovy * 0.5);
|
|
544
|
+
var tanTheta = frustum.aspectRatio * tanPhi;
|
|
545
|
+
|
|
546
|
+
var x = (2.0 / canvasWidth) * windowPosition.x - 1.0;
|
|
547
|
+
var y = (2.0 / canvasHeight) * (canvasHeight - windowPosition.y) - 1.0;
|
|
548
|
+
|
|
549
|
+
var xDir = x * near * tanTheta;
|
|
550
|
+
var yDir = y * near * tanPhi;
|
|
551
|
+
|
|
552
|
+
var pixelSize = frustum.getPixelSize(new Cartesian2(canvasWidth, canvasHeight));
|
|
553
|
+
var pickWidth = pixelSize.x * width * 0.5;
|
|
554
|
+
var pickHeight = pixelSize.y * height * 0.5;
|
|
555
|
+
|
|
556
|
+
var offCenter = perspPickingFrustum;
|
|
557
|
+
offCenter.top = yDir + pickHeight;
|
|
558
|
+
offCenter.bottom = yDir - pickHeight;
|
|
559
|
+
offCenter.right = xDir + pickWidth;
|
|
560
|
+
offCenter.left = xDir - pickWidth;
|
|
561
|
+
offCenter.near = near;
|
|
562
|
+
offCenter.far = frustum.far;
|
|
563
|
+
|
|
564
|
+
return offCenter.computeCullingVolume(camera.getPositionWC(), camera.getDirectionWC(), camera.getUpWC());
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
function getPickCullingVolume(scene, windowPosition, width, height) {
|
|
568
|
+
if (scene.mode === SceneMode.SCENE2D) {
|
|
569
|
+
return getPickOrthographicCullingVolume(scene, windowPosition, width, height);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
return getPickPerspectiveCullingVolume(scene, windowPosition, width, height);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// pick rectangle width and height, assumed odd
|
|
576
|
+
var rectangleWidth = 3.0;
|
|
577
|
+
var rectangleHeight = 3.0;
|
|
578
|
+
var scratchRectangle = new BoundingRectangle(0.0, 0.0, rectangleWidth, rectangleHeight);
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* DOC_TBA
|
|
582
|
+
* @memberof Scene
|
|
583
|
+
*/
|
|
584
|
+
Scene.prototype.pick = function(windowPosition) {
|
|
585
|
+
var context = this._context;
|
|
586
|
+
var primitives = this._primitives;
|
|
587
|
+
var frameState = this._frameState;
|
|
588
|
+
|
|
589
|
+
this._pickFramebuffer = this._pickFramebuffer || context.createPickFramebuffer();
|
|
590
|
+
var fb = this._pickFramebuffer.begin();
|
|
591
|
+
|
|
592
|
+
// Update with previous frame's number aqnd time, assuming that render is called before picking.
|
|
593
|
+
updateFrameState(this, frameState.frameNumber, frameState.time);
|
|
594
|
+
frameState.cullingVolume = getPickCullingVolume(this, windowPosition, rectangleWidth, rectangleHeight);
|
|
595
|
+
frameState.passes.pick = true;
|
|
596
|
+
|
|
597
|
+
var commandLists = this._commandList;
|
|
598
|
+
commandLists.length = 0;
|
|
599
|
+
primitives.update(context, frameState, commandLists);
|
|
600
|
+
|
|
601
|
+
createPotentiallyVisibleSet(this, 'pickList');
|
|
602
|
+
executeCommands(this, fb);
|
|
603
|
+
|
|
604
|
+
scratchRectangle.x = windowPosition.x - ((rectangleWidth - 1.0) * 0.5);
|
|
605
|
+
scratchRectangle.y = (this._canvas.clientHeight - windowPosition.y) - ((rectangleHeight - 1.0) * 0.5);
|
|
606
|
+
return this._pickFramebuffer.end(scratchRectangle);
|
|
607
|
+
};
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* DOC_TBA
|
|
611
|
+
* @memberof Scene
|
|
612
|
+
*/
|
|
613
|
+
Scene.prototype.isDestroyed = function() {
|
|
614
|
+
return false;
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* DOC_TBA
|
|
619
|
+
* @memberof Scene
|
|
620
|
+
*/
|
|
621
|
+
Scene.prototype.destroy = function() {
|
|
622
|
+
this._screenSpaceCameraController = this._screenSpaceCameraController && this._screenSpaceCameraController.destroy();
|
|
623
|
+
this._pickFramebuffer = this._pickFramebuffer && this._pickFramebuffer.destroy();
|
|
624
|
+
this._primitives = this._primitives && this._primitives.destroy();
|
|
625
|
+
this.skyBox = this.skyBox && this.skyBox.destroy();
|
|
626
|
+
this.skyAtmosphere = this.skyAtmosphere && this.skyAtmosphere.destroy();
|
|
627
|
+
this._context = this._context && this._context.destroy();
|
|
628
|
+
return destroyObject(this);
|
|
629
|
+
};
|
|
630
|
+
|
|
631
|
+
return Scene;
|
|
632
|
+
});
|