cesium 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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,6 @@
1
+ {
2
+ "name": "Scene",
3
+ "description": "Cesium Scene",
4
+ "version": "0.6.0",
5
+ "dojoBuild": "Scene.profile.js"
6
+ }
@@ -0,0 +1,30 @@
1
+ uniform sampler2D u_atlas;
2
+
3
+ varying vec2 v_textureCoordinates;
4
+
5
+ #ifdef RENDER_FOR_PICK
6
+ varying vec4 v_pickColor;
7
+ #else
8
+ varying vec4 v_color;
9
+ #endif
10
+
11
+ void main()
12
+ {
13
+ #ifdef RENDER_FOR_PICK
14
+ vec4 vertexColor = vec4(1.0, 1.0, 1.0, 1.0);
15
+ #else
16
+ vec4 vertexColor = v_color;
17
+ #endif
18
+
19
+ vec4 color = texture2D(u_atlas, v_textureCoordinates) * vertexColor;
20
+ if (color.a == 0.0)
21
+ {
22
+ discard;
23
+ }
24
+
25
+ #ifdef RENDER_FOR_PICK
26
+ gl_FragColor = v_pickColor;
27
+ #else
28
+ gl_FragColor = color;
29
+ #endif
30
+ }
@@ -0,0 +1,31 @@
1
+ // This file is automatically rebuilt by the Cesium build process.
2
+ /*global define*/
3
+ define(function() {
4
+ "use strict";
5
+ return "uniform sampler2D u_atlas;\n\
6
+ varying vec2 v_textureCoordinates;\n\
7
+ #ifdef RENDER_FOR_PICK\n\
8
+ varying vec4 v_pickColor;\n\
9
+ #else\n\
10
+ varying vec4 v_color;\n\
11
+ #endif\n\
12
+ void main()\n\
13
+ {\n\
14
+ #ifdef RENDER_FOR_PICK\n\
15
+ vec4 vertexColor = vec4(1.0, 1.0, 1.0, 1.0);\n\
16
+ #else\n\
17
+ vec4 vertexColor = v_color;\n\
18
+ #endif\n\
19
+ vec4 color = texture2D(u_atlas, v_textureCoordinates) * vertexColor;\n\
20
+ if (color.a == 0.0)\n\
21
+ {\n\
22
+ discard;\n\
23
+ }\n\
24
+ #ifdef RENDER_FOR_PICK\n\
25
+ gl_FragColor = v_pickColor;\n\
26
+ #else\n\
27
+ gl_FragColor = color;\n\
28
+ #endif\n\
29
+ }\n\
30
+ ";
31
+ });
@@ -0,0 +1,68 @@
1
+ attribute vec3 positionHigh;
2
+ attribute vec3 positionLow;
3
+ attribute vec2 direction; // in screen space
4
+ attribute vec4 textureCoordinatesAndImageSize; // size in normalized texture coordinates
5
+ attribute vec3 originAndShow; // show is 0.0 (false) or 1.0 (true)
6
+ attribute vec2 pixelOffset;
7
+ attribute vec4 eyeOffsetAndScale; // eye offset in meters
8
+
9
+ #ifdef RENDER_FOR_PICK
10
+ attribute vec4 pickColor;
11
+ #else
12
+ attribute vec4 color;
13
+ #endif
14
+
15
+ uniform vec2 u_atlasSize;
16
+ uniform float u_clampToPixel; // clamp is 1.0 (true) or 0.0 (false)
17
+
18
+ uniform float u_morphTime;
19
+
20
+ const vec2 czm_highResolutionSnapScale = vec2(1.0, 1.0); // TODO
21
+
22
+ varying vec2 v_textureCoordinates;
23
+
24
+ #ifdef RENDER_FOR_PICK
25
+ varying vec4 v_pickColor;
26
+ #else
27
+ varying vec4 v_color;
28
+ #endif
29
+
30
+ void main()
31
+ {
32
+ // Modifying this shader may also require modifications to Billboard.computeScreenSpacePosition
33
+
34
+ // unpack attributes
35
+ vec3 eyeOffset = eyeOffsetAndScale.xyz;
36
+ float scale = eyeOffsetAndScale.w;
37
+ vec2 textureCoordinates = textureCoordinatesAndImageSize.xy;
38
+ vec2 imageSize = textureCoordinatesAndImageSize.zw;
39
+ vec2 origin = originAndShow.xy;
40
+ float show = originAndShow.z;
41
+
42
+ ///////////////////////////////////////////////////////////////////////////
43
+
44
+ vec4 p = vec4(czm_translateRelativeToEye(positionHigh, positionLow), 1.0);
45
+ vec4 positionEC = czm_modelViewRelativeToEye * p;
46
+ positionEC = czm_eyeOffset(positionEC, eyeOffset);
47
+ positionEC.xyz *= show;
48
+
49
+ ///////////////////////////////////////////////////////////////////////////
50
+
51
+ vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
52
+
53
+ vec2 halfSize = u_atlasSize * imageSize * 0.5 * scale * czm_highResolutionSnapScale;
54
+ halfSize *= ((direction * 2.0) - 1.0);
55
+
56
+ positionWC.xy += (origin * abs(halfSize)) + halfSize;
57
+ positionWC.xy += (pixelOffset * czm_highResolutionSnapScale);
58
+ positionWC.xy = mix(positionWC.xy, floor(positionWC.xy), u_clampToPixel);
59
+
60
+ gl_Position = czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);
61
+ v_textureCoordinates = textureCoordinates;
62
+
63
+ #ifdef RENDER_FOR_PICK
64
+ v_pickColor = pickColor;
65
+ #else
66
+ v_color = color;
67
+ #endif
68
+ }
@@ -0,0 +1,54 @@
1
+ // This file is automatically rebuilt by the Cesium build process.
2
+ /*global define*/
3
+ define(function() {
4
+ "use strict";
5
+ return "attribute vec3 positionHigh;\n\
6
+ attribute vec3 positionLow;\n\
7
+ attribute vec2 direction;\n\
8
+ attribute vec4 textureCoordinatesAndImageSize;\n\
9
+ attribute vec3 originAndShow;\n\
10
+ attribute vec2 pixelOffset;\n\
11
+ attribute vec4 eyeOffsetAndScale;\n\
12
+ #ifdef RENDER_FOR_PICK\n\
13
+ attribute vec4 pickColor;\n\
14
+ #else\n\
15
+ attribute vec4 color;\n\
16
+ #endif\n\
17
+ uniform vec2 u_atlasSize;\n\
18
+ uniform float u_clampToPixel;\n\
19
+ uniform float u_morphTime;\n\
20
+ const vec2 czm_highResolutionSnapScale = vec2(1.0, 1.0);\n\
21
+ varying vec2 v_textureCoordinates;\n\
22
+ #ifdef RENDER_FOR_PICK\n\
23
+ varying vec4 v_pickColor;\n\
24
+ #else\n\
25
+ varying vec4 v_color;\n\
26
+ #endif\n\
27
+ void main()\n\
28
+ {\n\
29
+ vec3 eyeOffset = eyeOffsetAndScale.xyz;\n\
30
+ float scale = eyeOffsetAndScale.w;\n\
31
+ vec2 textureCoordinates = textureCoordinatesAndImageSize.xy;\n\
32
+ vec2 imageSize = textureCoordinatesAndImageSize.zw;\n\
33
+ vec2 origin = originAndShow.xy;\n\
34
+ float show = originAndShow.z;\n\
35
+ vec4 p = vec4(czm_translateRelativeToEye(positionHigh, positionLow), 1.0);\n\
36
+ vec4 positionEC = czm_modelViewRelativeToEye * p;\n\
37
+ positionEC = czm_eyeOffset(positionEC, eyeOffset);\n\
38
+ positionEC.xyz *= show;\n\
39
+ vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\n\
40
+ vec2 halfSize = u_atlasSize * imageSize * 0.5 * scale * czm_highResolutionSnapScale;\n\
41
+ halfSize *= ((direction * 2.0) - 1.0);\n\
42
+ positionWC.xy += (origin * abs(halfSize)) + halfSize;\n\
43
+ positionWC.xy += (pixelOffset * czm_highResolutionSnapScale);\n\
44
+ positionWC.xy = mix(positionWC.xy, floor(positionWC.xy), u_clampToPixel);\n\
45
+ gl_Position = czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);\n\
46
+ v_textureCoordinates = textureCoordinates;\n\
47
+ #ifdef RENDER_FOR_PICK\n\
48
+ v_pickColor = pickColor;\n\
49
+ #else\n\
50
+ v_color = color;\n\
51
+ #endif\n\
52
+ }\n\
53
+ ";
54
+ });
@@ -0,0 +1,927 @@
1
+ /**
2
+ * DOC_TBA
3
+ *
4
+ * @name czm_infinity
5
+ * @glslConstant
6
+ */
7
+ const float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp?
8
+
9
+ /**
10
+ * DOC_TBA
11
+ *
12
+ * @name czm_epsilon1
13
+ * @glslConstant
14
+ */
15
+ const float czm_epsilon1 = 0.1;
16
+
17
+ /**
18
+ * DOC_TBA
19
+ *
20
+ * @name czm_epsilon2
21
+ * @glslConstant
22
+ */
23
+ const float czm_epsilon2 = 0.01;
24
+
25
+ /**
26
+ * DOC_TBA
27
+ *
28
+ * @name czm_epsilon3
29
+ * @glslConstant
30
+ */
31
+ const float czm_epsilon3 = 0.001;
32
+
33
+ /**
34
+ * DOC_TBA
35
+ *
36
+ * @name czm_epsilon4
37
+ * @glslConstant
38
+ */
39
+ const float czm_epsilon4 = 0.0001;
40
+
41
+ /**
42
+ * DOC_TBA
43
+ *
44
+ * @name czm_epsilon5
45
+ * @glslConstant
46
+ */
47
+ const float czm_epsilon5 = 0.00001;
48
+
49
+ /**
50
+ * DOC_TBA
51
+ *
52
+ * @name czm_epsilon6
53
+ * @glslConstant
54
+ */
55
+ const float czm_epsilon6 = 0.000001;
56
+
57
+ /**
58
+ * DOC_TBA
59
+ *
60
+ * @name czm_epsilon7
61
+ * @glslConstant
62
+ */
63
+ const float czm_epsilon7 = 0.0000001;
64
+
65
+ /**
66
+ * DOC_TBA
67
+ *
68
+ * @name czm_equalsEpsilon
69
+ * @glslFunction
70
+ */
71
+ bool czm_equalsEpsilon(float left, float right, float epsilon) {
72
+ return (abs(left - right) <= epsilon);
73
+ }
74
+
75
+ bool czm_equalsEpsilon(float left, float right) {
76
+ // Workaround bug in Opera Next 12. Do not delegate to the other czm_equalsEpsilon.
77
+ return (abs(left - right) <= czm_epsilon7);
78
+ }
79
+
80
+ ///////////////////////////////////////////////////////////////////////////////
81
+
82
+ /**
83
+ * Returns the transpose of the matrix. The input <code>matrix</code> can be
84
+ * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.
85
+ *
86
+ * @name czm_transpose
87
+ * @glslFunction
88
+ *
89
+ * @param {} matrix The matrix to transpose.
90
+ *
91
+ * @returns {} The transposed matrix.
92
+ *
93
+ * @example
94
+ * // GLSL declarations
95
+ * mat2 czm_transpose(mat2 matrix);
96
+ * mat3 czm_transpose(mat3 matrix);
97
+ * mat4 czm_transpose(mat4 matrix);
98
+ *
99
+ * // Tranpose a 3x3 rotation matrix to find its inverse.
100
+ * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(
101
+ * positionMC, normalEC);
102
+ * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);
103
+ */
104
+ mat2 czm_transpose(mat2 matrix)
105
+ {
106
+ return mat2(
107
+ matrix[0][0], matrix[1][0],
108
+ matrix[0][1], matrix[1][1]);
109
+ }
110
+
111
+ mat3 czm_transpose(mat3 matrix)
112
+ {
113
+ return mat3(
114
+ matrix[0][0], matrix[1][0], matrix[2][0],
115
+ matrix[0][1], matrix[1][1], matrix[2][1],
116
+ matrix[0][2], matrix[1][2], matrix[2][2]);
117
+ }
118
+
119
+ mat4 czm_transpose(mat4 matrix)
120
+ {
121
+ return mat4(
122
+ matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
123
+ matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
124
+ matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
125
+ matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
126
+ }
127
+
128
+ ///////////////////////////////////////////////////////////////////////////////
129
+
130
+ /**
131
+ * Transforms a position from model to window coordinates. The transformation
132
+ * from model to clip coordinates is done using {@link czm_modelViewProjection}.
133
+ * The transform from normalized device coordinates to window coordinates is
134
+ * done using {@link czm_viewportTransformation}, which assumes a depth range
135
+ * of <code>near = 0</code> and <code>far = 1</code>.
136
+ * <br /><br />
137
+ * This transform is useful when there is a need to manipulate window coordinates
138
+ * in a vertex shader as done by {@link BillboardCollection}.
139
+ * <br /><br />
140
+ * This function should not be confused with {@link czm_viewportOrthographic},
141
+ * which is an orthographic projection matrix that transforms from window
142
+ * coordinates to clip coordinates.
143
+ *
144
+ * @name czm_modelToWindowCoordinates
145
+ * @glslFunction
146
+ *
147
+ * @param {vec4} position The position in model coordinates to transform.
148
+ *
149
+ * @returns {vec4} The transformed position in window coordinates.
150
+ *
151
+ * @see czm_eyeToWindowCoordinates
152
+ * @see czm_modelViewProjection
153
+ * @see czm_viewportTransformation
154
+ * @see czm_viewportOrthographic
155
+ * @see BillboardCollection
156
+ *
157
+ * @example
158
+ * vec4 positionWC = czm_modelToWindowCoordinates(positionMC);
159
+ */
160
+ vec4 czm_modelToWindowCoordinates(vec4 position)
161
+ {
162
+ vec4 q = czm_modelViewProjection * position; // clip coordinates
163
+ q.xyz /= q.w; // normalized device coordinates
164
+ q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
165
+ return q;
166
+ }
167
+
168
+ /**
169
+ * Transforms a position from eye to window coordinates. The transformation
170
+ * from eye to clip coordinates is done using {@link czm_projection}.
171
+ * The transform from normalized device coordinates to window coordinates is
172
+ * done using {@link czm_viewportTransformation}, which assumes a depth range
173
+ * of <code>near = 0</code> and <code>far = 1</code>.
174
+ * <br /><br />
175
+ * This transform is useful when there is a need to manipulate window coordinates
176
+ * in a vertex shader as done by {@link BillboardCollection}.
177
+ *
178
+ * @name czm_eyeToWindowCoordinates
179
+ * @glslFunction
180
+ *
181
+ * @param {vec4} position The position in eye coordinates to transform.
182
+ *
183
+ * @returns {vec4} The transformed position in window coordinates.
184
+ *
185
+ * @see czm_modelToWindowCoordinates
186
+ * @see czm_projection
187
+ * @see czm_viewportTransformation
188
+ * @see BillboardCollection
189
+ *
190
+ * @example
191
+ * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
192
+ */
193
+ vec4 czm_eyeToWindowCoordinates(vec4 positionEC)
194
+ {
195
+ vec4 q = czm_projection * positionEC; // clip coordinates
196
+ q.xyz /= q.w; // normalized device coordinates
197
+ q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
198
+ return q;
199
+ }
200
+
201
+ /**
202
+ * Transforms a position from window to eye coordinates.
203
+ * The transform from window to normalized device coordinates is done using components
204
+ * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating
205
+ * the inverse of <code>czm_viewportTransformation</code>. The transformation from
206
+ * normalized device coordinates to clip coordinates is done using <code>positionWC.w</code>,
207
+ * which is expected to be the scalar used in the perspective divide. The transformation
208
+ * from clip to eye coordinates is done using {@link czm_inverseProjection}.
209
+ *
210
+ * @name czm_windowToEyeCoordinates
211
+ * @glslFunction
212
+ *
213
+ * @param {vec4} fragmentCoordinate The position in window coordinates to transform.
214
+ *
215
+ * @returns {vec4} The transformed position in eye coordinates.
216
+ *
217
+ * @see czm_modelToWindowCoordinates
218
+ * @see czm_eyeToWindowCoordinates
219
+ * @see czm_inverseProjection
220
+ * @see czm_viewport
221
+ * @see czm_viewportTransformation
222
+ *
223
+ * @example
224
+ * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);
225
+ */
226
+ vec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)
227
+ {
228
+ float x = 2.0 * (fragmentCoordinate.x - czm_viewport.x) / czm_viewport.z - 1.0;
229
+ float y = 2.0 * (fragmentCoordinate.y - czm_viewport.y) / czm_viewport.w - 1.0;
230
+ float z = (fragmentCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];
231
+ vec4 q = vec4(x, y, z, 1.0);
232
+ q /= fragmentCoordinate.w;
233
+ q = czm_inverseProjection * q;
234
+ return q;
235
+ }
236
+
237
+ ///////////////////////////////////////////////////////////////////////////////
238
+
239
+ /**
240
+ * DOC_TBA
241
+ *
242
+ * @name czm_eyeOffset
243
+ * @glslFunction
244
+ *
245
+ * @param {vec4} positionEC DOC_TBA.
246
+ * @param {vec3} eyeOffset DOC_TBA.
247
+ *
248
+ * @returns {vec4} DOC_TBA.
249
+ */
250
+ vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)
251
+ {
252
+ // This equation is approximate in x and y.
253
+ vec4 p = positionEC;
254
+ vec4 zEyeOffset = normalize(p) * eyeOffset.z;
255
+ p.xy += eyeOffset.xy + zEyeOffset.xy;
256
+ p.z += zEyeOffset.z;
257
+ return p;
258
+ }
259
+
260
+ ///////////////////////////////////////////////////////////////////////////////
261
+
262
+ /**
263
+ * DOC_TBA
264
+ *
265
+ * @name czm_geodeticSurfaceNormal
266
+ * @glslFunction
267
+ *
268
+ * @param {vec3} positionOnEllipsoid DOC_TBA
269
+ * @param {vec3} ellipsoidCenter DOC_TBA
270
+ * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA
271
+ *
272
+ * @returns {vec3} DOC_TBA.
273
+ */
274
+ vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)
275
+ {
276
+ return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);
277
+ }
278
+
279
+ /**
280
+ * DOC_TBA
281
+ *
282
+ * @name czm_ellipsoidWgs84TextureCoordinates
283
+ * @glslFunction
284
+ */
285
+ vec2 czm_ellipsoidWgs84TextureCoordinates(vec3 normal)
286
+ {
287
+ return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);
288
+ }
289
+
290
+ /**
291
+ * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system
292
+ * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the
293
+ * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.
294
+ * <br /><br />
295
+ * The ellipsoid is assumed to be centered at the model coordinate's origin.
296
+ *
297
+ * @name czm_eastNorthUpToEyeCoordinates
298
+ * @glslFunction
299
+ *
300
+ * @param {vec3} positionMC The position on the ellipsoid in model coordinates.
301
+ * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.
302
+ *
303
+ * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.
304
+ *
305
+ * @example
306
+ * // Transform a vector defined in the east-north-up coordinate
307
+ * // system, (0, 0, 1) which is the surface normal, to eye
308
+ * // coordinates.
309
+ * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);
310
+ * vec3 normalEC = m * vec3(0.0, 0.0, 1.0);
311
+ */
312
+ mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)
313
+ {
314
+ vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates
315
+ vec3 tangentEC = normalize(czm_normal * tangentMC); // normalized surface tangent in eye coordiantes
316
+ vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates
317
+
318
+ return mat3(
319
+ tangentEC.x, tangentEC.y, tangentEC.z,
320
+ bitangentEC.x, bitangentEC.y, bitangentEC.z,
321
+ normalEC.x, normalEC.y, normalEC.z);
322
+ }
323
+
324
+ ///////////////////////////////////////////////////////////////////////////////
325
+
326
+ /**
327
+ * Used as input to every material's czm_getMaterial function.
328
+ *
329
+ * @name czm_materialInput
330
+ * @glslStruct
331
+ *
332
+ * @property {float} s 1D texture coordinates.
333
+ * @property {vec2} st 2D texture coordinates.
334
+ * @property {vec3} str 3D texture coordinates.
335
+ * @property {vec3} normalEC Unperturbed surface normal in eye coordinates.
336
+ * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.
337
+ * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye.
338
+ * @property {vec3} positionMC Position in model coordinates.
339
+ */
340
+ struct czm_materialInput
341
+ {
342
+ float s;
343
+ vec2 st;
344
+ vec3 str;
345
+ vec3 normalEC;
346
+ mat3 tangentToEyeMatrix;
347
+ vec3 positionToEyeEC;
348
+ vec3 positionMC;
349
+ };
350
+
351
+ /**
352
+ * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.
353
+ *
354
+ * @name czm_material
355
+ * @glslStruct
356
+ *
357
+ * @property {vec3} diffuse Incoming light that scatters evenly in all directions.
358
+ * @property {float} specular Intensity of incoming light reflecting in a single direction.
359
+ * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
360
+ * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.
361
+ * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.
362
+ * @property {float} alpha Opacity of this material. 0.0 is completely transparent; 1.0 is completely opaque.
363
+ */
364
+ struct czm_material
365
+ {
366
+ vec3 diffuse;
367
+ float specular;
368
+ float shininess;
369
+ vec3 normal;
370
+ vec3 emission;
371
+ float alpha;
372
+ };
373
+
374
+ /**
375
+ * An czm_material with default values. Every material's czm_getMaterial
376
+ * should use this default material as a base for the material it returns.
377
+ * The default normal value is given by materialInput.normalEC.
378
+ *
379
+ * @name czm_getDefaultMaterial
380
+ * @glslFunction
381
+ *
382
+ * @param {czm_materialInput} input The input used to construct the default material.
383
+ *
384
+ * @returns {czm_material} The default material.
385
+ *
386
+ * @see czm_materialInput
387
+ * @see czm_material
388
+ * @see czm_getMaterial
389
+ */
390
+ czm_material czm_getDefaultMaterial(czm_materialInput materialInput)
391
+ {
392
+ czm_material material;
393
+ material.diffuse = vec3(0.0);
394
+ material.specular = 0.0;
395
+ material.shininess = 1.0;
396
+ material.normal = materialInput.normalEC;
397
+ material.emission = vec3(0.0);
398
+ material.alpha = 1.0;
399
+ return material;
400
+ }
401
+
402
+ float getLambertDiffuse(vec3 lightDirection, czm_material material)
403
+ {
404
+ return max(dot(lightDirection, material.normal), 0.0);
405
+ }
406
+
407
+ float getSpecular(vec3 lightDirection, vec3 toEye, czm_material material)
408
+ {
409
+ vec3 toReflectedLight = reflect(-lightDirection, material.normal);
410
+ float specular = max(dot(toReflectedLight, toEye), 0.0);
411
+
412
+ return pow(specular, material.shininess);
413
+ }
414
+
415
+ /**
416
+ * Computes a color using the Phong lighting model.
417
+ *
418
+ * @name czm_phong
419
+ * @glslFunction
420
+ *
421
+ * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.
422
+ * @param {czm_material} material The fragment's material.
423
+ *
424
+ * @returns {vec4} The computed color.
425
+ *
426
+ * @example
427
+ * vec3 positionToEyeEC = // ...
428
+ * czm_material material = // ...
429
+ * gl_FragColor = czm_phong(normalize(positionToEyeEC), material);
430
+ *
431
+ * @see czm_getMaterial
432
+ */
433
+ vec4 czm_phong(vec3 toEye, czm_material material)
434
+ {
435
+ // Diffuse from directional light sources at eye (for top-down and horizon views)
436
+ float diffuse = getLambertDiffuse(vec3(0.0, 0.0, 1.0), material) + getLambertDiffuse(vec3(0.0, 1.0, 0.0), material);
437
+
438
+ // Specular from sun and pseudo-moon
439
+ float specular = getSpecular(czm_sunDirectionEC, toEye, material) + getSpecular(czm_moonDirectionEC, toEye, material);
440
+
441
+ vec3 ambient = vec3(0.0);
442
+ vec3 color = ambient + material.emission;
443
+ color += material.diffuse * diffuse;
444
+ color += material.specular * specular;
445
+
446
+ return vec4(color, material.alpha);
447
+ }
448
+
449
+ /**
450
+ * Computes the luminance of a color.
451
+ *
452
+ * @name czm_luminance
453
+ * @glslFunction
454
+ *
455
+ * @param {vec3} rgb The color.
456
+ *
457
+ * @returns {float} The luminance.
458
+ *
459
+ * @example
460
+ * float light = czm_luminance(vec3(0.0)); // 0.0
461
+ * float dark = czm_luminance(vec3(1.0)); // ~1.0
462
+ */
463
+ float czm_luminance(vec3 rgb)
464
+ {
465
+ // Algorithm from Chapter 10 of Graphics Shaders.
466
+ const vec3 W = vec3(0.2125, 0.7154, 0.0721);
467
+ return dot(rgb, W);
468
+ }
469
+
470
+ /**
471
+ * Adjusts the hue of a color.
472
+ *
473
+ * @name czm_hue
474
+ * @glslFunction
475
+ *
476
+ * @param {vec3} rgb The color.
477
+ * @param {float} adjustment The amount to adjust the hue of the color in radians.
478
+ *
479
+ * @returns {float} The color with the hue adjusted.
480
+ *
481
+ * @example
482
+ * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)
483
+ */
484
+ vec3 czm_hue(vec3 rgb, float adjustment)
485
+ {
486
+ const mat3 toYIQ = mat3(0.299, 0.587, 0.114,
487
+ 0.595716, -0.274453, -0.321263,
488
+ 0.211456, -0.522591, 0.311135);
489
+ const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,
490
+ 1.0, -0.2721, -0.6474,
491
+ 1.0, -1.107, 1.7046);
492
+
493
+ vec3 yiq = toYIQ * rgb;
494
+ float hue = atan(yiq.z, yiq.y) + adjustment;
495
+ float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);
496
+
497
+ vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));
498
+ return toRGB * color;
499
+ }
500
+
501
+ /**
502
+ * Adjusts the saturation of a color.
503
+ *
504
+ * @name czm_saturation
505
+ * @glslFunction
506
+ *
507
+ * @param {vec3} rgb The color.
508
+ * @param {float} adjustment The amount to adjust the saturation of the color.
509
+ *
510
+ * @returns {float} The color with the saturation adjusted.
511
+ *
512
+ * @example
513
+ * vec3 greyScale = czm_saturation(color, 0.0);
514
+ * vec3 doubleSaturation = czm_saturation(color, 2.0);
515
+ */
516
+ vec3 czm_saturation(vec3 rgb, float adjustment)
517
+ {
518
+ // Algorithm from Chapter 16 of OpenGL Shading Language
519
+ vec3 intensity = vec3(czm_luminance(rgb));
520
+ return mix(intensity, rgb, adjustment);
521
+ }
522
+
523
+ /**
524
+ * DOC_TBA
525
+ *
526
+ * @name czm_multiplyWithColorBalance
527
+ * @glslFunction
528
+ */
529
+ vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)
530
+ {
531
+ // Algorithm from Chapter 10 of Graphics Shaders.
532
+ const vec3 W = vec3(0.2125, 0.7154, 0.0721);
533
+
534
+ vec3 target = left * right;
535
+ float leftLuminance = dot(left, W);
536
+ float rightLuminance = dot(right, W);
537
+ float targetLuminance = dot(target, W);
538
+
539
+ return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;
540
+ }
541
+
542
+ ///////////////////////////////////////////////////////////////////////////////
543
+
544
+ /**
545
+ * The maximum latitude, in radians, both North and South, supported by a Web Mercator
546
+ * (EPSG:3857) projection. Technically, the Mercator projection is defined
547
+ * for any latitude up to (but not including) 90 degrees, but it makes sense
548
+ * to cut it off sooner because it grows exponentially with increasing latitude.
549
+ * The logic behind this particular cutoff value, which is the one used by
550
+ * Google Maps, Bing Maps, and Esri, is that it makes the projection
551
+ * square. That is, the extent is equal in the X and Y directions.
552
+ *
553
+ * The constant value is computed as follows:
554
+ * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))
555
+ *
556
+ * @name czm_webMercatorMaxLatitude
557
+ * @glslConstant
558
+ */
559
+ const float czm_webMercatorMaxLatitude = 1.4844222297453323669610967939;
560
+
561
+ /**
562
+ * Specifies a flat, 2D map.
563
+ *
564
+ * @name czm_scene2D
565
+ * @glslConstant
566
+ */
567
+ const int czm_scene2D = 0;
568
+
569
+ /**
570
+ * Specifies 2.D Columbus View.
571
+ *
572
+ * @name czm_columbusView
573
+ * @glslConstant
574
+ */
575
+ const int czm_columbusView = 1;
576
+
577
+ /**
578
+ * Specifies a 3D globe.
579
+ *
580
+ * @name czm_scene3D
581
+ * @glslConstant
582
+ */
583
+ const int czm_scene3D = 2;
584
+
585
+ /**
586
+ * Specifies that the scene is morphing between modes.
587
+ *
588
+ * @name czm_morphing
589
+ * @glslConstant
590
+ */
591
+ const int czm_morphing = 3;
592
+
593
+ /**
594
+ * DOC_TBA
595
+ *
596
+ * @name czm_columbusViewMorph
597
+ * @glslFunction
598
+ */
599
+ vec4 czm_columbusViewMorph(vec3 position2D, vec3 position3D, float time)
600
+ {
601
+ // Just linear for now.
602
+ vec3 p = mix(position2D, position3D, time);
603
+ return vec4(p, 1.0);
604
+ }
605
+
606
+ ///////////////////////////////////////////////////////////////////////////////
607
+
608
+ /**
609
+ * DOC_TBA
610
+ *
611
+ * @name czm_ray
612
+ * @glslStruct
613
+ */
614
+ struct czm_ray
615
+ {
616
+ vec3 origin;
617
+ vec3 direction;
618
+ };
619
+
620
+ /**
621
+ * Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero.
622
+ *
623
+ * @name czm_pointAlongRay
624
+ * @glslFunction
625
+ *
626
+ * @param {czm_ray} ray The ray to compute the point along.
627
+ * @param {float} time The time along the ray.
628
+ *
629
+ * @returns {vec3} The point along the ray at the given time.
630
+ *
631
+ * @example
632
+ * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction
633
+ * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)
634
+ */
635
+ vec3 czm_pointAlongRay(czm_ray ray, float time)
636
+ {
637
+ return ray.origin + (time * ray.direction);
638
+ }
639
+
640
+ ///////////////////////////////////////////////////////////////////////////////
641
+
642
+ /**
643
+ * DOC_TBA
644
+ *
645
+ * @name czm_raySegment
646
+ * @glslStruct
647
+ */
648
+ struct czm_raySegment
649
+ {
650
+ float start;
651
+ float stop;
652
+ };
653
+
654
+ /**
655
+ * DOC_TBA
656
+ *
657
+ * @name czm_emptyRaySegment
658
+ * @glslConstant
659
+ */
660
+ const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);
661
+
662
+ /**
663
+ * DOC_TBA
664
+ *
665
+ * @name czm_fullRaySegment
666
+ * @glslConstant
667
+ */
668
+ const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);
669
+
670
+ /**
671
+ * Determines if a time interval is empty.
672
+ *
673
+ * @name czm_isEmpty
674
+ * @glslFunction
675
+ *
676
+ * @param {czm_raySegment} interval The interval to test.
677
+ *
678
+ * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
679
+ *
680
+ * @example
681
+ * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
682
+ * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
683
+ * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
684
+ */
685
+ bool czm_isEmpty(czm_raySegment interval)
686
+ {
687
+ return (interval.stop < 0.0);
688
+ }
689
+
690
+ /**
691
+ * Determines if a time interval is empty.
692
+ *
693
+ * @name czm_isFull
694
+ * @glslFunction
695
+ *
696
+ * @param {czm_raySegment} interval The interval to test.
697
+ *
698
+ * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
699
+ *
700
+ * @example
701
+ * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
702
+ * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
703
+ * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
704
+ */
705
+ bool czm_isFull(czm_raySegment interval)
706
+ {
707
+ return (interval.start == 0.0 && interval.stop == czm_infinity);
708
+ }
709
+
710
+ ///////////////////////////////////////////////////////////////////////////////
711
+
712
+ /**
713
+ * DOC_TBA
714
+ *
715
+ * @name czm_ellipsoid
716
+ * @glslStruct
717
+ */
718
+ struct czm_ellipsoid
719
+ {
720
+ vec3 center;
721
+ vec3 radii;
722
+ vec3 inverseRadii;
723
+ vec3 inverseRadiiSquared;
724
+ };
725
+
726
+ /**
727
+ * DOC_TBA
728
+ *
729
+ * @name czm_ellipsoidNew
730
+ * @glslFunction
731
+ *
732
+ */
733
+ czm_ellipsoid czm_ellipsoidNew(vec3 center, vec3 radii)
734
+ {
735
+ vec3 inverseRadii = vec3(1.0 / radii.x, 1.0 / radii.y, 1.0 / radii.z);
736
+ vec3 inverseRadiiSquared = inverseRadii * inverseRadii;
737
+ czm_ellipsoid temp = czm_ellipsoid(center, radii, inverseRadii, inverseRadiiSquared);
738
+ return temp;
739
+ }
740
+
741
+ /**
742
+ * DOC_TBA
743
+ *
744
+ * @name czm_ellipsoidContainsPoint
745
+ * @glslFunction
746
+ *
747
+ */
748
+ bool czm_ellipsoidContainsPoint(czm_ellipsoid ellipsoid, vec3 point)
749
+ {
750
+ vec3 scaled = ellipsoid.inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;
751
+ return (dot(scaled, scaled) <= 1.0);
752
+ }
753
+
754
+ /**
755
+ * DOC_TBA
756
+ *
757
+ *
758
+ * @name czm_rayEllipsoidIntersectionInterval
759
+ * @glslFunction
760
+ */
761
+ czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, czm_ellipsoid ellipsoid)
762
+ {
763
+ // ray and ellipsoid center in eye coordinates. radii in model coordinates.
764
+ vec3 q = ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;
765
+ vec3 w = ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;
766
+
767
+ q = q - ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ellipsoid.center, 1.0)).xyz;
768
+
769
+ float q2 = dot(q, q);
770
+ float qw = dot(q, w);
771
+
772
+ if (q2 > 1.0) // Outside ellipsoid.
773
+ {
774
+ if (qw >= 0.0) // Looking outward or tangent (0 intersections).
775
+ {
776
+ return czm_emptyRaySegment;
777
+ }
778
+ else // qw < 0.0.
779
+ {
780
+ float qw2 = qw * qw;
781
+ float difference = q2 - 1.0; // Positively valued.
782
+ float w2 = dot(w, w);
783
+ float product = w2 * difference;
784
+
785
+ if (qw2 < product) // Imaginary roots (0 intersections).
786
+ {
787
+ return czm_emptyRaySegment;
788
+ }
789
+ else if (qw2 > product) // Distinct roots (2 intersections).
790
+ {
791
+ float discriminant = qw * qw - product;
792
+ float temp = -qw + sqrt(discriminant); // Avoid cancellation.
793
+ float root0 = temp / w2;
794
+ float root1 = difference / temp;
795
+ if (root0 < root1)
796
+ {
797
+ czm_raySegment i = czm_raySegment(root0, root1);
798
+ return i;
799
+ }
800
+ else
801
+ {
802
+ czm_raySegment i = czm_raySegment(root1, root0);
803
+ return i;
804
+ }
805
+ }
806
+ else // qw2 == product. Repeated roots (2 intersections).
807
+ {
808
+ float root = sqrt(difference / w2);
809
+ czm_raySegment i = czm_raySegment(root, root);
810
+ return i;
811
+ }
812
+ }
813
+ }
814
+ else if (q2 < 1.0) // Inside ellipsoid (2 intersections).
815
+ {
816
+ float difference = q2 - 1.0; // Negatively valued.
817
+ float w2 = dot(w, w);
818
+ float product = w2 * difference; // Negatively valued.
819
+ float discriminant = qw * qw - product;
820
+ float temp = -qw + sqrt(discriminant); // Positively valued.
821
+ czm_raySegment i = czm_raySegment(0.0, temp / w2);
822
+ return i;
823
+ }
824
+ else // q2 == 1.0. On ellipsoid.
825
+ {
826
+ if (qw < 0.0) // Looking inward.
827
+ {
828
+ float w2 = dot(w, w);
829
+ czm_raySegment i = czm_raySegment(0.0, -qw / w2);
830
+ return i;
831
+ }
832
+ else // qw >= 0.0. Looking outward or tangent.
833
+ {
834
+ return czm_emptyRaySegment;
835
+ }
836
+ }
837
+ }
838
+
839
+ /**
840
+ * Returns the WGS84 ellipsoid, with its center at the origin of world coordinates, in eye coordinates.
841
+ *
842
+ * @name czm_getWgs84EllipsoidEC
843
+ * @glslFunction
844
+ *
845
+ * @returns {czm_ellipsoid} The WGS84 ellipsoid, with its center at the origin of world coordinates, in eye coordinates.
846
+ *
847
+ * @see Ellipsoid.getWgs84
848
+ *
849
+ * @example
850
+ * czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
851
+ */
852
+ czm_ellipsoid czm_getWgs84EllipsoidEC()
853
+ {
854
+ return czm_ellipsoidNew(
855
+ czm_view[3].xyz, // center
856
+ vec3(6378137.0, 6378137.0, 6356752.314245)); // radii
857
+ }
858
+
859
+ /**
860
+ * Computes the fraction of a Web Wercator extent at which a given geodetic latitude is located.
861
+ *
862
+ * @name czm_latitudeToWebMercatorFraction
863
+ * @glslFunction
864
+ *
865
+ * @param {float} The geodetic latitude, in radians.
866
+ * @param {float} The low portion of the Web Mercator coordinate of the southern boundary of the extent.
867
+ * @param {float} The high portion of the Web Mercator coordinate of the southern boundary of the extent.
868
+ * @param {float} The total height of the extent in Web Mercator coordinates.
869
+ *
870
+ * @returns {float} The fraction of the extent at which the latitude occurs. If the latitude is the southern
871
+ * boundary of the extent, the return value will be zero. If it is the northern boundary, the return
872
+ * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection.
873
+ */
874
+ float czm_latitudeToWebMercatorFraction(float latitude, float southMercatorYLow, float southMercatorYHigh, float oneOverMercatorHeight)
875
+ {
876
+ float sinLatitude = sin(latitude);
877
+ float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));
878
+
879
+ // mercatorY - southMercatorY in simulated double precision.
880
+ float t1 = 0.0 - southMercatorYLow;
881
+ float e = t1 - 0.0;
882
+ float t2 = ((-southMercatorYLow - e) + (0.0 - (t1 - e))) + mercatorY - southMercatorYHigh;
883
+ float highDifference = t1 + t2;
884
+ float lowDifference = t2 - (highDifference - t1);
885
+
886
+ return highDifference * oneOverMercatorHeight + lowDifference * oneOverMercatorHeight;
887
+ }
888
+
889
+ /**
890
+ * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},
891
+ * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to
892
+ * be relative to the eye. As shown in the example, the position can then be transformed in eye
893
+ * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},
894
+ * respectively.
895
+ * <p>
896
+ * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as
897
+ * described in <a href="http://blogs.agi.com/insight3d/index.php/2008/09/03/precisions-precisions/">Precisions, Precisions</a>.
898
+ * </p>
899
+ *
900
+ * @name czm_translateRelativeToEye
901
+ * @glslFunction
902
+ *
903
+ * @param {vec3} high The position's high bits.
904
+ * @param {vec3} low The position's low bits.
905
+ * @returns {vec3} The position translated to be relative to the camera's position.
906
+ *
907
+ * @example
908
+ * attribute vec3 positionHigh;
909
+ * attribute vec3 positionLow;
910
+ *
911
+ * void main()
912
+ * {
913
+ * vec3 p = czm_translateRelativeToEye(positionHigh, positionLow);
914
+ * gl_Position = czm_modelViewProjectionRelativeToEye * vec4(p, 1.0);
915
+ * }
916
+ *
917
+ * @see czm_modelViewRelativeToEye
918
+ * @see czm_modelViewProjectionRelativeToEye
919
+ * @see EncodedCartesian3
920
+ */
921
+ vec3 czm_translateRelativeToEye(vec3 high, vec3 low)
922
+ {
923
+ vec3 highDifference = high - czm_encodedCameraPositionMCHigh;
924
+ vec3 lowDifference = low - czm_encodedCameraPositionMCLow;
925
+
926
+ return highDifference + lowDifference;
927
+ }