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,31 @@
1
+ /*global define*/
2
+ define(function() {
3
+ "use strict";
4
+
5
+ /**
6
+ * Provides the type of time standards which JulianDate can take as input.
7
+ *
8
+ * @exports TimeStandard
9
+ *
10
+ * @see JulianDate
11
+ */
12
+ var TimeStandard = {
13
+ /**
14
+ * Represents the coordinated Universal Time (UTC) time standard.
15
+ *
16
+ * UTC is related to TAI according to the relationship
17
+ * <code>UTC = TAI - deltaT</code> where <code>deltaT</code> is the number of leap
18
+ * seconds which have been introduced as of the time in TAI.
19
+ *
20
+ */
21
+ UTC : 0,
22
+
23
+ /**
24
+ * Represents the International Atomic Time (TAI) time standard.
25
+ * TAI is the principal time standard to which the other time standards are related.
26
+ */
27
+ TAI : 1
28
+ };
29
+
30
+ return TimeStandard;
31
+ });
@@ -0,0 +1,285 @@
1
+ /*global define*/
2
+ define(['./DeveloperError'], function(DeveloperError) {
3
+ "use strict";
4
+
5
+ /**
6
+ * Encapsulates an algorithm to optimize triangles for the post
7
+ * vertex-shader cache. This is based on the 2007 SIGGRAPH paper
8
+ * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.'
9
+ * The runtime is linear but several passes are made.
10
+ *
11
+ * @exports Tipsify
12
+ *
13
+ * @see <a href='http://gfx.cs.princeton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf'>
14
+ * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw</a>
15
+ * by Sander, Nehab, and Barczak
16
+ */
17
+ var Tipsify = {};
18
+
19
+ /**
20
+ * Calculates the average cache miss ratio (ACMR) for a given set of indices.
21
+ *
22
+ * @param {Array} description.indices Lists triads of numbers corresponding to the indices of the vertices
23
+ * in the vertex buffer that define the mesh's triangles.
24
+ * @param {Number} [description.maximumIndex] The maximum value of the elements in <code>args.indices</code>.
25
+ * If not supplied, this value will be computed.
26
+ * @param {Number} [description.cacheSize=24] The number of vertices that can be stored in the cache at any one time.
27
+ *
28
+ * @exception {DeveloperError} indices is required.
29
+ * @exception {DeveloperError} indices length must be a multiple of three.
30
+ * @exception {DeveloperError} cacheSize must be greater than two.
31
+ *
32
+ * @return {Number} The average cache miss ratio (ACMR).
33
+ *
34
+ * @example
35
+ * var indices = [0, 1, 2, 3, 4, 5];
36
+ * var maxIndex = 5;
37
+ * var cacheSize = 3;
38
+ * var acmr = Tipsify.calculateACMR(indices, maxIndex, cacheSize);
39
+ */
40
+ Tipsify.calculateACMR = function(description) {
41
+ description = description || {};
42
+ var indices = description.indices;
43
+ var maximumIndex = description.maximumIndex;
44
+ var cacheSize = description.cacheSize || 24;
45
+
46
+ if (!indices) {
47
+ throw new DeveloperError('indices is required.');
48
+ }
49
+
50
+ var numIndices = indices.length;
51
+
52
+ if ((numIndices < 3) || (numIndices % 3 !== 0)) {
53
+ throw new DeveloperError('indices length must be a multiple of three.');
54
+ }
55
+ if (maximumIndex <= 0) {
56
+ throw new DeveloperError('maximumIndex must be greater than zero.');
57
+ }
58
+ if (cacheSize < 3) {
59
+ throw new DeveloperError('cacheSize must be greater than two.');
60
+ }
61
+
62
+ // Compute the maximumIndex if not given
63
+ if(!maximumIndex) {
64
+ maximumIndex = 0;
65
+ var currentIndex = 0;
66
+ var intoIndices = indices[currentIndex];
67
+ while (currentIndex < numIndices) {
68
+ if (intoIndices > maximumIndex) {
69
+ maximumIndex = intoIndices;
70
+ }
71
+ ++currentIndex;
72
+ intoIndices = indices[currentIndex];
73
+ }
74
+ }
75
+
76
+ // Vertex time stamps
77
+ var vertexTimeStamps = [];
78
+ for ( var i = 0; i < maximumIndex + 1; i++) {
79
+ vertexTimeStamps[i] = 0;
80
+ }
81
+
82
+ // Cache processing
83
+ var s = cacheSize + 1;
84
+ for ( var j = 0; j < numIndices; ++j) {
85
+ if ((s - vertexTimeStamps[indices[j]]) > cacheSize) {
86
+ vertexTimeStamps[indices[j]] = s;
87
+ ++s;
88
+ }
89
+ }
90
+
91
+ return (s - cacheSize + 1) / (numIndices / 3);
92
+ };
93
+
94
+ /**
95
+ * Optimizes triangles for the post-vertex shader cache.
96
+ *
97
+ * @param {Array} description.indices Lists triads of numbers corresponding to the indices of the vertices
98
+ * in the vertex buffer that define the mesh's triangles.
99
+ * @param {Number} [description.maximumIndex] The maximum value of the elements in <code>args.indices</code>.
100
+ * If not supplied, this value will be computed.
101
+ * @param {Number} [description.cacheSize=24] The number of vertices that can be stored in the cache at any one time.
102
+ *
103
+ * @exception {DeveloperError} indices is required.
104
+ * @exception {DeveloperError} indices length must be a multiple of three.
105
+ * @exception {DeveloperError} cacheSize must be greater than two.
106
+ *
107
+ * @return {Array} A list of the input indices in an optimized order.
108
+ *
109
+ * @example
110
+ * var indices = [0, 1, 2, 3, 4, 5];
111
+ * var maxIndex = 5;
112
+ * var cacheSize = 3;
113
+ * var reorderedIndices = Tipsify.tipsify(indices, maxIndex, cacheSize);
114
+ */
115
+ Tipsify.tipsify = function(description) {
116
+ description = description || {};
117
+ var indices = description.indices;
118
+ var maximumIndex = description.maximumIndex;
119
+ var cacheSize = description.cacheSize || 24;
120
+
121
+ var cursor;
122
+
123
+ function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) {
124
+ while (deadEnd.length >= 1) {
125
+ // while the stack is not empty
126
+ var d = deadEnd[deadEnd.length - 1]; // top of the stack
127
+ deadEnd.splice(deadEnd.length - 1, 1); // pop the stack
128
+
129
+ if (vertices[d].numLiveTriangles > 0) {
130
+ return d;
131
+ }
132
+ }
133
+
134
+ while (cursor < maximumIndexPlusOne) {
135
+ if (vertices[cursor].numLiveTriangles > 0) {
136
+ ++cursor;
137
+ return cursor - 1;
138
+ }
139
+ ++cursor;
140
+ }
141
+ return -1;
142
+ }
143
+
144
+ function getNextVertex(indices, cacheSize, oneRing, vertices, s, deadEnd, maximumIndexPlusOne) {
145
+ var n = -1;
146
+ var p;
147
+ var m = -1;
148
+ var itOneRing = 0;
149
+ while (itOneRing < oneRing.length) {
150
+ var index = oneRing[itOneRing];
151
+ if (vertices[index].numLiveTriangles) {
152
+ p = 0;
153
+ if ((s - vertices[index].timeStamp + (2 * vertices[index].numLiveTriangles)) <= cacheSize) {
154
+ p = s - vertices[index].timeStamp;
155
+ }
156
+ if ((p > m) || (m === -1)) {
157
+ m = p;
158
+ n = index;
159
+ }
160
+ }
161
+ ++itOneRing;
162
+ }
163
+ if (n === -1) {
164
+ return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne);
165
+ }
166
+ return n;
167
+ }
168
+
169
+ if (!indices) {
170
+ throw new DeveloperError('indices is required.');
171
+ }
172
+ var numIndices = indices.length;
173
+
174
+ if ((numIndices < 3) || (numIndices % 3 !== 0)) {
175
+ throw new DeveloperError('indices length must be a multiple of three.');
176
+ }
177
+ if (maximumIndex <= 0) {
178
+ throw new DeveloperError('maximumIndex must be greater than zero.');
179
+ }
180
+ if (cacheSize < 3) {
181
+ throw new DeveloperError('cacheSize must be greater than two.');
182
+ }
183
+
184
+ // Determine maximum index
185
+ var maximumIndexPlusOne = 0;
186
+ var currentIndex = 0;
187
+ var intoIndices = indices[currentIndex];
188
+ var endIndex = numIndices;
189
+ if (maximumIndex) {
190
+ maximumIndexPlusOne = maximumIndex + 1;
191
+ } else {
192
+ while (currentIndex < endIndex) {
193
+ if (intoIndices > maximumIndexPlusOne) {
194
+ maximumIndexPlusOne = intoIndices;
195
+ }
196
+ ++currentIndex;
197
+ intoIndices = indices[currentIndex];
198
+ }
199
+ if (maximumIndexPlusOne === -1) {
200
+ return 0;
201
+ }
202
+ ++maximumIndexPlusOne;
203
+ }
204
+
205
+ // Vertices
206
+ var vertices = [];
207
+ for ( var i = 0; i < maximumIndexPlusOne; i++) {
208
+ vertices[i] = {
209
+ numLiveTriangles : 0,
210
+ timeStamp : 0,
211
+ vertexTriangles : []
212
+ };
213
+ }
214
+ currentIndex = 0;
215
+ var triangle = 0;
216
+ while (currentIndex < endIndex) {
217
+ (vertices[indices[currentIndex]]).vertexTriangles.push(triangle);
218
+ ++(vertices[indices[currentIndex]]).numLiveTriangles;
219
+ (vertices[indices[currentIndex + 1]]).vertexTriangles.push(triangle);
220
+ ++(vertices[indices[currentIndex + 1]]).numLiveTriangles;
221
+ (vertices[indices[currentIndex + 2]]).vertexTriangles.push(triangle);
222
+ ++(vertices[indices[currentIndex + 2]]).numLiveTriangles;
223
+ ++triangle;
224
+ currentIndex += 3;
225
+ }
226
+
227
+ // Starting index
228
+ var f = 0;
229
+
230
+ // Time Stamp
231
+ var s = cacheSize + 1;
232
+ cursor = 1;
233
+
234
+ // Process
235
+ var oneRing = [];
236
+ var deadEnd = []; //Stack
237
+ var vertex;
238
+ var intoVertices;
239
+ var currentOutputIndex = 0;
240
+ var outputIndices = [];
241
+ var numTriangles = numIndices / 3;
242
+ var triangleEmitted = [];
243
+ for (i = 0; i < numTriangles; i++) {
244
+ triangleEmitted[i] = false;
245
+ }
246
+ var index;
247
+ var limit;
248
+ while (f !== -1) {
249
+ oneRing = [];
250
+ intoVertices = vertices[f];
251
+ limit = intoVertices.vertexTriangles.length;
252
+ for ( var k = 0; k < limit; ++k) {
253
+ triangle = intoVertices.vertexTriangles[k];
254
+ if (!triangleEmitted[triangle]) {
255
+ triangleEmitted[triangle] = true;
256
+ currentIndex = triangle + triangle + triangle;
257
+ for ( var j = 0; j < 3; ++j) {
258
+ // Set this index as a possible next index
259
+ index = indices[currentIndex];
260
+ oneRing.push(index);
261
+ deadEnd.push(index);
262
+
263
+ // Output index
264
+ outputIndices[currentOutputIndex] = index;
265
+ ++currentOutputIndex;
266
+
267
+ // Cache processing
268
+ vertex = vertices[index];
269
+ --vertex.numLiveTriangles;
270
+ if ((s - vertex.timeStamp) > cacheSize) {
271
+ vertex.timeStamp = s;
272
+ ++s;
273
+ }
274
+ ++currentIndex;
275
+ }
276
+ }
277
+ }
278
+ f = getNextVertex(indices, cacheSize, oneRing, vertices, s, deadEnd, maximumIndexPlusOne);
279
+ }
280
+
281
+ return outputIndices;
282
+ };
283
+
284
+ return Tipsify;
285
+ });
@@ -0,0 +1,614 @@
1
+ /*global define*/
2
+ define([
3
+ './defaultValue',
4
+ './DeveloperError',
5
+ './Iau2006XysData',
6
+ './Iau2006XysSample',
7
+ './Math',
8
+ './Matrix3',
9
+ './Matrix4',
10
+ './Cartesian2',
11
+ './Cartesian3',
12
+ './Cartesian4',
13
+ './TimeConstants',
14
+ './Ellipsoid',
15
+ './JulianDate',
16
+ './EarthOrientationParameters',
17
+ './EarthOrientationParametersSample',
18
+ '../ThirdParty/when'
19
+ ],
20
+ function(
21
+ defaultValue,
22
+ DeveloperError,
23
+ Iau2006XysData,
24
+ Iau2006XysSample,
25
+ CesiumMath,
26
+ Matrix3,
27
+ Matrix4,
28
+ Cartesian2,
29
+ Cartesian3,
30
+ Cartesian4,
31
+ TimeConstants,
32
+ Ellipsoid,
33
+ JulianDate,
34
+ EarthOrientationParameters,
35
+ EarthOrientationParametersSample,
36
+ when) {
37
+ "use strict";
38
+
39
+ /**
40
+ * Contains functions for transforming positions to various reference frames.
41
+ * @alias Transforms
42
+ */
43
+ var Transforms = {};
44
+
45
+ var eastNorthUpToFixedFrameNormal = new Cartesian3();
46
+ var eastNorthUpToFixedFrameTangent = new Cartesian3();
47
+ var eastNorthUpToFixedFrameBitangent = new Cartesian3();
48
+
49
+ /**
50
+ * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes
51
+ * centered at the provided origin to the provided ellipsoid's fixed reference frame.
52
+ * The local axes are defined as:
53
+ * <ul>
54
+ * <li>The <code>x</code> axis points in the local east direction.</li>
55
+ * <li>The <code>y</code> axis points in the local north direction.</li>
56
+ * <li>The <code>z</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>
57
+ * </ul>
58
+ *
59
+ * @memberof Transforms
60
+ *
61
+ * @param {Cartesian3} origin The center point of the local reference frame.
62
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.
63
+ * @param {Matrix4} [result] The object onto which to store the result.
64
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.
65
+ *
66
+ * @exception {DeveloperError} origin is required.
67
+ *
68
+ * @example
69
+ * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame.
70
+ * var ellipsoid = Ellipsoid.WGS84;
71
+ * var center = ellipsoid.cartographicToCartesian(Cartographic.ZERO);
72
+ * var transform = Transforms.eastNorthUpToFixedFrame(center);
73
+ */
74
+ Transforms.eastNorthUpToFixedFrame = function(origin, ellipsoid, result) {
75
+ if (typeof origin === 'undefined') {
76
+ throw new DeveloperError('origin is required.');
77
+ }
78
+
79
+ // If x and y are zero, assume origin is at a pole, which is a special case.
80
+ if (CesiumMath.equalsEpsilon(origin.x, 0.0, CesiumMath.EPSILON14) &&
81
+ CesiumMath.equalsEpsilon(origin.y, 0.0, CesiumMath.EPSILON14)) {
82
+ var sign = CesiumMath.sign(origin.z);
83
+ if (typeof result === 'undefined') {
84
+ return new Matrix4(
85
+ 0.0, -sign, 0.0, origin.x,
86
+ 1.0, 0.0, 0.0, origin.y,
87
+ 0.0, 0.0, sign, origin.z,
88
+ 0.0, 0.0, 0.0, 1.0);
89
+ }
90
+ result[0] = 0.0;
91
+ result[1] = 1.0;
92
+ result[2] = 0.0;
93
+ result[3] = 0.0;
94
+ result[4] = -sign;
95
+ result[5] = 0.0;
96
+ result[6] = 0.0;
97
+ result[7] = 0.0;
98
+ result[8] = 0.0;
99
+ result[9] = 0.0;
100
+ result[10] = sign;
101
+ result[11] = 0.0;
102
+ result[12] = origin.x;
103
+ result[13] = origin.y;
104
+ result[14] = origin.z;
105
+ result[15] = 1.0;
106
+ return result;
107
+ }
108
+
109
+ var normal = eastNorthUpToFixedFrameNormal;
110
+ var tangent = eastNorthUpToFixedFrameTangent;
111
+ var bitangent = eastNorthUpToFixedFrameBitangent;
112
+
113
+ ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
114
+ ellipsoid.geodeticSurfaceNormal(origin, normal);
115
+
116
+ tangent.x = -origin.y;
117
+ tangent.y = origin.x;
118
+ tangent.z = 0.0;
119
+ Cartesian3.normalize(tangent, tangent);
120
+
121
+ normal.cross(tangent, bitangent);
122
+
123
+ if (typeof result === 'undefined') {
124
+ return new Matrix4(
125
+ tangent.x, bitangent.x, normal.x, origin.x,
126
+ tangent.y, bitangent.y, normal.y, origin.y,
127
+ tangent.z, bitangent.z, normal.z, origin.z,
128
+ 0.0, 0.0, 0.0, 1.0);
129
+ }
130
+ result[0] = tangent.x;
131
+ result[1] = tangent.y;
132
+ result[2] = tangent.z;
133
+ result[3] = 0.0;
134
+ result[4] = bitangent.x;
135
+ result[5] = bitangent.y;
136
+ result[6] = bitangent.z;
137
+ result[7] = 0.0;
138
+ result[8] = normal.x;
139
+ result[9] = normal.y;
140
+ result[10] = normal.z;
141
+ result[11] = 0.0;
142
+ result[12] = origin.x;
143
+ result[13] = origin.y;
144
+ result[14] = origin.z;
145
+ result[15] = 1.0;
146
+ return result;
147
+ };
148
+
149
+ var northEastDownToFixedFrameNormal = new Cartesian3();
150
+ var northEastDownToFixedFrameTangent = new Cartesian3();
151
+ var northEastDownToFixedFrameBitangent = new Cartesian3();
152
+
153
+ /**
154
+ * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes
155
+ * centered at the provided origin to the provided ellipsoid's fixed reference frame.
156
+ * The local axes are defined as:
157
+ * <ul>
158
+ * <li>The <code>x</code> axis points in the local north direction.</li>
159
+ * <li>The <code>y</code> axis points in the local east direction.</li>
160
+ * <li>The <code>z</code> axis points in the opposite direction of the ellipsoid surface normal which passes through the position.</li>
161
+ * </ul>
162
+ *
163
+ * @memberof Transforms
164
+ *
165
+ * @param {Cartesian3} origin The center point of the local reference frame.
166
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.
167
+ * @param {Matrix4} [result] The object onto which to store the result.
168
+ * @return {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.
169
+ *
170
+ * @exception {DeveloperError} origin is required.
171
+ *
172
+ * @example
173
+ * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame.
174
+ * var ellipsoid = Ellipsoid.WGS84;
175
+ * var center = ellipsoid.cartographicToCartesian(Cartographic.ZERO);
176
+ * var transform = Transforms.northEastDownToFixedFrame(center);
177
+ */
178
+ Transforms.northEastDownToFixedFrame = function(origin, ellipsoid, result) {
179
+ if (typeof origin === 'undefined') {
180
+ throw new DeveloperError('origin is required.');
181
+ }
182
+
183
+ if (CesiumMath.equalsEpsilon(origin.x, 0.0, CesiumMath.EPSILON14) &&
184
+ CesiumMath.equalsEpsilon(origin.y, 0.0, CesiumMath.EPSILON14)) {
185
+ // The poles are special cases. If x and y are zero, assume origin is at a pole.
186
+ var sign = CesiumMath.sign(origin.z);
187
+ if (typeof result === 'undefined') {
188
+ return new Matrix4(
189
+ -sign, 0.0, 0.0, origin.x,
190
+ 0.0, 1.0, 0.0, origin.y,
191
+ 0.0, 0.0, -sign, origin.z,
192
+ 0.0, 0.0, 0.0, 1.0);
193
+ }
194
+ result[0] = -sign;
195
+ result[1] = 0.0;
196
+ result[2] = 0.0;
197
+ result[3] = 0.0;
198
+ result[4] = 0.0;
199
+ result[5] = 1.0;
200
+ result[6] = 0.0;
201
+ result[7] = 0.0;
202
+ result[8] = 0.0;
203
+ result[9] = 0.0;
204
+ result[10] = -sign;
205
+ result[11] = 0.0;
206
+ result[12] = origin.x;
207
+ result[13] = origin.y;
208
+ result[14] = origin.z;
209
+ result[15] = 1.0;
210
+ return result;
211
+ }
212
+
213
+ var normal = northEastDownToFixedFrameNormal;
214
+ var tangent = northEastDownToFixedFrameTangent;
215
+ var bitangent = northEastDownToFixedFrameBitangent;
216
+
217
+ ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
218
+ ellipsoid.geodeticSurfaceNormal(origin, normal);
219
+
220
+ tangent.x = -origin.y;
221
+ tangent.y = origin.x;
222
+ tangent.z = 0.0;
223
+ Cartesian3.normalize(tangent, tangent);
224
+
225
+ normal.cross(tangent, bitangent);
226
+
227
+ if (typeof result === 'undefined') {
228
+ return new Matrix4(
229
+ bitangent.x, tangent.x, -normal.x, origin.x,
230
+ bitangent.y, tangent.y, -normal.y, origin.y,
231
+ bitangent.z, tangent.z, -normal.z, origin.z,
232
+ 0.0, 0.0, 0.0, 1.0);
233
+ }
234
+ result[0] = bitangent.x;
235
+ result[1] = bitangent.y;
236
+ result[2] = bitangent.z;
237
+ result[3] = 0.0;
238
+ result[4] = tangent.x;
239
+ result[5] = tangent.y;
240
+ result[6] = tangent.z;
241
+ result[7] = 0.0;
242
+ result[8] = -normal.x;
243
+ result[9] = -normal.y;
244
+ result[10] = -normal.z;
245
+ result[11] = 0.0;
246
+ result[12] = origin.x;
247
+ result[13] = origin.y;
248
+ result[14] = origin.z;
249
+ result[15] = 1.0;
250
+ return result;
251
+ };
252
+
253
+ var gmstConstant0 = 6 * 3600 + 41 * 60 + 50.54841;
254
+ var gmstConstant1 = 8640184.812866;
255
+ var gmstConstant2 = 0.093104;
256
+ var gmstConstant3 = -6.2E-6;
257
+ var rateCoef = 1.1772758384668e-19;
258
+ var wgs84WRPrecessing = 7.2921158553E-5;
259
+ var twoPiOverSecondsInDay = CesiumMath.TWO_PI / 86400.0;
260
+
261
+ /**
262
+ * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the
263
+ * pseudo-fixed axes at a given time. This method treats the UT1 time standard as equivalent to UTC.
264
+ *
265
+ * @memberof Transforms
266
+ *
267
+ * @param {JulianDate} date The time at which to compute the rotation matrix.
268
+ * @param {Matrix3} [result] The object onto which to store the result.
269
+ * @return {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.
270
+ *
271
+ * @exception {DeveloperError} date is required.
272
+ *
273
+ * @example
274
+ * //Set the view to in the inertial frame.
275
+ * function updateAndRender() {
276
+ * var now = new JulianDate();
277
+ * scene.initializeFrame();
278
+ * scene.setSunPosition(computeSunPosition(now));
279
+ * scene.getCamera().transform = Matrix4.fromRotationTranslation(Transforms.computeTemeToPseudoFixedMatrix(now), Cartesian3.ZERO);
280
+ * scene.render();
281
+ * requestAnimationFrame(updateAndRender);
282
+ * }
283
+ * updateAndRender();
284
+ */
285
+ Transforms.computeTemeToPseudoFixedMatrix = function (date, result) {
286
+ if (typeof date === 'undefined') {
287
+ throw new DeveloperError('date is required.');
288
+ }
289
+
290
+ // GMST is actually computed using UT1. We're using UTC as an approximation of UT1.
291
+ // We do not want to use the function like convertTaiToUtc in JulianDate because
292
+ // we explicitly do not want to fail when inside the leap second.
293
+
294
+ var dateInUtc = date.addSeconds(-date.getTaiMinusUtc());
295
+ var utcDayNumber = dateInUtc.getJulianDayNumber();
296
+ var utcSecondsIntoDay = dateInUtc.getSecondsOfDay();
297
+
298
+ var t;
299
+ var diffDays = utcDayNumber - 2451545;
300
+ if (utcSecondsIntoDay >= 43200.0) {
301
+ t = (diffDays + 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;
302
+ } else {
303
+ t = (diffDays - 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;
304
+ }
305
+
306
+ var gmst0 = gmstConstant0 + t * (gmstConstant1 + t * (gmstConstant2 + t * gmstConstant3));
307
+ var angle = (gmst0 * twoPiOverSecondsInDay) % CesiumMath.TWO_PI;
308
+ var ratio = wgs84WRPrecessing + rateCoef * (utcDayNumber - 2451545.5);
309
+ var secondsSinceMidnight = (utcSecondsIntoDay + TimeConstants.SECONDS_PER_DAY * 0.5) % TimeConstants.SECONDS_PER_DAY;
310
+ var gha = angle + (ratio * secondsSinceMidnight);
311
+ var cosGha = Math.cos(gha);
312
+ var sinGha = Math.sin(gha);
313
+
314
+ if (typeof result === 'undefined') {
315
+ return new Matrix3(cosGha, sinGha, 0.0,
316
+ -sinGha, cosGha, 0.0,
317
+ 0.0, 0.0, 1.0);
318
+ }
319
+ result[0] = cosGha;
320
+ result[1] = -sinGha;
321
+ result[2] = 0.0;
322
+ result[3] = sinGha;
323
+ result[4] = cosGha;
324
+ result[5] = 0.0;
325
+ result[6] = 0.0;
326
+ result[7] = 0.0;
327
+ result[8] = 1.0;
328
+ return result;
329
+ };
330
+
331
+ /**
332
+ * The source of IAU 2006 XYS data, used for computing the transformation between the
333
+ * Fixed and ICRF axes.
334
+ * @type {Iau2006XysData}
335
+ *
336
+ * @memberof Transforms
337
+ *
338
+ * @see Transforms#computeIcrfToFixedMatrix
339
+ * @see Transforms#computeFixedToIcrfMatrix
340
+ */
341
+ Transforms.iau2006XysData = new Iau2006XysData();
342
+
343
+ /**
344
+ * The source of Earth Orientation Parameters (EOP) data, used for computing the transformation
345
+ * between the Fixed and ICRF axes. By default, zero values are used for all EOP values,
346
+ * yielding a reasonable but not completely accurate representation of the ICRF axes.
347
+ * @type {EarthOrientationParameters}
348
+ *
349
+ * @memberof Transforms
350
+ *
351
+ * @see Transforms#computeIcrfToFixedMatrix
352
+ * @see Transforms#computeFixedToIcrfMatrix
353
+ */
354
+ Transforms.earthOrientationParameters = EarthOrientationParameters.NONE;
355
+
356
+ var ttMinusTai = 32.184;
357
+ var j2000ttDays = 2451545.0;
358
+
359
+ /**
360
+ * Preloads the data necessary to transform between the ICRF and Fixed axes, in either
361
+ * direction, over a given interval. This function returns a promise that, when resolved,
362
+ * indicates that the preload has completed.
363
+ *
364
+ * @memberof Transforms
365
+ *
366
+ * @param {TimeInterval} timeInterval The interval to preload.
367
+ * @returns {Promise} A promise that, when resolved, indicates that the preload has completed
368
+ * and evaluation of the transformation between the fixed and ICRF axes will
369
+ * no longer return undefined for a time inside the interval.
370
+ *
371
+ * @see Transforms#computeIcrfToFixedMatrix
372
+ * @see Transforms#computeFixedToIcrfMatrix
373
+ * @see when
374
+ *
375
+ * @example
376
+ * var interval = new TimeInterval(...);
377
+ * when(preloadIcrfFixed(interval), function() {
378
+ * // the data is now loaded
379
+ * });
380
+ */
381
+ Transforms.preloadIcrfFixed = function(timeInterval) {
382
+ var startDayTT = timeInterval.start.getJulianDayNumber();
383
+ var startSecondTT = timeInterval.start.getSecondsOfDay() + ttMinusTai;
384
+ var stopDayTT = timeInterval.stop.getJulianDayNumber();
385
+ var stopSecondTT = timeInterval.stop.getSecondsOfDay() + ttMinusTai;
386
+
387
+ var xysPromise = Transforms.iau2006XysData.preload(startDayTT, startSecondTT, stopDayTT, stopSecondTT);
388
+ var eopPromise = Transforms.earthOrientationParameters.getPromiseToLoad();
389
+
390
+ return when.all([xysPromise, eopPromise]);
391
+ };
392
+
393
+ /**
394
+ * Computes a rotation matrix to transform a point or vector from the International Celestial
395
+ * Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF)
396
+ * at a given time. This function may return undefined if the data necessary to
397
+ * do the transformation is not yet loaded.
398
+ *
399
+ * @memberof Transforms
400
+ *
401
+ * @param {JulianDate} date The time at which to compute the rotation matrix.
402
+ * @param {Matrix3} [result] The object onto which to store the result. If this parameter is
403
+ * not specified, a new instance is created and returned.
404
+ * @return {Matrix3} The rotation matrix, or undefined if the data necessary to do the
405
+ * transformation is not yet loaded.
406
+ *
407
+ * @exception {DeveloperError} date is required.
408
+ *
409
+ * @see Transforms#preloadIcrfFixed
410
+ *
411
+ * @example
412
+ * //Set the view to the inertial frame.
413
+ * function updateAndRender() {
414
+ * var now = new JulianDate();
415
+ * scene.initializeFrame();
416
+ * scene.setSunPosition(computeSunPosition(now));
417
+ * var icrfToFixed = Transforms.computeIcrfToFixedMatrix(now);
418
+ * if (typeof icrfToFixed !== 'undefined') {
419
+ * scene.getCamera().transform = Matrix4.fromRotationTranslation(icrfToFixed, Cartesian3.ZERO);
420
+ * }
421
+ * scene.render();
422
+ * requestAnimationFrame(updateAndRender);
423
+ * }
424
+ * updateAndRender();
425
+ */
426
+ Transforms.computeIcrfToFixedMatrix = function(date, result) {
427
+ if (typeof date === 'undefined') {
428
+ throw new DeveloperError('date is required.');
429
+ }
430
+
431
+ var fixedToIcrfMtx = Transforms.computeFixedToIcrfMatrix(date, result);
432
+ if (typeof fixedToIcrfMtx === 'undefined') {
433
+ return undefined;
434
+ }
435
+
436
+ return fixedToIcrfMtx.transpose(result);
437
+ };
438
+
439
+ var xysScratch = new Iau2006XysSample(0.0, 0.0, 0.0);
440
+ var eopScratch = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
441
+ var rotation1Scratch = new Matrix3();
442
+ var rotation2Scratch = new Matrix3();
443
+
444
+ /**
445
+ * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF)
446
+ * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes
447
+ * at a given time. This function may return undefined if the data necessary to
448
+ * do the transformation is not yet loaded.
449
+ *
450
+ * @memberof Transforms
451
+ *
452
+ * @param {JulianDate} date The time at which to compute the rotation matrix.
453
+ * @param {Matrix3} [result] The object onto which to store the result. If this parameter is
454
+ * not specified, a new instance is created and returned.
455
+ * @return {Matrix3} The rotation matrix, or undefined if the data necessary to do the
456
+ * transformation is not yet loaded.
457
+ *
458
+ * @exception {DeveloperError} date is required.
459
+ *
460
+ * @see Transforms#preloadIcrfFixed
461
+ *
462
+ * @example
463
+ * // Transform a point from the ICRF axes to the Fixed axes.
464
+ * var now = new JulianDate();
465
+ * var pointInFixed = new Cartesian3(...);
466
+ * var fixedToIcrf = Transforms.computeIcrfToFixedMatrix(now);
467
+ * var pointInInertial;
468
+ * if (typeof fixedToIcrf !== 'undefined') {
469
+ * pointInInertial = fixedToIcrf.multiplyByVector(pointInFixed);
470
+ * }
471
+ */
472
+ Transforms.computeFixedToIcrfMatrix = function(date, result) {
473
+ if (typeof date === 'undefined') {
474
+ throw new DeveloperError('date is required.');
475
+ }
476
+
477
+ // Compute pole wander
478
+ var eop = Transforms.earthOrientationParameters.compute(date, eopScratch);
479
+ if (typeof eop === 'undefined') {
480
+ return undefined;
481
+ }
482
+
483
+ // There is no external conversion to Terrestrial Time (TT).
484
+ // So use International Atomic Time (TAI) and convert using offsets.
485
+ // Here we are assuming that dayTT and secondTT are positive
486
+ var dayTT = date.getJulianDayNumber();
487
+ // It's possible here that secondTT could roll over 86400
488
+ // This does not seem to affect the precision (unit tests check for this)
489
+ var secondTT = date.getSecondsOfDay() + ttMinusTai;
490
+
491
+ var xys = Transforms.iau2006XysData.computeXysRadians(dayTT, secondTT, xysScratch);
492
+ if (typeof xys === 'undefined') {
493
+ return undefined;
494
+ }
495
+
496
+ var x = xys.x + eop.xPoleOffset;
497
+ var y = xys.y + eop.yPoleOffset;
498
+
499
+ // Compute XYS rotation
500
+ var a = 1.0 / (1.0 + Math.sqrt(1.0 - x * x - y * y));
501
+
502
+ var rotation1 = rotation1Scratch;
503
+ rotation1[0] = 1.0 - a * x * x;
504
+ rotation1[3] = -a * x * y;
505
+ rotation1[6] = x;
506
+ rotation1[1] = -a * x * y;
507
+ rotation1[4] = 1 - a * y * y;
508
+ rotation1[7] = y;
509
+ rotation1[2] = -x;
510
+ rotation1[5] = -y;
511
+ rotation1[8] = 1 - a * (x * x + y * y);
512
+
513
+ var rotation2 = Matrix3.fromRotationZ(-xys.s, rotation2Scratch);
514
+ var matrixQ = rotation1.multiply(rotation2, rotation1Scratch);
515
+
516
+ // Similar to TT conversions above
517
+ // It's possible here that secondTT could roll over 86400
518
+ // This does not seem to affect the precision (unit tests check for this)
519
+ var dateUt1day = date.getJulianDayNumber();
520
+ var dateUt1sec = date.getSecondsOfDay() - date.getTaiMinusUtc() + eop.ut1MinusUtc;
521
+
522
+ // Compute Earth rotation angle
523
+ // The IERS standard for era is
524
+ // era = 0.7790572732640 + 1.00273781191135448 * Tu
525
+ // where
526
+ // Tu = JulianDateInUt1 - 2451545.0
527
+ // However, you get much more precision if you make the following simplification
528
+ // era = a + (1 + b) * (JulianDayNumber + FractionOfDay - 2451545)
529
+ // era = a + (JulianDayNumber - 2451545) + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)
530
+ // era = a + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)
531
+ // since (JulianDayNumber - 2451545) represents an integer number of revolutions which will be discarded anyway.
532
+ var daysSinceJ2000 = dateUt1day - 2451545;
533
+ var fractionOfDay = dateUt1sec / TimeConstants.SECONDS_PER_DAY;
534
+ var era = 0.7790572732640 + fractionOfDay + 0.00273781191135448 * (daysSinceJ2000 + fractionOfDay);
535
+ era = (era % 1.0) * CesiumMath.TWO_PI;
536
+
537
+ var earthRotation = Matrix3.fromRotationZ(era, rotation2Scratch);
538
+
539
+ // pseudoFixed to ICRF
540
+ var pfToIcrf = matrixQ.multiply(earthRotation, rotation1Scratch);
541
+
542
+ // Compute pole wander matrix
543
+ var cosxp = Math.cos(eop.xPoleWander);
544
+ var cosyp = Math.cos(eop.yPoleWander);
545
+ var sinxp = Math.sin(eop.xPoleWander);
546
+ var sinyp = Math.sin(eop.yPoleWander);
547
+
548
+ var ttt = (dayTT - j2000ttDays) + secondTT / TimeConstants.SECONDS_PER_DAY;
549
+ ttt /= 36525.0;
550
+
551
+ // approximate sp value in rad
552
+ var sp = -47.0e-6 * ttt * CesiumMath.RADIANS_PER_DEGREE / 3600.0;
553
+ var cossp = Math.cos(sp);
554
+ var sinsp = Math.sin(sp);
555
+
556
+ var fToPfMtx = rotation2Scratch;
557
+ fToPfMtx[0] = cosxp * cossp;
558
+ fToPfMtx[1] = cosxp * sinsp;
559
+ fToPfMtx[2] = sinxp;
560
+ fToPfMtx[3] = -cosyp * sinsp + sinyp * sinxp * cossp;
561
+ fToPfMtx[4] = cosyp * cossp + sinyp * sinxp * sinsp;
562
+ fToPfMtx[5] = -sinyp * cosxp;
563
+ fToPfMtx[6] = -sinyp * sinsp - cosyp * sinxp * cossp;
564
+ fToPfMtx[7] = sinyp * cossp - cosyp * sinxp * sinsp;
565
+ fToPfMtx[8] = cosyp * cosxp;
566
+
567
+ return pfToIcrf.multiply(fToPfMtx, result);
568
+ };
569
+
570
+ var pointToWindowCoordinatesTemp = new Cartesian4();
571
+
572
+ /**
573
+ * Transform a point from model coordinates to window coordinates.
574
+ *
575
+ * @memberof Transforms
576
+ *
577
+ * @param {Matrix4} modelViewProjectionMatrix The 4x4 model-view-projection matrix.
578
+ * @param {Matrix4} viewportTransformation The 4x4 viewport transformation.
579
+ * @param {Cartesian3} point The point to transform.
580
+ * @param {Cartesian2} [result] The object onto which to store the result.
581
+ * @return {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.
582
+ *
583
+ * @exception {DeveloperError} modelViewProjectionMatrix is required.
584
+ * @exception {DeveloperError} viewportTransformation is required.
585
+ * @exception {DeveloperError} point is required.
586
+ *
587
+ * @see UniformState#getModelViewProjection
588
+ * @see czm_modelViewProjection
589
+ * @see UniformState#getViewportTransformation
590
+ * @see czm_viewportTransformation
591
+ */
592
+ Transforms.pointToWindowCoordinates = function (modelViewProjectionMatrix, viewportTransformation, point, result) {
593
+ if (typeof modelViewProjectionMatrix === 'undefined') {
594
+ throw new DeveloperError('modelViewProjectionMatrix is required.');
595
+ }
596
+
597
+ if (typeof viewportTransformation === 'undefined') {
598
+ throw new DeveloperError('viewportTransformation is required.');
599
+ }
600
+
601
+ if (typeof point === 'undefined') {
602
+ throw new DeveloperError('point is required.');
603
+ }
604
+
605
+ var tmp = pointToWindowCoordinatesTemp;
606
+
607
+ Matrix4.multiplyByPoint(modelViewProjectionMatrix, point, tmp);
608
+ Cartesian4.multiplyByScalar(tmp, 1.0 / tmp.w, tmp);
609
+ Matrix4.multiplyByVector(viewportTransformation, tmp, tmp);
610
+ return Cartesian2.fromCartesian4(tmp, result);
611
+ };
612
+
613
+ return Transforms;
614
+ });