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.
Files changed (491) hide show
  1. data/LICENSE.md +259 -0
  2. data/README.rdoc +90 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
  5. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  6. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  7. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  8. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  9. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  10. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  11. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  12. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  13. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  14. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  15. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  16. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  17. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  18. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  19. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  20. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  21. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  22. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  23. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  24. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  25. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  26. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  27. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  28. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  29. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  30. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  31. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  32. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  33. data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
  34. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  35. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  36. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  37. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  38. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  39. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  40. data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
  41. data/app/assets/javascripts/Assets/package.json +6 -0
  42. data/app/assets/javascripts/Cesium.js +320 -0
  43. data/app/assets/javascripts/Core/AnimationController.js +148 -0
  44. data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
  45. data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
  46. data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
  47. data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
  48. data/app/assets/javascripts/Core/Cartesian2.js +762 -0
  49. data/app/assets/javascripts/Core/Cartesian3.js +861 -0
  50. data/app/assets/javascripts/Core/Cartesian4.js +762 -0
  51. data/app/assets/javascripts/Core/Cartographic.js +211 -0
  52. data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
  53. data/app/assets/javascripts/Core/Clock.js +195 -0
  54. data/app/assets/javascripts/Core/ClockRange.js +37 -0
  55. data/app/assets/javascripts/Core/ClockStep.js +32 -0
  56. data/app/assets/javascripts/Core/Color.js +1629 -0
  57. data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
  58. data/app/assets/javascripts/Core/Core.profile.js +8 -0
  59. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
  60. data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
  61. data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
  62. data/app/assets/javascripts/Core/DeveloperError.js +60 -0
  63. data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
  64. data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
  65. data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
  66. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
  67. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
  68. data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
  69. data/app/assets/javascripts/Core/Enumeration.js +67 -0
  70. data/app/assets/javascripts/Core/Event.js +122 -0
  71. data/app/assets/javascripts/Core/Extent.js +383 -0
  72. data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
  73. data/app/assets/javascripts/Core/FAR.js +13 -0
  74. data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
  75. data/app/assets/javascripts/Core/Fullscreen.js +235 -0
  76. data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
  77. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
  78. data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
  79. data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
  80. data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
  81. data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
  82. data/app/assets/javascripts/Core/Intersect.js +40 -0
  83. data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
  84. data/app/assets/javascripts/Core/Interval.js +27 -0
  85. data/app/assets/javascripts/Core/Iso8601.js +46 -0
  86. data/app/assets/javascripts/Core/JulianDate.js +1228 -0
  87. data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
  88. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
  89. data/app/assets/javascripts/Core/LeapSecond.js +158 -0
  90. data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
  91. data/app/assets/javascripts/Core/Math.js +532 -0
  92. data/app/assets/javascripts/Core/Matrix2.js +833 -0
  93. data/app/assets/javascripts/Core/Matrix3.js +1099 -0
  94. data/app/assets/javascripts/Core/Matrix4.js +2164 -0
  95. data/app/assets/javascripts/Core/MeshFilters.js +568 -0
  96. data/app/assets/javascripts/Core/Occluder.js +474 -0
  97. data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
  98. data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
  99. data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
  100. data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
  101. data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
  102. data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
  103. data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
  104. data/app/assets/javascripts/Core/Quaternion.js +947 -0
  105. data/app/assets/javascripts/Core/Queue.js +95 -0
  106. data/app/assets/javascripts/Core/Ray.js +64 -0
  107. data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
  108. data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
  109. data/app/assets/javascripts/Core/RuntimeError.js +59 -0
  110. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
  111. data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
  112. data/app/assets/javascripts/Core/Shapes.js +230 -0
  113. data/app/assets/javascripts/Core/Spherical.js +192 -0
  114. data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
  115. data/app/assets/javascripts/Core/TimeConstants.js +85 -0
  116. data/app/assets/javascripts/Core/TimeInterval.js +305 -0
  117. data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
  118. data/app/assets/javascripts/Core/TimeStandard.js +31 -0
  119. data/app/assets/javascripts/Core/Tipsify.js +285 -0
  120. data/app/assets/javascripts/Core/Transforms.js +614 -0
  121. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
  122. data/app/assets/javascripts/Core/Visibility.js +38 -0
  123. data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
  124. data/app/assets/javascripts/Core/WindingOrder.js +40 -0
  125. data/app/assets/javascripts/Core/binarySearch.js +69 -0
  126. data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
  127. data/app/assets/javascripts/Core/clone.js +21 -0
  128. data/app/assets/javascripts/Core/combine.js +81 -0
  129. data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
  130. data/app/assets/javascripts/Core/createGuid.js +25 -0
  131. data/app/assets/javascripts/Core/defaultValue.js +22 -0
  132. data/app/assets/javascripts/Core/destroyObject.js +61 -0
  133. data/app/assets/javascripts/Core/freezeObject.js +20 -0
  134. data/app/assets/javascripts/Core/getImagePixels.js +46 -0
  135. data/app/assets/javascripts/Core/isLeapYear.js +30 -0
  136. data/app/assets/javascripts/Core/jsonp.js +116 -0
  137. data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
  138. data/app/assets/javascripts/Core/loadImage.js +85 -0
  139. data/app/assets/javascripts/Core/loadJson.js +54 -0
  140. data/app/assets/javascripts/Core/loadText.js +78 -0
  141. data/app/assets/javascripts/Core/loadXML.js +76 -0
  142. data/app/assets/javascripts/Core/package.json +6 -0
  143. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
  144. data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
  145. data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
  146. data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
  147. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
  148. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
  149. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
  150. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
  151. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
  152. data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
  153. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
  154. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
  155. data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
  156. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
  157. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
  158. data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
  159. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
  160. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
  161. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
  162. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
  163. data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
  164. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
  165. data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
  166. data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
  167. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
  168. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
  169. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
  170. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
  171. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
  172. data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
  173. data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
  174. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
  175. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
  176. data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
  177. data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
  178. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
  179. data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
  180. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
  181. data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
  182. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
  183. data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
  184. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
  185. data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
  186. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
  187. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
  188. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
  189. data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
  190. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
  191. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
  192. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
  193. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
  194. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
  195. data/app/assets/javascripts/DynamicScene/package.json +6 -0
  196. data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
  197. data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
  198. data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
  199. data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
  200. data/app/assets/javascripts/Renderer/Buffer.js +141 -0
  201. data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
  202. data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
  203. data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
  204. data/app/assets/javascripts/Renderer/Context.js +2805 -0
  205. data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
  206. data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
  207. data/app/assets/javascripts/Renderer/CullFace.js +50 -0
  208. data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
  209. data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
  210. data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
  211. data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
  212. data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
  213. data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
  214. data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
  215. data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
  216. data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
  217. data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
  218. data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
  219. data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
  220. data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
  221. data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
  222. data/app/assets/javascripts/Renderer/Texture.js +395 -0
  223. data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
  224. data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
  225. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
  226. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
  227. data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
  228. data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
  229. data/app/assets/javascripts/Renderer/UniformState.js +799 -0
  230. data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
  231. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
  232. data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
  233. data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
  234. data/app/assets/javascripts/Renderer/package.json +6 -0
  235. data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
  236. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
  237. data/app/assets/javascripts/Scene/Billboard.js +680 -0
  238. data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
  239. data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
  240. data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
  241. data/app/assets/javascripts/Scene/Camera.js +358 -0
  242. data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
  243. data/app/assets/javascripts/Scene/CameraController.js +1258 -0
  244. data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
  245. data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
  246. data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
  247. data/app/assets/javascripts/Scene/CentralBody.js +817 -0
  248. data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
  249. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
  250. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
  251. data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
  252. data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
  253. data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
  254. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
  255. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
  256. data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
  257. data/app/assets/javascripts/Scene/FrameState.js +86 -0
  258. data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
  259. data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
  260. data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
  261. data/app/assets/javascripts/Scene/Imagery.js +85 -0
  262. data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
  263. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
  264. data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
  265. data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
  266. data/app/assets/javascripts/Scene/ImageryState.js +20 -0
  267. data/app/assets/javascripts/Scene/Label.js +706 -0
  268. data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
  269. data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
  270. data/app/assets/javascripts/Scene/Material.js +1177 -0
  271. data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
  272. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
  273. data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
  274. data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
  275. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
  276. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
  277. data/app/assets/javascripts/Scene/Polygon.js +886 -0
  278. data/app/assets/javascripts/Scene/Polyline.js +441 -0
  279. data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
  280. data/app/assets/javascripts/Scene/Projections.js +93 -0
  281. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
  282. data/app/assets/javascripts/Scene/Scene.js +632 -0
  283. data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
  284. data/app/assets/javascripts/Scene/SceneMode.js +51 -0
  285. data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
  286. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
  287. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
  288. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
  289. data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
  290. data/app/assets/javascripts/Scene/SkyBox.js +231 -0
  291. data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
  292. data/app/assets/javascripts/Scene/TexturePool.js +154 -0
  293. data/app/assets/javascripts/Scene/Tile.js +322 -0
  294. data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
  295. data/app/assets/javascripts/Scene/TileImagery.js +36 -0
  296. data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
  297. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
  298. data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
  299. data/app/assets/javascripts/Scene/TileState.js +19 -0
  300. data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
  301. data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
  302. data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
  303. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
  304. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
  305. data/app/assets/javascripts/Scene/package.json +6 -0
  306. data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
  307. data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
  308. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
  309. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
  310. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
  311. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
  312. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
  313. data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
  314. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
  315. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
  316. data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
  317. data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
  318. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
  319. data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
  320. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
  321. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
  322. data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
  323. data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
  324. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
  325. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
  326. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
  327. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
  328. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
  329. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
  330. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
  331. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
  332. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
  333. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
  334. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
  335. data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
  336. data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
  337. data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
  338. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
  339. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
  340. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
  341. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
  342. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
  343. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
  344. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
  345. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
  346. data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
  347. data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
  348. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
  349. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
  350. data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
  351. data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
  352. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
  353. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
  354. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
  355. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
  356. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
  357. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
  358. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
  359. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
  360. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
  361. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
  362. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
  363. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
  364. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
  365. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
  366. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
  367. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
  368. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
  369. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
  370. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
  371. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
  372. data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
  373. data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
  374. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
  375. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
  376. data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
  377. data/app/assets/javascripts/Shaders/Noise.js +242 -0
  378. data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
  379. data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
  380. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
  381. data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
  382. data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
  383. data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
  384. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
  385. data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
  386. data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
  387. data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
  388. data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
  389. data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
  390. data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
  391. data/app/assets/javascripts/Shaders/Ray.js +357 -0
  392. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
  393. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
  394. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
  395. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
  396. data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
  397. data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
  398. data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
  399. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
  400. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
  401. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
  402. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
  403. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
  404. data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
  405. data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
  406. data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
  407. data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
  408. data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
  409. data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
  410. data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
  411. data/app/assets/javascripts/Shaders/package.json +6 -0
  412. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
  413. data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
  414. data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
  415. data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
  416. data/app/assets/javascripts/ThirdParty/package.json +6 -0
  417. data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
  418. data/app/assets/javascripts/ThirdParty/when.js +748 -0
  419. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
  420. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
  421. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
  422. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
  423. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
  424. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
  425. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
  426. data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
  427. data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
  428. data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
  429. data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
  430. data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
  431. data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
  432. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  433. data/app/assets/javascripts/Widgets/Timeline.css +113 -0
  434. data/app/assets/javascripts/Widgets/Timeline.js +629 -0
  435. data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
  436. data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
  437. data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
  438. data/app/assets/javascripts/Widgets/package.json +6 -0
  439. data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
  440. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
  441. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
  442. data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
  443. data/app/assets/javascripts/Workers/package.json +6 -0
  444. data/app/assets/javascripts/copyrightHeader.js +22 -0
  445. data/app/assets/javascripts/main.js +10 -0
  446. data/app/assets/stylesheets/cesium.css +4 -0
  447. data/app/controllers/cesium_controller.rb +4 -0
  448. data/app/helpers/cesium_helper.rb +2 -0
  449. data/app/views/cesium/index.html.erb +3 -0
  450. data/config/routes.rb +3 -0
  451. data/lib/cesium.rb +4 -0
  452. data/lib/cesium/engine.rb +4 -0
  453. data/lib/cesium/version.rb +3 -0
  454. data/lib/tasks/cesium_tasks.rake +4 -0
  455. data/test/cesium_test.rb +7 -0
  456. data/test/dummy/README.rdoc +261 -0
  457. data/test/dummy/Rakefile +7 -0
  458. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
  459. data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
  460. data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
  461. data/test/dummy/app/assets/stylesheets/application.css +12 -0
  462. data/test/dummy/app/controllers/application_controller.rb +4 -0
  463. data/test/dummy/app/helpers/application_helper.rb +2 -0
  464. data/test/dummy/app/views/layouts/application.html.erb +21 -0
  465. data/test/dummy/config.ru +4 -0
  466. data/test/dummy/config/application.rb +59 -0
  467. data/test/dummy/config/boot.rb +10 -0
  468. data/test/dummy/config/database.yml +25 -0
  469. data/test/dummy/config/environment.rb +5 -0
  470. data/test/dummy/config/environments/development.rb +37 -0
  471. data/test/dummy/config/environments/production.rb +67 -0
  472. data/test/dummy/config/environments/test.rb +37 -0
  473. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  474. data/test/dummy/config/initializers/inflections.rb +15 -0
  475. data/test/dummy/config/initializers/mime_types.rb +5 -0
  476. data/test/dummy/config/initializers/secret_token.rb +7 -0
  477. data/test/dummy/config/initializers/session_store.rb +8 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +5 -0
  480. data/test/dummy/config/requirejs.yml +10 -0
  481. data/test/dummy/config/routes.rb +3 -0
  482. data/test/dummy/public/404.html +26 -0
  483. data/test/dummy/public/422.html +26 -0
  484. data/test/dummy/public/500.html +25 -0
  485. data/test/dummy/public/favicon.ico +0 -0
  486. data/test/dummy/script/rails +6 -0
  487. data/test/functional/cesium_controller_test.rb +9 -0
  488. data/test/integration/navigation_test.rb +10 -0
  489. data/test/test_helper.rb +15 -0
  490. data/test/unit/helpers/cesium_helper_test.rb +4 -0
  491. 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
+ });