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,568 @@
1
+ /*global define*/
2
+ define([
3
+ './defaultValue',
4
+ './DeveloperError',
5
+ './Cartesian3',
6
+ './EncodedCartesian3',
7
+ './GeographicProjection',
8
+ './ComponentDatatype',
9
+ './PrimitiveType',
10
+ './Tipsify'
11
+ ], function(
12
+ defaultValue,
13
+ DeveloperError,
14
+ Cartesian3,
15
+ EncodedCartesian3,
16
+ GeographicProjection,
17
+ ComponentDatatype,
18
+ PrimitiveType,
19
+ Tipsify) {
20
+ "use strict";
21
+
22
+ /**
23
+ * DOC_TBA
24
+ *
25
+ * @exports MeshFilters
26
+ *
27
+ * @see Context#createVertexArrayFromMesh
28
+ */
29
+ var MeshFilters = {};
30
+
31
+ /**
32
+ * Converts a mesh's triangle indices to line indices. Each list of indices in the mesh's <code>indexList</code> with
33
+ * a primitive type of <code>triangles</code>, <code>triangleStrip</code>, or <code>trangleFan</code> is converted to a
34
+ * list of indices with a primitive type of <code>lines</code>. Lists of indices with other primitive types remain unchanged.
35
+ * <br /><br />
36
+ * The <code>mesh</code> argument should use the standard layout like the mesh returned by {@link BoxTessellator}.
37
+ * <br /><br />
38
+ * This filter is commonly used to create a wireframe mesh for visual debugging.
39
+ *
40
+ * @param {Object} mesh The mesh to filter, which is modified in place.
41
+ *
42
+ * @returns The modified <code>mesh</code> argument, with its triangle indices converted to lines.
43
+ *
44
+ * @see BoxTessellator
45
+ *
46
+ * @example
47
+ * var mesh = BoxTessellator.compute();
48
+ * mesh = MeshFilters.toWireframeInPlace(mesh);
49
+ */
50
+ MeshFilters.toWireframeInPlace = function(mesh) {
51
+ function addTriangle(lines, i0, i1, i2) {
52
+ lines.push(i0);
53
+ lines.push(i1);
54
+
55
+ lines.push(i1);
56
+ lines.push(i2);
57
+
58
+ lines.push(i2);
59
+ lines.push(i0);
60
+ }
61
+
62
+ function trianglesToLines(triangles) {
63
+ var lines = [];
64
+ var count = triangles.length;
65
+ for ( var i = 0; i < count; i += 3) {
66
+ addTriangle(lines, triangles[i], triangles[i + 1], triangles[i + 2]);
67
+ }
68
+
69
+ return lines;
70
+ }
71
+
72
+ function triangleStripToLines(triangles) {
73
+ var lines = [];
74
+ var count = triangles.length;
75
+
76
+ if (count >= 3) {
77
+ addTriangle(lines, triangles[0], triangles[1], triangles[2]);
78
+
79
+ for ( var i = 3; i < count; ++i) {
80
+ addTriangle(lines, triangles[i - 1], triangles[i], triangles[i - 2]);
81
+ }
82
+ }
83
+
84
+ return lines;
85
+ }
86
+
87
+ function triangleFanToLines(triangles) {
88
+ var lines = [];
89
+
90
+ if (triangles.length > 0) {
91
+ var base = triangles[0];
92
+ var count = triangles.length - 1;
93
+ for ( var i = 1; i < count; ++i) {
94
+ addTriangle(lines, base, triangles[i], triangles[i + 1]);
95
+ }
96
+ }
97
+
98
+ return lines;
99
+ }
100
+
101
+ if (mesh) {
102
+ var indexLists = mesh.indexLists;
103
+ if (indexLists) {
104
+ var count = indexLists.length;
105
+ for ( var i = 0; i < count; ++i) {
106
+ var indices = indexLists[i];
107
+
108
+ switch (indices.primitiveType) {
109
+ case PrimitiveType.TRIANGLES:
110
+ indices.primitiveType = PrimitiveType.LINES;
111
+ indices.values = trianglesToLines(indices.values);
112
+ break;
113
+ case PrimitiveType.TRIANGLE_STRIP:
114
+ indices.primitiveType = PrimitiveType.LINES;
115
+ indices.values = triangleStripToLines(indices.values);
116
+ break;
117
+ case PrimitiveType.TRIANGLE_FAN:
118
+ indices.primitiveType = PrimitiveType.LINES;
119
+ indices.values = triangleFanToLines(indices.values);
120
+ break;
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ return mesh;
127
+ };
128
+
129
+ /**
130
+ * DOC_TBA
131
+ */
132
+ MeshFilters.createAttributeIndices = function(mesh) {
133
+ var indices = {};
134
+
135
+ if (mesh) {
136
+ var attributes = mesh.attributes;
137
+ var j = 0;
138
+
139
+ for ( var name in attributes) {
140
+ if (attributes.hasOwnProperty(name)) {
141
+ indices[name] = j++;
142
+ }
143
+ }
144
+ }
145
+
146
+ return indices;
147
+ };
148
+
149
+ /**
150
+ * DOC_TBA
151
+ */
152
+ MeshFilters.mapAttributeIndices = function(indices, map) {
153
+ var mappedIndices = {};
154
+
155
+ if (indices && map) {
156
+ for ( var name in map) {
157
+ if (map.hasOwnProperty(name)) {
158
+ mappedIndices[map[name]] = indices[name];
159
+ }
160
+ }
161
+ }
162
+
163
+ return mappedIndices;
164
+ };
165
+
166
+ MeshFilters._computeNumberOfAttributes = function(mesh) {
167
+ var numberOfVertices = -1;
168
+ for ( var property in mesh.attributes) {
169
+ if (mesh.attributes.hasOwnProperty(property) && mesh.attributes[property].values) {
170
+ var attribute = mesh.attributes[property];
171
+ var num = attribute.values.length / attribute.componentsPerAttribute;
172
+ if ((numberOfVertices !== num) && (numberOfVertices !== -1)) {
173
+ throw new DeveloperError('All mesh attribute lists must have the same number of attributes.');
174
+ }
175
+ numberOfVertices = num;
176
+ }
177
+ }
178
+
179
+ return numberOfVertices;
180
+ };
181
+
182
+ /**
183
+ * Reorders a mesh's indices to achieve better performance from the GPU's pre-vertex-shader cache.
184
+ * Each list of indices in the mesh's <code>indexList</code> is reordered to keep the same index-vertex correspondence.
185
+ * <br /><br />
186
+ * The <code>mesh</code> argument should use the standard layout like the mesh returned by {@link BoxTessellator}.
187
+ * <br /><br />
188
+
189
+ * @param {Object} mesh The mesh to filter, which is modified in place.
190
+ *
191
+ * @exception {DeveloperError} All mesh attribute lists must have the same number of attributes.
192
+ *
193
+ * @returns The modified <code>mesh</code> argument, with its vertices and indices reordered for the GPU's pre-vertex-shader cache.
194
+ *
195
+ * @see MeshFilters.reorderForPostVertexCache
196
+ *
197
+ * @example
198
+ * var mesh = CubeMapEllipsoidTessellator.compute(...);
199
+ * mesh = MeshFilters.reorderForPreVertexCache(mesh);
200
+ */
201
+ MeshFilters.reorderForPreVertexCache = function(mesh) {
202
+ if (mesh) {
203
+ var numVertices = MeshFilters._computeNumberOfAttributes(mesh);
204
+
205
+ var indexCrossReferenceOldToNew = [];
206
+ for ( var i = 0; i < numVertices; i++) {
207
+ indexCrossReferenceOldToNew[i] = -1;
208
+ }
209
+
210
+ //Construct cross reference and reorder indices
211
+ var indexLists = mesh.indexLists;
212
+ if (indexLists) {
213
+ var count = indexLists.length;
214
+ for ( var j = 0; j < count; ++j) {
215
+ var indicesIn = indexLists[j].values;
216
+ var numIndices = indicesIn.length;
217
+ var indicesOut = [];
218
+ var intoIndicesIn = 0;
219
+ var intoIndicesOut = 0;
220
+ var nextIndex = 0;
221
+ var tempIndex;
222
+ while (intoIndicesIn < numIndices) {
223
+ tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]];
224
+ if (tempIndex !== -1) {
225
+ indicesOut[intoIndicesOut] = tempIndex;
226
+ } else {
227
+ tempIndex = indicesIn[intoIndicesIn];
228
+ if (tempIndex >= numVertices) {
229
+ throw new DeveloperError('Input indices contains a value greater than or equal to the number of vertices');
230
+ }
231
+ indexCrossReferenceOldToNew[tempIndex] = nextIndex;
232
+
233
+ indicesOut[intoIndicesOut] = nextIndex;
234
+ ++nextIndex;
235
+ }
236
+ ++intoIndicesIn;
237
+ ++intoIndicesOut;
238
+ }
239
+ indexLists[j].values = indicesOut;
240
+ }
241
+ }
242
+
243
+ //Reorder Vertices
244
+ var attributes = mesh.attributes;
245
+ if (attributes) {
246
+ for ( var property in attributes) {
247
+ if (attributes.hasOwnProperty(property) && attributes[property].values) {
248
+ var elementsIn = attributes[property].values;
249
+ var intoElementsIn = 0;
250
+ var numComponents = attributes[property].componentsPerAttribute;
251
+ var elementsOut = [];
252
+ while (intoElementsIn < numVertices) {
253
+ var temp = indexCrossReferenceOldToNew[intoElementsIn];
254
+ for (i = 0; i < numComponents; i++) {
255
+ elementsOut[numComponents * temp + i] = elementsIn[numComponents * intoElementsIn + i];
256
+ }
257
+ ++intoElementsIn;
258
+ }
259
+ attributes[property].values = elementsOut;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ return mesh;
265
+ };
266
+
267
+ /**
268
+ * Reorders a mesh's indices to achieve better performance from the GPU's post vertex-shader cache by using the Tipsify algorithm.
269
+ * Each list of indices in the mesh's <code>indexList</code> is optimally reordered.
270
+ * <br /><br />
271
+ * The <code>mesh</code> argument should use the standard layout like the mesh returned by {@link BoxTessellator}.
272
+ * <br /><br />
273
+
274
+ * @param {Object} mesh The mesh to filter, which is modified in place.
275
+ * @param {Number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache.
276
+ *
277
+ * @exception {DeveloperError} Mesh's index list must be defined.
278
+ * @exception {DeveloperError} Mesh's index lists' lengths must each be a multiple of three.
279
+ * @exception {DeveloperError} Mesh's index list's maximum index value must be greater than zero.
280
+ * @exception {DeveloperError} cacheCapacity must be greater than two.
281
+ *
282
+ * @returns The modified <code>mesh</code> argument, with its indices optimally reordered for the post-vertex-shader cache.
283
+ *
284
+ * @see MeshFilters.reorderForPreVertexCache
285
+ * @see Tipsify
286
+ * @see <a href='http://gfx.cs.princeton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf'>
287
+ * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw</a>
288
+ * by Sander, Nehab, and Barczak
289
+ *
290
+ * @example
291
+ * var mesh = CubeMapEllipsoidTessellator.compute(...);
292
+ * mesh = MeshFilters.reorderForPostVertexCache(mesh);
293
+ */
294
+ MeshFilters.reorderForPostVertexCache = function(mesh, cacheCapacity) {
295
+ if (mesh) {
296
+ var indexLists = mesh.indexLists;
297
+ if (indexLists) {
298
+ var count = indexLists.length;
299
+ for ( var i = 0; i < count; i++) {
300
+ var indices = indexLists[i].values;
301
+ var numIndices = indices.length;
302
+ var maximumIndex = 0;
303
+ for ( var j = 0; j < numIndices; j++) {
304
+ if (indices[j] > maximumIndex) {
305
+ maximumIndex = indices[j];
306
+ }
307
+ }
308
+ indexLists[i].values = Tipsify.tipsify({indices : indices,
309
+ maximumIndex : maximumIndex,
310
+ cacheSize : cacheCapacity});
311
+ }
312
+ }
313
+ }
314
+ return mesh;
315
+ };
316
+
317
+ MeshFilters._verifyTrianglesPrimitiveType = function(indexLists) {
318
+ var length = indexLists.length;
319
+ for ( var i = 0; i < length; ++i) {
320
+ if (indexLists[i].primitiveType !== PrimitiveType.TRIANGLES) {
321
+ throw new DeveloperError('indexLists must have PrimitiveType equal to PrimitiveType.TRIANGLES.');
322
+ }
323
+ }
324
+ };
325
+
326
+ MeshFilters._copyAttributesDescriptions = function(attributes) {
327
+ var newAttributes = {};
328
+
329
+ for ( var attribute in attributes) {
330
+ if (attributes.hasOwnProperty(attribute) && attributes[attribute].values) {
331
+ var attr = attributes[attribute];
332
+ newAttributes[attribute] = {
333
+ componentDatatype : attr.componentDatatype,
334
+ componentsPerAttribute : attr.componentsPerAttribute,
335
+ values : []
336
+ };
337
+ }
338
+ }
339
+
340
+ return newAttributes;
341
+ };
342
+
343
+ function copyVertex(destinationAttributes, sourceAttributes, index) {
344
+ for ( var attribute in sourceAttributes) {
345
+ if (sourceAttributes.hasOwnProperty(attribute) && sourceAttributes[attribute].values) {
346
+ var attr = sourceAttributes[attribute];
347
+
348
+ for ( var k = 0; k < attr.componentsPerAttribute; ++k) {
349
+ destinationAttributes[attribute].values.push(attr.values[(index * attr.componentsPerAttribute) + k]);
350
+ }
351
+ }
352
+ }
353
+ }
354
+
355
+ /**
356
+ * DOC_TBA. Old mesh is not guaranteed to be copied.
357
+ *
358
+ * @exception {DeveloperError} The mesh's index-lists must have PrimitiveType equal to PrimitiveType.TRIANGLES.
359
+ * @exception {DeveloperError} All mesh attribute lists must have the same number of attributes.
360
+ */
361
+ MeshFilters.fitToUnsignedShortIndices = function(mesh) {
362
+ function createMesh(attributes, primitiveType, indices) {
363
+ return {
364
+ attributes : attributes,
365
+ indexLists : [{
366
+ primitiveType : primitiveType,
367
+ values : indices
368
+ }]
369
+ };
370
+ }
371
+
372
+ var meshes = [];
373
+
374
+ if (mesh) {
375
+ MeshFilters._verifyTrianglesPrimitiveType(mesh.indexLists);
376
+
377
+ var numberOfVertices = MeshFilters._computeNumberOfAttributes(mesh);
378
+
379
+ // If there's an index list and more than 64K attributes, it is possible that
380
+ // some indices are outside the range of unsigned short [0, 64K - 1]
381
+ var sixtyFourK = 64 * 1024;
382
+ var indexLists = mesh.indexLists;
383
+ if (indexLists && (numberOfVertices > sixtyFourK)) {
384
+ // PERFORMANCE_IDEA: If an input mesh has more than one index-list. This creates
385
+ // at least one vertex-array per index-list. A more sophisticated implementation
386
+ // may create less vertex-arrays.
387
+ var length = indexLists.length;
388
+ for ( var i = 0; i < length; ++i) {
389
+ var oldToNewIndex = [];
390
+ var newIndices = [];
391
+ var currentIndex = 0;
392
+ var newAttributes = MeshFilters._copyAttributesDescriptions(mesh.attributes);
393
+
394
+ var originalIndices = indexLists[i].values;
395
+ var numberOfIndices = originalIndices.length;
396
+
397
+ for ( var j = 0; j < numberOfIndices; j += 3) {
398
+ // It would be easy to extend this inter-loop to support all primitive-types.
399
+
400
+ var x0 = originalIndices[j];
401
+ var x1 = originalIndices[j + 1];
402
+ var x2 = originalIndices[j + 2];
403
+
404
+ var i0 = oldToNewIndex[x0];
405
+ if (typeof i0 === 'undefined') {
406
+ i0 = currentIndex++;
407
+ oldToNewIndex[x0] = i0;
408
+
409
+ copyVertex(newAttributes, mesh.attributes, x0);
410
+ }
411
+
412
+ var i1 = oldToNewIndex[x1];
413
+ if (typeof i1 === 'undefined') {
414
+ i1 = currentIndex++;
415
+ oldToNewIndex[x1] = i1;
416
+
417
+ copyVertex(newAttributes, mesh.attributes, x1);
418
+ }
419
+
420
+ var i2 = oldToNewIndex[x2];
421
+ if (typeof i2 === 'undefined') {
422
+ i2 = currentIndex++;
423
+ oldToNewIndex[x2] = i2;
424
+
425
+ copyVertex(newAttributes, mesh.attributes, x2);
426
+ }
427
+
428
+ newIndices.push(i0);
429
+ newIndices.push(i1);
430
+ newIndices.push(i2);
431
+
432
+ if (currentIndex + 3 > sixtyFourK) {
433
+ meshes.push(createMesh(newAttributes, indexLists[i].primitiveType, newIndices));
434
+
435
+ // Reset for next vertex-array
436
+ oldToNewIndex = [];
437
+ newIndices = [];
438
+ currentIndex = 0;
439
+ newAttributes = MeshFilters._copyAttributesDescriptions(mesh.attributes);
440
+ }
441
+ }
442
+
443
+ if (newIndices.length !== 0) {
444
+ meshes.push(createMesh(newAttributes, indexLists[i].primitiveType, newIndices));
445
+ }
446
+ }
447
+ } else {
448
+ // No need to split into multiple meshes
449
+ meshes.push(mesh);
450
+ }
451
+ }
452
+
453
+ return meshes;
454
+ };
455
+
456
+ /**
457
+ * DOC_TBA
458
+ */
459
+ MeshFilters.projectTo2D = function(mesh, projection) {
460
+ if (mesh && mesh.attributes && mesh.attributes.position) {
461
+ projection = projection || new GeographicProjection();
462
+ var ellipsoid = projection.getEllipsoid();
463
+
464
+ // Project original positions to 2D.
465
+ var wgs84Positions = mesh.attributes.position.values;
466
+ var projectedPositions = [];
467
+
468
+ for ( var i = 0; i < wgs84Positions.length; i += 3) {
469
+ var lonLat = ellipsoid.cartesianToCartographic(new Cartesian3(wgs84Positions[i], wgs84Positions[i + 1], wgs84Positions[i + 2]));
470
+ var projectedLonLat = projection.project(lonLat);
471
+ projectedPositions.push(projectedLonLat.x, projectedLonLat.y);
472
+ }
473
+
474
+ // Rename original positions to WGS84 Positions.
475
+ mesh.attributes.position3D = mesh.attributes.position;
476
+
477
+ // Replace original positions with 2D projected positions
478
+ mesh.attributes.position2D = {
479
+ componentDatatype : ComponentDatatype.FLOAT,
480
+ componentsPerAttribute : 2,
481
+ values : projectedPositions
482
+ };
483
+ delete mesh.attributes.position;
484
+ }
485
+
486
+ return mesh;
487
+ };
488
+
489
+ var encodedResult = {
490
+ high : 0.0,
491
+ low : 0.0
492
+ };
493
+
494
+ /**
495
+ * Encodes floating-point mesh attribute values as two separate attributes to improve
496
+ * rendering precision using the same encoding as {@link EncodedCartesian3}.
497
+ * <p>
498
+ * This is commonly used to create high-precision position vertex attributes.
499
+ * </p>
500
+ *
501
+ * @param {Object} mesh The mesh to filter, which is modified in place.
502
+ * @param {String} [attributeName='position'] The name of the attribute.
503
+ * @param {String} [attributeHighName='positionHigh'] The name of the attribute for the encoded high bits.
504
+ * @param {String} [attributeLowName='positionLow'] The name of the attribute for the encoded low bits.
505
+ *
506
+ * @returns The modified <code>mesh</code> argument, with its encoded attribute.
507
+ *
508
+ * @exception {DeveloperError} mesh is required.
509
+ * @exception {DeveloperError} mesh must have an attributes property.
510
+ * @exception {DeveloperError} mesh must have attribute matching the attributeName argument.
511
+ * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.FLOAT.
512
+ *
513
+ * @example
514
+ * mesh = MeshFilters.encodeAttribute(mesh, 'position3D', 'position3DHigh', 'position3DLow');
515
+ *
516
+ * @see EncodedCartesian3
517
+ */
518
+ MeshFilters.encodeAttribute = function(mesh, attributeName, attributeHighName, attributeLowName) {
519
+ attributeName = defaultValue(attributeName, 'position');
520
+ attributeHighName = defaultValue(attributeHighName, 'positionHigh');
521
+ attributeLowName = defaultValue(attributeLowName, 'positionLow');
522
+
523
+ if (typeof mesh === 'undefined') {
524
+ throw new DeveloperError('mesh is required.');
525
+ }
526
+
527
+ if (typeof mesh.attributes === 'undefined') {
528
+ throw new DeveloperError('mesh must have an attributes property.');
529
+ }
530
+
531
+ var attribute = mesh.attributes[attributeName];
532
+
533
+ if (typeof attribute === 'undefined') {
534
+ throw new DeveloperError('mesh must have attribute matching the attributeName argument: ' + attributeName + '.');
535
+ }
536
+
537
+ if (attribute.componentDatatype !== ComponentDatatype.FLOAT) {
538
+ throw new DeveloperError('The attribute componentDatatype must be ComponentDatatype.FLOAT.');
539
+ }
540
+
541
+ var values = attribute.values;
542
+ var length = values.length;
543
+ var highValues = new Array(length);
544
+ var lowValues = new Array(length);
545
+
546
+ for (var i = 0; i < length; ++i) {
547
+ EncodedCartesian3.encode(values[i], encodedResult);
548
+ highValues[i] = encodedResult.high;
549
+ lowValues[i] = encodedResult.low;
550
+ }
551
+
552
+ mesh.attributes[attributeHighName] = {
553
+ componentDatatype : attribute.componentDatatype,
554
+ componentsPerAttribute : attribute.componentsPerAttribute,
555
+ values : highValues
556
+ };
557
+ mesh.attributes[attributeLowName] = {
558
+ componentDatatype : attribute.componentDatatype,
559
+ componentsPerAttribute : attribute.componentsPerAttribute,
560
+ values : lowValues
561
+ };
562
+ delete mesh.attributes[attributeName];
563
+
564
+ return mesh;
565
+ };
566
+
567
+ return MeshFilters;
568
+ });