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,183 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/destroyObject',
|
|
4
|
+
'../Core/BoundingRectangle',
|
|
5
|
+
'../Renderer/PixelFormat',
|
|
6
|
+
'./ViewportQuad'
|
|
7
|
+
], function(
|
|
8
|
+
destroyObject,
|
|
9
|
+
BoundingRectangle,
|
|
10
|
+
PixelFormat,
|
|
11
|
+
ViewportQuad) {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Draws a display in the top left corner of the scene displaying FPS (frames per second),
|
|
16
|
+
* averaged over 1 second intervals, as well as unaveraged frame time.
|
|
17
|
+
*
|
|
18
|
+
* @alias PerformanceDisplay
|
|
19
|
+
* @constructor
|
|
20
|
+
*
|
|
21
|
+
* @param {Color} [description.fpsColor] The color of the FPS graph.
|
|
22
|
+
* @param {Color} [description.frameTimeColor] The color of the frame time graph.
|
|
23
|
+
* @param {Color} [description.backgroundColor] The color of the background of the display.
|
|
24
|
+
* @param {String} [description.font] The CSS font of the text in the display.
|
|
25
|
+
* @param {BoundingRectangle} [description.rectangle] The position and size of the display, relative to the top left corner.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* scene.getPrimitives().add(new PerformanceDisplay());
|
|
29
|
+
*/
|
|
30
|
+
var PerformanceDisplay = function(description) {
|
|
31
|
+
if (typeof description === 'undefined') {
|
|
32
|
+
description = {};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
this._fpsColor = typeof description.fpsColor !== 'undefined' ? description.fpsColor.toCssColorString() : '#e52';
|
|
36
|
+
this._frameTimeColor = typeof description.frameTimeColor !== 'undefined' ? description.frameTimeColor.toCssColorString() : '#de3';
|
|
37
|
+
this._backgroundColor = typeof description.backgroundColor !== 'undefined' ? description.backgroundColor.toCssColorString() : 'rgba(0, 0, 30, 0.9)';
|
|
38
|
+
this._font = typeof description.font !== 'undefined' ? description.font : 'bold 10px Helvetica,Arial,sans-serif';
|
|
39
|
+
this._rectangle = typeof description.rectangle !== 'undefined' ? description.rectangle : new BoundingRectangle(0, 0, 80, 40);
|
|
40
|
+
|
|
41
|
+
this._canvas = document.createElement('canvas');
|
|
42
|
+
this._canvas.width = this._rectangle.width;
|
|
43
|
+
this._canvas.height = this._rectangle.height;
|
|
44
|
+
|
|
45
|
+
this._canvasContext = this._canvas.getContext('2d');
|
|
46
|
+
this._canvasContext.font = this._font;
|
|
47
|
+
this._canvasContext.lineWidth = 1;
|
|
48
|
+
|
|
49
|
+
this._bufferLength = this._rectangle.width;
|
|
50
|
+
this._frameTimeSamples = new Array(this._bufferLength);
|
|
51
|
+
this._fpsSamples = new Array(this._bufferLength);
|
|
52
|
+
|
|
53
|
+
for ( var i = 0; i < this._bufferLength; i++) {
|
|
54
|
+
this._frameTimeSamples[i] = this._fpsSamples[i] = 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
this._frameTimeIndex = 0;
|
|
58
|
+
this._fpsIndex = 0;
|
|
59
|
+
this._lastFpsSampleTime = undefined;
|
|
60
|
+
this._frameCount = 0;
|
|
61
|
+
|
|
62
|
+
this._quad = new ViewportQuad(new BoundingRectangle(0, 0, 0, 0));
|
|
63
|
+
this._quad.enableBlending = true;
|
|
64
|
+
|
|
65
|
+
this._time = undefined;
|
|
66
|
+
this._texture = undefined;
|
|
67
|
+
this._viewportHeight = 0;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Update the display. This function should only be called once per frame, because
|
|
72
|
+
* each call records a frame in the internal buffer and redraws the display.
|
|
73
|
+
*/
|
|
74
|
+
PerformanceDisplay.prototype.update = function(context, frameState, commandList) {
|
|
75
|
+
if (typeof this._time === 'undefined') {
|
|
76
|
+
//first update
|
|
77
|
+
this._lastFpsSampleTime = this._time = Date.now();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var previousTime = this._time;
|
|
82
|
+
var time = this._time = Date.now();
|
|
83
|
+
|
|
84
|
+
var frameTime = time - previousTime;
|
|
85
|
+
this._frameTimeSamples[this._frameTimeIndex++] = frameTime;
|
|
86
|
+
|
|
87
|
+
if (this._frameTimeIndex >= this._bufferLength) {
|
|
88
|
+
this._frameTimeIndex = 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
this._frameCount++;
|
|
92
|
+
var fps = this._fps;
|
|
93
|
+
var fpsElapsedTime = time - this._lastFpsSampleTime;
|
|
94
|
+
if (fpsElapsedTime > 1000) {
|
|
95
|
+
fps = this._fps = this._frameCount * 1000 / fpsElapsedTime | 0;
|
|
96
|
+
this._fpsSamples[this._fpsIndex++] = fps;
|
|
97
|
+
|
|
98
|
+
if (this._fpsIndex >= this._bufferLength) {
|
|
99
|
+
this._fpsIndex = 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
this._lastFpsSampleTime = time;
|
|
103
|
+
this._frameCount = 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
var ctx = this._canvasContext;
|
|
107
|
+
var canvasWidth = this._rectangle.width;
|
|
108
|
+
var canvasHeight = this._rectangle.height;
|
|
109
|
+
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
|
|
110
|
+
ctx.fillStyle = this._backgroundColor;
|
|
111
|
+
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
112
|
+
|
|
113
|
+
if (typeof fps !== 'undefined') {
|
|
114
|
+
ctx.fillStyle = this._fpsColor;
|
|
115
|
+
ctx.textAlign = 'left';
|
|
116
|
+
ctx.fillText(fps + ' FPS', 1, 10);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
ctx.fillStyle = this._frameTimeColor;
|
|
120
|
+
ctx.textAlign = 'right';
|
|
121
|
+
ctx.fillText(frameTime + ' MS', canvasWidth - 1, 10);
|
|
122
|
+
|
|
123
|
+
for ( var i = 0; i < this._bufferLength; i++) {
|
|
124
|
+
fps = this._fpsSamples[(i + this._fpsIndex) % this._bufferLength];
|
|
125
|
+
if (fps > 0) {
|
|
126
|
+
this._drawLine(this._fpsColor, i, fps / 100);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
frameTime = this._frameTimeSamples[(i + this._frameTimeIndex) % this._bufferLength];
|
|
130
|
+
if (frameTime > 0) {
|
|
131
|
+
this._drawLine(this._frameTimeColor, i, frameTime / 200);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (typeof this._texture === 'undefined') {
|
|
136
|
+
this._texture = context.createTexture2D({
|
|
137
|
+
source : this._canvas,
|
|
138
|
+
pixelFormat : PixelFormat.RGBA
|
|
139
|
+
});
|
|
140
|
+
this._quad.setTexture(this._texture);
|
|
141
|
+
} else {
|
|
142
|
+
this._texture.copyFrom(this._canvas);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var viewportHeight = context.getCanvas().clientHeight;
|
|
146
|
+
if (viewportHeight !== this._viewportHeight) {
|
|
147
|
+
this._viewportHeight = viewportHeight;
|
|
148
|
+
this._quad.setRectangle(new BoundingRectangle(this._rectangle.x, viewportHeight - canvasHeight - this._rectangle.y, canvasWidth, canvasHeight));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
this._quad.update(context, frameState, commandList);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
PerformanceDisplay.prototype._drawLine = function(style, x, valuePercent) {
|
|
155
|
+
var ctx = this._canvasContext;
|
|
156
|
+
var canvasHeight = this._rectangle.height;
|
|
157
|
+
var maxGraphHeight = canvasHeight - 10;
|
|
158
|
+
|
|
159
|
+
x = 0.5 + x;
|
|
160
|
+
ctx.beginPath();
|
|
161
|
+
ctx.strokeStyle = style;
|
|
162
|
+
ctx.moveTo(x, canvasHeight);
|
|
163
|
+
|
|
164
|
+
var lineHeight = valuePercent * maxGraphHeight;
|
|
165
|
+
if (lineHeight > maxGraphHeight) {
|
|
166
|
+
lineHeight = maxGraphHeight;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
var y = canvasHeight - lineHeight;
|
|
170
|
+
ctx.lineTo(x, y);
|
|
171
|
+
ctx.stroke();
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Destroys the WebGL resources held by this object.
|
|
176
|
+
*/
|
|
177
|
+
PerformanceDisplay.prototype.destroy = function() {
|
|
178
|
+
this._quad = this._quad.destroy();
|
|
179
|
+
return destroyObject(this);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
return PerformanceDisplay;
|
|
183
|
+
});
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/DeveloperError',
|
|
4
|
+
'../Core/destroyObject',
|
|
5
|
+
'../Core/Cartesian3',
|
|
6
|
+
'../Core/Cartesian4',
|
|
7
|
+
'../Core/Matrix4',
|
|
8
|
+
'../Scene/PerspectiveOffCenterFrustum'
|
|
9
|
+
], function(
|
|
10
|
+
DeveloperError,
|
|
11
|
+
destroyObject,
|
|
12
|
+
Cartesian3,
|
|
13
|
+
Cartesian4,
|
|
14
|
+
Matrix4,
|
|
15
|
+
PerspectiveOffCenterFrustum) {
|
|
16
|
+
"use strict";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The viewing frustum is defined by 6 planes.
|
|
20
|
+
* Each plane is represented by a {Cartesian4} object, where the x, y, and z components
|
|
21
|
+
* define the unit vector normal to the plane, and the w component is the distance of the
|
|
22
|
+
* plane from the origin/camera position.
|
|
23
|
+
*
|
|
24
|
+
* @alias PerspectiveFrustum
|
|
25
|
+
* @constructor
|
|
26
|
+
*
|
|
27
|
+
* @see PerspectiveOffCenterFrustum
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* var frustum = new PerspectiveFrustum();
|
|
31
|
+
* frustum.fovy = CesiumMath.PI_OVER_THREE;
|
|
32
|
+
* frustum.aspectRatio = canvas.clientWidth / canvas.clientHeight;
|
|
33
|
+
* frustum.near = 1.0;
|
|
34
|
+
* frustum.far = 2.0;
|
|
35
|
+
*/
|
|
36
|
+
var PerspectiveFrustum = function() {
|
|
37
|
+
this._offCenterFrustum = new PerspectiveOffCenterFrustum();
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The angle of the field of view, in radians.
|
|
41
|
+
* @type {Number}
|
|
42
|
+
*/
|
|
43
|
+
this.fovy = undefined;
|
|
44
|
+
this._fovy = undefined;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The aspect ratio of the frustum's width to it's height.
|
|
48
|
+
* @type {Number}
|
|
49
|
+
*/
|
|
50
|
+
this.aspectRatio = undefined;
|
|
51
|
+
this._aspectRatio = undefined;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The distance of the near plane.
|
|
55
|
+
* @type {Number}
|
|
56
|
+
*/
|
|
57
|
+
this.near = 1.0;
|
|
58
|
+
this._near = this.near;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The distance of the far plane.
|
|
62
|
+
* @type {Number}
|
|
63
|
+
*/
|
|
64
|
+
this.far = 500000000.0;
|
|
65
|
+
this._far = this.far;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Returns the perspective projection matrix computed from the view frustum.
|
|
70
|
+
*
|
|
71
|
+
* @memberof PerspectiveFrustum
|
|
72
|
+
*
|
|
73
|
+
* @return {Matrix4} The perspective projection matrix.
|
|
74
|
+
*
|
|
75
|
+
* @see PerspectiveFrustum#getInfiniteProjectionMatrix
|
|
76
|
+
*/
|
|
77
|
+
PerspectiveFrustum.prototype.getProjectionMatrix = function() {
|
|
78
|
+
update(this);
|
|
79
|
+
return this._offCenterFrustum.getProjectionMatrix();
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns the perspective projection matrix computed from the view frustum with an infinite far plane.
|
|
84
|
+
*
|
|
85
|
+
* @memberof PerspectiveFrustum
|
|
86
|
+
*
|
|
87
|
+
* @return {Matrix4} The infinite perspective projection matrix.
|
|
88
|
+
*
|
|
89
|
+
* @see PerspectiveFrustum#getProjectionMatrix
|
|
90
|
+
*/
|
|
91
|
+
PerspectiveFrustum.prototype.getInfiniteProjectionMatrix = function() {
|
|
92
|
+
update(this);
|
|
93
|
+
return this._offCenterFrustum.getInfiniteProjectionMatrix();
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
function update(frustum) {
|
|
97
|
+
if (typeof frustum.fovy === 'undefined' || typeof frustum.aspectRatio === 'undefined' ||
|
|
98
|
+
typeof frustum.near === 'undefined' || typeof frustum.far === 'undefined') {
|
|
99
|
+
throw new DeveloperError('fovy, aspectRatio, near, or far parameters are not set.');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
var f = frustum._offCenterFrustum;
|
|
103
|
+
|
|
104
|
+
if (frustum.fovy !== frustum._fovy || frustum.aspectRatio !== frustum._aspectRatio ||
|
|
105
|
+
frustum.near !== frustum._near || frustum.far !== frustum._far) {
|
|
106
|
+
if (frustum.fovy < 0 || frustum.fovy >= Math.PI) {
|
|
107
|
+
throw new DeveloperError('fovy must be in the range [0, PI).');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (frustum.aspectRatio < 0) {
|
|
111
|
+
throw new DeveloperError('aspectRatio must be positive.');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (frustum.near < 0 || frustum.near > frustum.far) {
|
|
115
|
+
throw new DeveloperError('near must be greater than zero and less than far.');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
frustum._fovy = frustum.fovy;
|
|
119
|
+
frustum._aspectRatio = frustum.aspectRatio;
|
|
120
|
+
frustum._near = frustum.near;
|
|
121
|
+
frustum._far = frustum.far;
|
|
122
|
+
|
|
123
|
+
f.top = frustum.near * Math.tan(0.5 * frustum.fovy);
|
|
124
|
+
f.bottom = -f.top;
|
|
125
|
+
f.right = frustum.aspectRatio * f.top;
|
|
126
|
+
f.left = -f.right;
|
|
127
|
+
f.near = frustum.near;
|
|
128
|
+
f.far = frustum.far;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Creates a culling volume for this frustum.
|
|
134
|
+
*
|
|
135
|
+
* @memberof PerspectiveFrustum
|
|
136
|
+
*
|
|
137
|
+
* @param {Cartesian3} position The eye position.
|
|
138
|
+
* @param {Cartesian3} direction The view direction.
|
|
139
|
+
* @param {Cartesian3} up The up direction.
|
|
140
|
+
*
|
|
141
|
+
* @exception {DeveloperError} position is required.
|
|
142
|
+
* @exception {DeveloperError} direction is required.
|
|
143
|
+
* @exception {DeveloperError} up is required.
|
|
144
|
+
*
|
|
145
|
+
* @return {CullingVolume} A culling volume at the given position and orientation.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* // Check if a bounding volume intersects the frustum.
|
|
149
|
+
* var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
|
|
150
|
+
* var intersect = cullingVolume.getVisibility(boundingVolume);
|
|
151
|
+
*/
|
|
152
|
+
PerspectiveFrustum.prototype.computeCullingVolume = function(position, direction, up) {
|
|
153
|
+
update(this);
|
|
154
|
+
return this._offCenterFrustum.computeCullingVolume(position, direction, up);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Returns the pixel's width and height in meters.
|
|
159
|
+
*
|
|
160
|
+
* @memberof PerspectiveFrustum
|
|
161
|
+
*
|
|
162
|
+
* @param {Cartesian2} canvasDimensions A {@link Cartesian2} with width and height in the x and y properties, respectively.
|
|
163
|
+
* @param {Number} [distance=near plane distance] The distance to the near plane in meters.
|
|
164
|
+
*
|
|
165
|
+
* @exception {DeveloperError} canvasDimensions is required.
|
|
166
|
+
* @exception {DeveloperError} canvasDimensions.x must be greater than zero.
|
|
167
|
+
* @exception {DeveloperError} canvasDimensione.y must be greater than zero.
|
|
168
|
+
*
|
|
169
|
+
* @returns {Cartesian2} A {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* // Example 1
|
|
173
|
+
* // Get the width and height of a pixel.
|
|
174
|
+
* var pixelSize = camera.frustum.getPixelSize({
|
|
175
|
+
* width : canvas.clientWidth,
|
|
176
|
+
* height : canvas.clientHeight
|
|
177
|
+
* });
|
|
178
|
+
*
|
|
179
|
+
* // Example 2
|
|
180
|
+
* // Get the width and height of a pixel if the near plane was set to 'distance'.
|
|
181
|
+
* // For example, get the size of a pixel of an image on a billboard.
|
|
182
|
+
* var position = camera.position;
|
|
183
|
+
* var direction = camera.direction;
|
|
184
|
+
* var toCenter = primitive.boundingVolume.center.subtract(position); // vector from camera to a primitive
|
|
185
|
+
* var toCenterProj = direction.multiplyByScalar(direction.dot(toCenter)); // project vector onto camera direction vector
|
|
186
|
+
* var distance = toCenterProj.magnitude();
|
|
187
|
+
* var pixelSize = camera.frustum.getPixelSize({
|
|
188
|
+
* width : canvas.clientWidth,
|
|
189
|
+
* height : canvas.clientHeight
|
|
190
|
+
* }, distance);
|
|
191
|
+
*/
|
|
192
|
+
PerspectiveFrustum.prototype.getPixelSize = function(canvasDimensions, distance) {
|
|
193
|
+
update(this);
|
|
194
|
+
return this._offCenterFrustum.getPixelSize(canvasDimensions, distance);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Returns a duplicate of a PerspectiveFrustum instance.
|
|
199
|
+
*
|
|
200
|
+
* @memberof PerspectiveFrustum
|
|
201
|
+
*
|
|
202
|
+
* @return {PerspectiveFrustum} A new copy of the PerspectiveFrustum instance.
|
|
203
|
+
*/
|
|
204
|
+
PerspectiveFrustum.prototype.clone = function() {
|
|
205
|
+
var frustum = new PerspectiveFrustum();
|
|
206
|
+
frustum.fovy = this.fovy;
|
|
207
|
+
frustum.aspectRatio = this.aspectRatio;
|
|
208
|
+
frustum.near = this.near;
|
|
209
|
+
frustum.far = this.far;
|
|
210
|
+
frustum._offCenterFrustum = this._offCenterFrustum.clone();
|
|
211
|
+
return frustum;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Compares the provided PerspectiveFrustum componentwise and returns
|
|
216
|
+
* <code>true</code> if they are equal, <code>false</code> otherwise.
|
|
217
|
+
*
|
|
218
|
+
* @memberof PerspectiveFrustum
|
|
219
|
+
*
|
|
220
|
+
* @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum.
|
|
221
|
+
* @return {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.
|
|
222
|
+
*/
|
|
223
|
+
PerspectiveFrustum.prototype.equals = function(other) {
|
|
224
|
+
if (typeof other === 'undefined') {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
update(this);
|
|
229
|
+
update(other);
|
|
230
|
+
|
|
231
|
+
return (this.fovy === other.fovy &&
|
|
232
|
+
this.aspectRatio === other.aspectRatio &&
|
|
233
|
+
this.near === other.near &&
|
|
234
|
+
this.far === other.far &&
|
|
235
|
+
this._offCenterFrustum.equals(other._offCenterFrustum));
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
return PerspectiveFrustum;
|
|
239
|
+
});
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/*global define*/
|
|
2
|
+
define([
|
|
3
|
+
'../Core/DeveloperError',
|
|
4
|
+
'../Core/defaultValue',
|
|
5
|
+
'../Core/destroyObject',
|
|
6
|
+
'../Core/Cartesian2',
|
|
7
|
+
'../Core/Cartesian3',
|
|
8
|
+
'../Core/Cartesian4',
|
|
9
|
+
'../Core/Matrix4',
|
|
10
|
+
'../Scene/CullingVolume'
|
|
11
|
+
], function(
|
|
12
|
+
DeveloperError,
|
|
13
|
+
defaultValue,
|
|
14
|
+
destroyObject,
|
|
15
|
+
Cartesian2,
|
|
16
|
+
Cartesian3,
|
|
17
|
+
Cartesian4,
|
|
18
|
+
Matrix4,
|
|
19
|
+
CullingVolume) {
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The viewing frustum is defined by 6 planes.
|
|
24
|
+
* Each plane is represented by a {Cartesian4} object, where the x, y, and z components
|
|
25
|
+
* define the unit vector normal to the plane, and the w component is the distance of the
|
|
26
|
+
* plane from the origin/camera position.
|
|
27
|
+
*
|
|
28
|
+
* @alias PerspectiveOffCenterFrustum
|
|
29
|
+
* @constructor
|
|
30
|
+
*
|
|
31
|
+
* @see PerspectiveFrustum
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* var frustum = new PerspectiveOffCenterFrustum();
|
|
35
|
+
* frustum.right = 1.0;
|
|
36
|
+
* frustum.left = -1.0;
|
|
37
|
+
* frustum.top = 1.0;
|
|
38
|
+
* frustum.bottom = -1.0;
|
|
39
|
+
* frustum.near = 1.0;
|
|
40
|
+
* frustum.far = 2.0;
|
|
41
|
+
*/
|
|
42
|
+
var PerspectiveOffCenterFrustum = function() {
|
|
43
|
+
/**
|
|
44
|
+
* Defines the left clipping plane.
|
|
45
|
+
* @type {Number}
|
|
46
|
+
*/
|
|
47
|
+
this.left = undefined;
|
|
48
|
+
this._left = undefined;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Defines the right clipping plane.
|
|
52
|
+
* @type {Number}
|
|
53
|
+
*/
|
|
54
|
+
this.right = undefined;
|
|
55
|
+
this._right = undefined;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Defines the top clipping plane.
|
|
59
|
+
* @type {Number}
|
|
60
|
+
*/
|
|
61
|
+
this.top = undefined;
|
|
62
|
+
this._top = undefined;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Defines the bottom clipping plane.
|
|
66
|
+
* @type {Number}
|
|
67
|
+
*/
|
|
68
|
+
this.bottom = undefined;
|
|
69
|
+
this._bottom = undefined;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The distance of the near plane.
|
|
73
|
+
* @type {Number}
|
|
74
|
+
*/
|
|
75
|
+
this.near = 1.0;
|
|
76
|
+
this._near = this.near;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The distance of the far plane.
|
|
80
|
+
* @type {Number}
|
|
81
|
+
*/
|
|
82
|
+
this.far = 500000000.0;
|
|
83
|
+
this._far = this.far;
|
|
84
|
+
|
|
85
|
+
this._cullingVolume = new CullingVolume();
|
|
86
|
+
this._perspectiveMatrix = undefined;
|
|
87
|
+
this._infinitePerspective = undefined;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Returns the perspective projection matrix computed from the view frustum.
|
|
92
|
+
*
|
|
93
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
94
|
+
*
|
|
95
|
+
* @return {Matrix4} The perspective projection matrix.
|
|
96
|
+
*
|
|
97
|
+
* @see PerspectiveOffCenterFrustum#getInfiniteProjectionMatrix
|
|
98
|
+
*/
|
|
99
|
+
PerspectiveOffCenterFrustum.prototype.getProjectionMatrix = function() {
|
|
100
|
+
update(this);
|
|
101
|
+
return this._perspectiveMatrix;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Returns the perspective projection matrix computed from the view frustum with an infinite far plane.
|
|
106
|
+
*
|
|
107
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
108
|
+
*
|
|
109
|
+
* @return {Matrix4} The infinite perspective projection matrix.
|
|
110
|
+
*
|
|
111
|
+
* @see PerspectiveOffCenterFrustum#getProjectionMatrix
|
|
112
|
+
*/
|
|
113
|
+
PerspectiveOffCenterFrustum.prototype.getInfiniteProjectionMatrix = function() {
|
|
114
|
+
update(this);
|
|
115
|
+
return this._infinitePerspective;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
function update(frustum) {
|
|
119
|
+
if (typeof frustum.right === 'undefined' || typeof frustum.left === 'undefined' ||
|
|
120
|
+
typeof frustum.top === 'undefined' || typeof frustum.bottom === 'undefined' ||
|
|
121
|
+
typeof frustum.near ===' undefined' || typeof frustum.far === 'undefined') {
|
|
122
|
+
throw new DeveloperError('right, left, top, bottom, near, or far parameters are not set.');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var t = frustum.top;
|
|
126
|
+
var b = frustum.bottom;
|
|
127
|
+
var r = frustum.right;
|
|
128
|
+
var l = frustum.left;
|
|
129
|
+
var n = frustum.near;
|
|
130
|
+
var f = frustum.far;
|
|
131
|
+
|
|
132
|
+
if (t !== frustum._top || b !== frustum._bottom ||
|
|
133
|
+
l !== frustum._left || r !== frustum._right ||
|
|
134
|
+
n !== frustum._near || f !== frustum._far) {
|
|
135
|
+
|
|
136
|
+
if (frustum.near <= 0 || frustum.near > frustum.far) {
|
|
137
|
+
throw new DeveloperError('near must be greater than zero and less than far.');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
frustum._left = l;
|
|
141
|
+
frustum._right = r;
|
|
142
|
+
frustum._top = t;
|
|
143
|
+
frustum._bottom = b;
|
|
144
|
+
frustum._near = n;
|
|
145
|
+
frustum._far = f;
|
|
146
|
+
frustum._perspectiveMatrix = Matrix4.computePerspectiveOffCenter(l, r, b, t, n, f);
|
|
147
|
+
frustum._infinitePerspective = Matrix4.computeInfinitePerspectiveOffCenter(l, r, b, t, n);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var getPlanesRight = new Cartesian3();
|
|
152
|
+
var getPlanesNearCenter = new Cartesian3();
|
|
153
|
+
var getPlanesFarCenter = new Cartesian3();
|
|
154
|
+
var getPlanesNormal = new Cartesian3();
|
|
155
|
+
/**
|
|
156
|
+
* Creates a culling volume for this frustum.
|
|
157
|
+
*
|
|
158
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
159
|
+
*
|
|
160
|
+
* @param {Cartesian3} position The eye position.
|
|
161
|
+
* @param {Cartesian3} direction The view direction.
|
|
162
|
+
* @param {Cartesian3} up The up direction.
|
|
163
|
+
*
|
|
164
|
+
* @exception {DeveloperError} position is required.
|
|
165
|
+
* @exception {DeveloperError} direction is required.
|
|
166
|
+
* @exception {DeveloperError} up is required.
|
|
167
|
+
*
|
|
168
|
+
* @return {CullingVolume} A culling volume at the given position and orientation.
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* // Check if a bounding volume intersects the frustum.
|
|
172
|
+
* var cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);
|
|
173
|
+
* var intersect = cullingVolume.getVisibility(boundingVolume);
|
|
174
|
+
*/
|
|
175
|
+
PerspectiveOffCenterFrustum.prototype.computeCullingVolume = function(position, direction, up) {
|
|
176
|
+
if (typeof position === 'undefined') {
|
|
177
|
+
throw new DeveloperError('position is required.');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (typeof direction === 'undefined') {
|
|
181
|
+
throw new DeveloperError('direction is required.');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (typeof up === 'undefined') {
|
|
185
|
+
throw new DeveloperError('up is required.');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
var planes = this._cullingVolume.planes;
|
|
189
|
+
|
|
190
|
+
var t = this.top;
|
|
191
|
+
var b = this.bottom;
|
|
192
|
+
var r = this.right;
|
|
193
|
+
var l = this.left;
|
|
194
|
+
var n = this.near;
|
|
195
|
+
var f = this.far;
|
|
196
|
+
|
|
197
|
+
var right = Cartesian3.cross(direction, up, getPlanesRight);
|
|
198
|
+
|
|
199
|
+
var nearCenter = getPlanesNearCenter;
|
|
200
|
+
Cartesian3.multiplyByScalar(direction, n, nearCenter);
|
|
201
|
+
Cartesian3.add(position, nearCenter, nearCenter);
|
|
202
|
+
|
|
203
|
+
var farCenter = getPlanesFarCenter;
|
|
204
|
+
Cartesian3.multiplyByScalar(direction, f, farCenter);
|
|
205
|
+
Cartesian3.add(position, farCenter, farCenter);
|
|
206
|
+
|
|
207
|
+
var normal = getPlanesNormal;
|
|
208
|
+
|
|
209
|
+
//Left plane computation
|
|
210
|
+
Cartesian3.multiplyByScalar(right, l, normal);
|
|
211
|
+
Cartesian3.add(nearCenter, normal, normal);
|
|
212
|
+
Cartesian3.subtract(normal, position, normal);
|
|
213
|
+
Cartesian3.normalize(normal, normal);
|
|
214
|
+
Cartesian3.cross(normal, up, normal);
|
|
215
|
+
|
|
216
|
+
var plane = planes[0];
|
|
217
|
+
if (typeof plane === 'undefined') {
|
|
218
|
+
plane = planes[0] = new Cartesian4();
|
|
219
|
+
}
|
|
220
|
+
plane.x = normal.x;
|
|
221
|
+
plane.y = normal.y;
|
|
222
|
+
plane.z = normal.z;
|
|
223
|
+
plane.w = -Cartesian3.dot(normal, position);
|
|
224
|
+
|
|
225
|
+
//Right plane computation
|
|
226
|
+
Cartesian3.multiplyByScalar(right, r, normal);
|
|
227
|
+
Cartesian3.add(nearCenter, normal, normal);
|
|
228
|
+
Cartesian3.subtract(normal, position, normal);
|
|
229
|
+
Cartesian3.normalize(normal, normal);
|
|
230
|
+
Cartesian3.cross(up, normal, normal);
|
|
231
|
+
|
|
232
|
+
plane = planes[1];
|
|
233
|
+
if (typeof plane === 'undefined') {
|
|
234
|
+
plane = planes[1] = new Cartesian4();
|
|
235
|
+
}
|
|
236
|
+
plane.x = normal.x;
|
|
237
|
+
plane.y = normal.y;
|
|
238
|
+
plane.z = normal.z;
|
|
239
|
+
plane.w = -Cartesian3.dot(normal, position);
|
|
240
|
+
|
|
241
|
+
//Bottom plane computation
|
|
242
|
+
Cartesian3.multiplyByScalar(up, b, normal);
|
|
243
|
+
Cartesian3.add(nearCenter, normal, normal);
|
|
244
|
+
Cartesian3.subtract(normal, position, normal);
|
|
245
|
+
Cartesian3.normalize(normal, normal);
|
|
246
|
+
Cartesian3.cross(right, normal, normal);
|
|
247
|
+
|
|
248
|
+
plane = planes[2];
|
|
249
|
+
if (typeof plane === 'undefined') {
|
|
250
|
+
plane = planes[2] = new Cartesian4();
|
|
251
|
+
}
|
|
252
|
+
plane.x = normal.x;
|
|
253
|
+
plane.y = normal.y;
|
|
254
|
+
plane.z = normal.z;
|
|
255
|
+
plane.w = -Cartesian3.dot(normal, position);
|
|
256
|
+
|
|
257
|
+
//Top plane computation
|
|
258
|
+
Cartesian3.multiplyByScalar(up, t, normal);
|
|
259
|
+
Cartesian3.add(nearCenter, normal, normal);
|
|
260
|
+
Cartesian3.subtract(normal, position, normal);
|
|
261
|
+
Cartesian3.normalize(normal, normal);
|
|
262
|
+
Cartesian3.cross(normal, right, normal);
|
|
263
|
+
|
|
264
|
+
plane = planes[3];
|
|
265
|
+
if (typeof plane === 'undefined') {
|
|
266
|
+
plane = planes[3] = new Cartesian4();
|
|
267
|
+
}
|
|
268
|
+
plane.x = normal.x;
|
|
269
|
+
plane.y = normal.y;
|
|
270
|
+
plane.z = normal.z;
|
|
271
|
+
plane.w = -Cartesian3.dot(normal, position);
|
|
272
|
+
|
|
273
|
+
//Near plane computation
|
|
274
|
+
plane = planes[4];
|
|
275
|
+
if (typeof plane === 'undefined') {
|
|
276
|
+
plane = planes[4] = new Cartesian4();
|
|
277
|
+
}
|
|
278
|
+
plane.x = direction.x;
|
|
279
|
+
plane.y = direction.y;
|
|
280
|
+
plane.z = direction.z;
|
|
281
|
+
plane.w = -Cartesian3.dot(direction, nearCenter);
|
|
282
|
+
|
|
283
|
+
//Far plane computation
|
|
284
|
+
Cartesian3.negate(direction, normal);
|
|
285
|
+
|
|
286
|
+
plane = planes[5];
|
|
287
|
+
if (typeof plane === 'undefined') {
|
|
288
|
+
plane = planes[5] = new Cartesian4();
|
|
289
|
+
}
|
|
290
|
+
plane.x = normal.x;
|
|
291
|
+
plane.y = normal.y;
|
|
292
|
+
plane.z = normal.z;
|
|
293
|
+
plane.w = -Cartesian3.dot(normal, farCenter);
|
|
294
|
+
|
|
295
|
+
return this._cullingVolume;
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Returns the pixel's width and height in meters.
|
|
300
|
+
*
|
|
301
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
302
|
+
*
|
|
303
|
+
* @param {Cartesian2} canvasDimensions A {@link Cartesian2} with width and height in the x and y properties, respectively.
|
|
304
|
+
* @param {Number} [distance=near plane distance] The distance to the near plane in meters.
|
|
305
|
+
*
|
|
306
|
+
* @exception {DeveloperError} canvasDimensions is required.
|
|
307
|
+
* @exception {DeveloperError} canvasDimensions.x must be greater than zero.
|
|
308
|
+
* @exception {DeveloperError} canvasDimensione.y must be greater than zero.
|
|
309
|
+
*
|
|
310
|
+
* @returns {Cartesian2} A {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* // Example 1
|
|
314
|
+
* // Get the width and height of a pixel.
|
|
315
|
+
* var pixelSize = camera.frustum.getPixelSize(new Cartesian2(canvas.clientWidth, canvas.clientHeight));
|
|
316
|
+
*
|
|
317
|
+
* // Example 2
|
|
318
|
+
* // Get the width and height of a pixel if the near plane was set to 'distance'.
|
|
319
|
+
* // For example, get the size of a pixel of an image on a billboard.
|
|
320
|
+
* var position = camera.position;
|
|
321
|
+
* var direction = camera.direction;
|
|
322
|
+
* var toCenter = primitive.boundingVolume.center.subtract(position); // vector from camera to a primitive
|
|
323
|
+
* var toCenterProj = direction.multiplyByScalar(direction.dot(toCenter)); // project vector onto camera direction vector
|
|
324
|
+
* var distance = toCenterProj.magnitude();
|
|
325
|
+
* var pixelSize = camera.frustum.getPixelSize(new Cartesian2(canvas.clientWidth, canvas.clientHeight), distance);
|
|
326
|
+
*/
|
|
327
|
+
PerspectiveOffCenterFrustum.prototype.getPixelSize = function(canvasDimensions, distance) {
|
|
328
|
+
update(this);
|
|
329
|
+
|
|
330
|
+
if (typeof canvasDimensions === 'undefined') {
|
|
331
|
+
throw new DeveloperError('canvasDimensions is required.');
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
var width = canvasDimensions.x;
|
|
335
|
+
var height = canvasDimensions.y;
|
|
336
|
+
|
|
337
|
+
if (width <= 0) {
|
|
338
|
+
throw new DeveloperError('canvasDimensions.x must be grater than zero.');
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
if (height <= 0) {
|
|
342
|
+
throw new DeveloperError('canvasDimensions.y must be grater than zero.');
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
distance = defaultValue(distance, this.near);
|
|
346
|
+
|
|
347
|
+
var inverseNear = 1.0 / this.near;
|
|
348
|
+
var tanTheta = this.top * inverseNear;
|
|
349
|
+
var pixelHeight = 2.0 * distance * tanTheta / height;
|
|
350
|
+
tanTheta = this.right * inverseNear;
|
|
351
|
+
var pixelWidth = 2.0 * distance * tanTheta / width;
|
|
352
|
+
|
|
353
|
+
return new Cartesian2(pixelWidth, pixelHeight);
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Returns a duplicate of a PerspectiveOffCenterFrustum instance.
|
|
358
|
+
*
|
|
359
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
360
|
+
*
|
|
361
|
+
* @return {PerspectiveOffCenterFrustum} A new copy of the PerspectiveOffCenterFrustum instance.
|
|
362
|
+
*/
|
|
363
|
+
PerspectiveOffCenterFrustum.prototype.clone = function() {
|
|
364
|
+
var frustum = new PerspectiveOffCenterFrustum();
|
|
365
|
+
frustum.right = this.right;
|
|
366
|
+
frustum.left = this.left;
|
|
367
|
+
frustum.top = this.top;
|
|
368
|
+
frustum.bottom = this.bottom;
|
|
369
|
+
frustum.near = this.near;
|
|
370
|
+
frustum.far = this.far;
|
|
371
|
+
return frustum;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Compares the provided PerspectiveOffCenterFrustum componentwise and returns
|
|
376
|
+
* <code>true</code> if they are equal, <code>false</code> otherwise.
|
|
377
|
+
*
|
|
378
|
+
* @memberof PerspectiveOffCenterFrustum
|
|
379
|
+
*
|
|
380
|
+
* @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum.
|
|
381
|
+
* @return {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.
|
|
382
|
+
*/
|
|
383
|
+
PerspectiveOffCenterFrustum.prototype.equals = function(other) {
|
|
384
|
+
return (typeof other !== 'undefined' &&
|
|
385
|
+
this.right === other.right &&
|
|
386
|
+
this.left === other.left &&
|
|
387
|
+
this.top === other.top &&
|
|
388
|
+
this.bottom === other.bottom &&
|
|
389
|
+
this.near === other.near &&
|
|
390
|
+
this.far === other.far);
|
|
391
|
+
};
|
|
392
|
+
|
|
393
|
+
return PerspectiveOffCenterFrustum;
|
|
394
|
+
});
|