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