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