cesium 0.16.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (553) hide show
  1. data/app/assets/javascripts/{Core/Core.profile.js → Assets/Assets.profile.js} +0 -0
  2. data/app/assets/javascripts/Assets/package.json +6 -0
  3. data/app/assets/javascripts/Cesium.js +369 -351
  4. data/app/assets/javascripts/Core/BoundingSphere.js +0 -4
  5. data/app/assets/javascripts/Core/Cartesian2.js +19 -0
  6. data/app/assets/javascripts/Core/Cartesian3.js +25 -2
  7. data/app/assets/javascripts/Core/Cartesian4.js +23 -0
  8. data/app/assets/javascripts/Core/CatmullRomSpline.js +1 -4
  9. data/app/assets/javascripts/Core/Clock.js +23 -30
  10. data/app/assets/javascripts/Core/CubicRealPolynomial.js +1 -4
  11. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +1 -1
  12. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +159 -6
  13. data/app/assets/javascripts/Core/Extent.js +1 -1
  14. data/app/assets/javascripts/Core/ExtentTessellator.js +72 -19
  15. data/app/assets/javascripts/Core/Fullscreen.js +1 -4
  16. data/app/assets/javascripts/Core/HeightmapTessellator.js +2 -10
  17. data/app/assets/javascripts/Core/Iau2006XysData.js +9 -2
  18. data/app/assets/javascripts/Core/IntersectionTests.js +154 -2
  19. data/app/assets/javascripts/Core/JulianDate.js +1 -1
  20. data/app/assets/javascripts/Core/Math.js +7 -0
  21. data/app/assets/javascripts/Core/OrientationInterpolator.js +3 -6
  22. data/app/assets/javascripts/Core/Plane.js +1 -1
  23. data/app/assets/javascripts/Core/PolygonPipeline.js +135 -1
  24. data/app/assets/javascripts/Core/PolylinePipeline.js +2 -1
  25. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +9 -11
  26. data/app/assets/javascripts/Core/Shapes.js +0 -2
  27. data/app/assets/javascripts/Core/Simon1994PlanetaryPositions.js +3 -6
  28. data/app/assets/javascripts/Core/TaskProcessor.js +2 -4
  29. data/app/assets/javascripts/Core/Transforms.js +0 -2
  30. data/app/assets/javascripts/Core/buildModuleUrl.js +17 -9
  31. data/app/assets/javascripts/Core/defaultValue.js +0 -0
  32. data/app/assets/javascripts/Core/freezeObject.js +0 -0
  33. data/app/assets/javascripts/Core/getImagePixels.js +0 -0
  34. data/app/assets/javascripts/Core/loadArrayBuffer.js +0 -0
  35. data/app/assets/javascripts/Core/loadImage.js +0 -0
  36. data/app/assets/javascripts/Core/throttleRequestByServer.js +0 -0
  37. data/app/assets/javascripts/Core/writeTextToCanvas.js +0 -0
  38. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +14 -16
  39. data/app/assets/javascripts/DynamicScene/CzmlDataSource.js +197 -0
  40. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +10 -2
  41. data/app/assets/javascripts/DynamicScene/CzmlDirection.js +136 -0
  42. data/app/assets/javascripts/DynamicScene/DataSource.js +63 -0
  43. data/app/assets/javascripts/DynamicScene/DataSourceCollection.js +189 -0
  44. data/app/assets/javascripts/DynamicScene/DataSourceDisplay.js +225 -0
  45. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +11 -11
  46. data/app/assets/javascripts/DynamicScene/DynamicClock.js +0 -4
  47. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +12 -12
  48. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +5 -7
  49. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +0 -2
  50. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +20 -22
  51. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +10 -10
  52. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +5 -7
  53. data/app/assets/javascripts/DynamicScene/DynamicObject.js +6 -0
  54. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +70 -2
  55. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +1 -1
  56. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +18 -20
  57. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +12 -12
  58. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +12 -12
  59. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +0 -4
  60. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +12 -12
  61. data/app/assets/javascripts/DynamicScene/DynamicVector.js +184 -0
  62. data/app/assets/javascripts/DynamicScene/DynamicVectorVisualizer.js +267 -0
  63. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +2 -6
  64. data/app/assets/javascripts/DynamicScene/processCzml.js +1 -3
  65. data/app/assets/javascripts/Renderer/Context.js +119 -86
  66. data/app/assets/javascripts/Renderer/CubeMap.js +39 -17
  67. data/app/assets/javascripts/Renderer/CubeMapFace.js +20 -10
  68. data/app/assets/javascripts/Renderer/DrawCommand.js +1 -1
  69. data/app/assets/javascripts/Renderer/PickFramebuffer.js +0 -2
  70. data/app/assets/javascripts/Renderer/PixelDatatype.js +9 -0
  71. data/app/assets/javascripts/Renderer/Renderbuffer.js +0 -2
  72. data/app/assets/javascripts/Renderer/ShaderProgram.js +91 -11
  73. data/app/assets/javascripts/Renderer/Texture.js +27 -2
  74. data/app/assets/javascripts/Renderer/UniformState.js +43 -14
  75. data/app/assets/javascripts/Renderer/VertexArray.js +87 -132
  76. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +2 -2
  77. data/app/assets/javascripts/Scene/AnimationCollection.js +21 -17
  78. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +0 -2
  79. data/app/assets/javascripts/Scene/Billboard.js +8 -51
  80. data/app/assets/javascripts/Scene/BillboardCollection.js +0 -6
  81. data/app/assets/javascripts/Scene/Camera.js +0 -2
  82. data/app/assets/javascripts/Scene/CameraController.js +81 -29
  83. data/app/assets/javascripts/Scene/CameraFlightPath.js +130 -72
  84. data/app/assets/javascripts/Scene/CentralBody.js +3 -16
  85. data/app/assets/javascripts/Scene/CentralBodySurface.js +12 -40
  86. data/app/assets/javascripts/Scene/CustomSensorVolume.js +0 -2
  87. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +0 -0
  88. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +0 -10
  89. data/app/assets/javascripts/Scene/HeightmapTerrainData.js +0 -6
  90. data/app/assets/javascripts/Scene/ImageryLayer.js +0 -4
  91. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +0 -0
  92. data/app/assets/javascripts/Scene/ImageryProvider.js +0 -0
  93. data/app/assets/javascripts/Scene/LabelCollection.js +0 -2
  94. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +0 -8
  95. data/app/assets/javascripts/Scene/Polygon.js +30 -20
  96. data/app/assets/javascripts/Scene/Polyline.js +0 -4
  97. data/app/assets/javascripts/Scene/Scene.js +64 -18
  98. data/app/assets/javascripts/Scene/SceneTransforms.js +151 -0
  99. data/app/assets/javascripts/Scene/SceneTransitioner.js +0 -2
  100. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +0 -4
  101. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +0 -12
  102. data/app/assets/javascripts/Scene/Sun.js +180 -0
  103. data/app/assets/javascripts/Scene/SunPostProcess.js +417 -0
  104. data/app/assets/javascripts/Scene/Tile.js +0 -12
  105. data/app/assets/javascripts/Scene/TileProviderError.js +2 -8
  106. data/app/assets/javascripts/Scene/TileReplacementQueue.js +11 -11
  107. data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +0 -2
  108. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +0 -2
  109. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +0 -6
  110. data/app/assets/javascripts/Scene/sampleTerrain.js +0 -4
  111. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +62 -0
  112. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +62 -0
  113. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +3 -0
  114. data/app/assets/javascripts/Shaders/CentralBodyVS.js +3 -0
  115. data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.glsl +1 -1
  116. data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.js +1 -1
  117. data/app/assets/javascripts/Shaders/PolylineVS.glsl +8 -5
  118. data/app/assets/javascripts/Shaders/PolylineVS.js +8 -5
  119. data/app/assets/javascripts/Shaders/PostProcessFilters/AdditiveBlend.glsl +17 -0
  120. data/app/assets/javascripts/Shaders/PostProcessFilters/AdditiveBlend.js +23 -0
  121. data/app/assets/javascripts/Shaders/PostProcessFilters/BrightPass.glsl +30 -0
  122. data/app/assets/javascripts/Shaders/PostProcessFilters/BrightPass.js +36 -0
  123. data/app/assets/javascripts/Shaders/PostProcessFilters/GaussianBlur1D.glsl +37 -0
  124. data/app/assets/javascripts/Shaders/PostProcessFilters/GaussianBlur1D.js +43 -0
  125. data/app/assets/javascripts/Shaders/PostProcessFilters/PassThrough.glsl +8 -0
  126. data/app/assets/javascripts/Shaders/PostProcessFilters/PassThrough.js +14 -0
  127. data/app/assets/javascripts/Shaders/SunFS.glsl +11 -0
  128. data/app/assets/javascripts/Shaders/SunFS.js +17 -0
  129. data/app/assets/javascripts/Shaders/SunVS.glsl +28 -0
  130. data/app/assets/javascripts/Shaders/SunVS.js +34 -0
  131. data/app/assets/javascripts/ThirdParty/when.js +0 -0
  132. data/app/assets/javascripts/Widgets/Animation/Animation.js +6 -10
  133. data/app/assets/javascripts/Widgets/Animation/AnimationViewModel.js +4 -14
  134. data/app/assets/javascripts/Widgets/BaseLayerPicker/BaseLayerPicker.js +3 -8
  135. data/app/assets/javascripts/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js +6 -7
  136. data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +5 -3
  137. data/app/assets/javascripts/Widgets/ClockViewModel.js +6 -7
  138. data/app/assets/javascripts/Widgets/Command.js +16 -0
  139. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +5 -21
  140. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +1 -1
  141. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +27 -62
  142. data/app/assets/javascripts/Widgets/{Fullscreen/FullscreenWidget.css → FullscreenButton/FullscreenButton.css} +3 -3
  143. data/app/assets/javascripts/Widgets/{Fullscreen/FullscreenWidget.js → FullscreenButton/FullscreenButton.js} +19 -23
  144. data/app/assets/javascripts/Widgets/{Fullscreen/FullscreenViewModel.js → FullscreenButton/FullscreenButtonViewModel.js} +16 -8
  145. data/app/assets/javascripts/Widgets/{Fullscreen → FullscreenButton}/lighter.css +3 -3
  146. data/app/assets/javascripts/Widgets/HomeButton/HomeButton.css +15 -0
  147. data/app/assets/javascripts/Widgets/HomeButton/HomeButton.js +82 -0
  148. data/app/assets/javascripts/Widgets/HomeButton/HomeButtonViewModel.js +139 -0
  149. data/app/assets/javascripts/Widgets/HomeButton/lighter.css +3 -0
  150. data/app/assets/javascripts/Widgets/SceneModePicker/SceneModePicker.js +3 -8
  151. data/app/assets/javascripts/Widgets/Timeline/Timeline.js +9 -11
  152. data/app/assets/javascripts/Widgets/createCommand.js +33 -9
  153. data/app/assets/javascripts/Widgets/lighter.css +2 -1
  154. data/app/assets/javascripts/Widgets/widgets.css +2 -1
  155. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +0 -0
  156. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +0 -0
  157. data/app/assets/javascripts/Workers/createVerticesFromHeightmap.js +4 -15
  158. data/app/assets/javascripts/Workers/package.json +6 -0
  159. data/lib/cesium/version.rb +1 -1
  160. data/test/dummy/log/development.log +4884 -0
  161. data/test/dummy/tmp/cache/assets/B99/0B0/sprockets%2F4723632036683061b3298399d52922e7 +0 -0
  162. data/test/dummy/tmp/cache/assets/BF8/BC0/sprockets%2F1982805b53487d15554f20955019b8c4 +0 -0
  163. data/test/dummy/tmp/cache/assets/C07/150/sprockets%2F1b420211d4602737f80569030633dbf0 +0 -0
  164. data/test/dummy/tmp/cache/assets/C12/030/sprockets%2Fbd84b00d783150a219825433401a7946 +0 -0
  165. data/test/dummy/tmp/cache/assets/C21/2F0/sprockets%2F542b776b2358128506142733e2f7bc94 +0 -0
  166. data/test/dummy/tmp/cache/assets/C23/080/sprockets%2F7953320c0848d5564133365a6c3d728d +0 -0
  167. data/test/dummy/tmp/cache/assets/C26/5B0/sprockets%2F55b830337d0462859671b7e5447ed430 +0 -0
  168. data/test/dummy/tmp/cache/assets/C27/DA0/sprockets%2Fe49200d07769d24f54f721d890142818 +0 -0
  169. data/test/dummy/tmp/cache/assets/C40/040/sprockets%2F755e3952d9331b86782d4a7478a59299 +0 -0
  170. data/test/dummy/tmp/cache/assets/C42/440/sprockets%2F1b618402da380cb405d971458a874033 +0 -0
  171. data/test/dummy/tmp/cache/assets/C44/870/sprockets%2Fc7607e52811e723312c83d096c611c32 +0 -0
  172. data/test/dummy/tmp/cache/assets/C46/770/sprockets%2F9b6c82d0454ab5ba8727173860060324 +0 -0
  173. data/test/dummy/tmp/cache/assets/C46/E60/sprockets%2F151028e967f13248ca6121c9407242cf +0 -0
  174. data/test/dummy/tmp/cache/assets/C48/360/sprockets%2Fc966013651008025255f5b53b1d63f9e +0 -0
  175. data/test/dummy/tmp/cache/assets/C4A/020/sprockets%2F162d504e77459f0304b964139300cfe3 +0 -0
  176. data/test/dummy/tmp/cache/assets/C4A/2B0/sprockets%2F821c1d08482a9b936b661a56444551b3 +0 -0
  177. data/test/dummy/tmp/cache/assets/C53/040/sprockets%2F52411d26c4863636c7ae5b5090690f94 +0 -0
  178. data/test/dummy/tmp/cache/assets/C57/D10/sprockets%2F784e21cb5b634a598629115ef4685213 +0 -0
  179. data/test/dummy/tmp/cache/assets/C63/070/sprockets%2F8e770283d268526610e99264922dce9b +0 -0
  180. data/test/dummy/tmp/cache/assets/C64/730/sprockets%2F78fd706ba991f21a399070866616c297 +0 -0
  181. data/test/dummy/tmp/cache/assets/C6D/AC0/sprockets%2Fa1344c280c4d1518b6c15c357543247a +0 -0
  182. data/test/dummy/tmp/cache/assets/C76/F10/sprockets%2F536e031c5d9a257b602d38f8711480a2 +0 -0
  183. data/test/dummy/tmp/cache/assets/C7C/7C0/sprockets%2F951d4a02d8b2ce148765e618081a8036 +0 -0
  184. data/test/dummy/tmp/cache/assets/C80/780/sprockets%2F49930c35001a30c38745b89a6a86cf74 +0 -0
  185. data/test/dummy/tmp/cache/assets/C82/580/sprockets%2F8118f4526088ba8fd441f20317475d6b +0 -0
  186. data/test/dummy/tmp/cache/assets/C82/AA0/sprockets%2Fd83006c52345d7fe51216f1e577a8185 +0 -0
  187. data/test/dummy/tmp/cache/assets/C84/A30/sprockets%2F4867b0b9b390b58a539162663f95a11d +0 -0
  188. data/test/dummy/tmp/cache/assets/C85/310/sprockets%2Fc638d86c720815e5b635e0a3646e2186 +0 -0
  189. data/test/dummy/tmp/cache/assets/C85/A90/sprockets%2Fc1f8ee195823c02e7b7c623493141937 +0 -0
  190. data/test/dummy/tmp/cache/assets/C86/030/sprockets%2F0ad25c896165036167b94387675bcdd1 +0 -0
  191. data/test/dummy/tmp/cache/assets/C86/1D0/sprockets%2F27b505354597df6d366bbc531082e198 +0 -0
  192. data/test/dummy/tmp/cache/assets/C88/400/sprockets%2F9454b598601cfa56142892fc3f11e267 +0 -0
  193. data/test/dummy/tmp/cache/assets/C88/960/sprockets%2F50655bc2c86c7c3007756af818375e64 +0 -0
  194. data/test/dummy/tmp/cache/assets/C89/9E0/sprockets%2Fbc5d891273e7d61e56762000337868bf +0 -0
  195. data/test/dummy/tmp/cache/assets/C8B/0F0/sprockets%2F3317c35ce7597681091ac91985d08bb5 +0 -0
  196. data/test/dummy/tmp/cache/assets/C8B/A30/sprockets%2Fe20153c26552232703d0f4a5a60b10ed +0 -0
  197. data/test/dummy/tmp/cache/assets/C8E/1A0/sprockets%2F7937090f77385164f68c0ee252b26be5 +0 -0
  198. data/test/dummy/tmp/cache/assets/C8E/E40/sprockets%2F96aaf9af5e7906347880902610773bc5 +0 -0
  199. data/test/dummy/tmp/cache/assets/C92/5E0/sprockets%2F6638d8088cb498bf531942a54706ad85 +0 -0
  200. data/test/dummy/tmp/cache/assets/C92/E60/sprockets%2Fa80a146215a040d03e312a796c0b95f2 +0 -0
  201. data/test/dummy/tmp/cache/assets/C93/F70/sprockets%2F65f6452a7e17925ac0894c3e1858874c +0 -0
  202. data/test/dummy/tmp/cache/assets/C94/200/sprockets%2F8dae686ee6012f59a55568f381753237 +0 -0
  203. data/test/dummy/tmp/cache/assets/C94/230/sprockets%2Ff1065a9c342c30d071c501513a608e7a +0 -0
  204. data/test/dummy/tmp/cache/assets/C9B/D70/sprockets%2F3673a307810246b3d9e4ca84d3a8000a +0 -0
  205. data/test/dummy/tmp/cache/assets/C9F/CE0/sprockets%2F56383454ba44300671223dd6ab4b7ed3 +0 -0
  206. data/test/dummy/tmp/cache/assets/CA0/400/sprockets%2F416eb009b505cf50a4088253ba48268a +0 -0
  207. data/test/dummy/tmp/cache/assets/CA2/4E0/sprockets%2F064662810df01b94c2434af6f90161af +0 -0
  208. data/test/dummy/tmp/cache/assets/CA4/0A0/sprockets%2F482164b83a43ac07c4e351f2a936247b +0 -0
  209. data/test/dummy/tmp/cache/assets/CA5/F30/sprockets%2Fb2f70423bf51f566d201679bd037170e +0 -0
  210. data/test/dummy/tmp/cache/assets/CA9/5A0/sprockets%2F8282351dd11504a68cbc8500b7786cf2 +0 -0
  211. data/test/dummy/tmp/cache/assets/CA9/E20/sprockets%2F1ca84c82be52603a0c947256a38a0598 +0 -0
  212. data/test/dummy/tmp/cache/assets/CAA/D90/sprockets%2Fd477a5c2046351a0c462bb945e3954e5 +0 -0
  213. data/test/dummy/tmp/cache/assets/CB3/C00/sprockets%2F63c296a983bb460c9848035483be2cb2 +0 -0
  214. data/test/dummy/tmp/cache/assets/CB7/ED0/sprockets%2Ff8695d0f1536c18f414dfa467632323f +0 -0
  215. data/test/dummy/tmp/cache/assets/CB7/FA0/sprockets%2F62d364e38ba9b500f8b1633367f782b9 +0 -0
  216. data/test/dummy/tmp/cache/assets/CB8/180/sprockets%2Fe66eae8997e04c4bf70531e166511662 +0 -0
  217. data/test/dummy/tmp/cache/assets/CB8/3D0/sprockets%2F82660934f515fc61a144b9c9cd39c482 +0 -0
  218. data/test/dummy/tmp/cache/assets/CB8/EA0/sprockets%2F9e63d365e2159c725d111698cc04a7e7 +0 -0
  219. data/test/dummy/tmp/cache/assets/CB8/EF0/sprockets%2Ff47909056b54fbb653c60c2b89746b07 +0 -0
  220. data/test/dummy/tmp/cache/assets/CB9/0C0/sprockets%2F4e8172b657637124dc8887da053dc90d +0 -0
  221. data/test/dummy/tmp/cache/assets/CBA/250/sprockets%2F39bb3860405888c9f3b4b35c738b940c +0 -0
  222. data/test/dummy/tmp/cache/assets/CBB/E80/sprockets%2F43b17645e39f018bc195bc9828f4b357 +0 -0
  223. data/test/dummy/tmp/cache/assets/CBC/520/sprockets%2Fc6485291750c5ad1b2498ad90498a67f +0 -0
  224. data/test/dummy/tmp/cache/assets/CBC/620/sprockets%2Fa222028f7794f7e9c619a390b389f0d3 +0 -0
  225. data/test/dummy/tmp/cache/assets/CBC/6C0/sprockets%2F464439bf5a0e28d80594ee09a9509f51 +0 -0
  226. data/test/dummy/tmp/cache/assets/CBC/6C0/sprockets%2F6f494cff47ee245d30168217542c66d6 +0 -0
  227. data/test/dummy/tmp/cache/assets/CBF/8B0/sprockets%2F5c98534d57c1e7f7d2926173d27e4d14 +0 -0
  228. data/test/dummy/tmp/cache/assets/CC0/170/sprockets%2F458478f2faf8559d5008ca28c64232f7 +0 -0
  229. data/test/dummy/tmp/cache/assets/CC0/640/sprockets%2Fd0118b2031c44248f899dc8f66784c9e +0 -0
  230. data/test/dummy/tmp/cache/assets/CC0/E60/sprockets%2F9731b0739ec7356b2e484cb427d6955f +0 -0
  231. data/test/dummy/tmp/cache/assets/CC4/B10/sprockets%2F55b1a4137e59cad5520e1f012eb29021 +0 -0
  232. data/test/dummy/tmp/cache/assets/CC4/B80/sprockets%2F5b090557c9468f93cc1ab77898ba2629 +0 -0
  233. data/test/dummy/tmp/cache/assets/CC7/0B0/sprockets%2Fa26009e31f9e68672f4fc7f873909a64 +0 -0
  234. data/test/dummy/tmp/cache/assets/CC7/370/sprockets%2F9603f587d0629697951e09f1d4fdaf25 +0 -0
  235. data/test/dummy/tmp/cache/assets/CCF/F90/sprockets%2F5829cbee03489d953e8a7f842925776b +0 -0
  236. data/test/dummy/tmp/cache/assets/CD3/250/sprockets%2F9982c13eacaf46622739beab50120614 +0 -0
  237. data/test/dummy/tmp/cache/assets/CD4/6A0/sprockets%2F46b43cd41eba3026e74fa4b450369707 +0 -0
  238. data/test/dummy/tmp/cache/assets/CD4/D20/sprockets%2F02e2c15292e6082a4626f13a4aa839ff +0 -0
  239. data/test/dummy/tmp/cache/assets/CD8/C00/sprockets%2F9090b24116705be9a907d1db3b66a65e +0 -0
  240. data/test/dummy/tmp/cache/assets/CD8/D40/sprockets%2F73570572f17300ebf2dda1ef2635149e +0 -0
  241. data/test/dummy/tmp/cache/assets/CD9/970/sprockets%2F136161482305ce48be8cb039cba47f64 +0 -0
  242. data/test/dummy/tmp/cache/assets/CD9/D90/sprockets%2F87979893cfde1b28afc60797a9948345 +0 -0
  243. data/test/dummy/tmp/cache/assets/CDC/B50/sprockets%2F0f1e213595a02089df9735ec41c3ee80 +0 -0
  244. data/test/dummy/tmp/cache/assets/CDD/4D0/sprockets%2F0f6b3e82dd3d95341ee015499e3072b3 +0 -0
  245. data/test/dummy/tmp/cache/assets/CDF/710/sprockets%2F16d775d6707a066df80d10cd1528ff33 +0 -0
  246. data/test/dummy/tmp/cache/assets/CE0/8E0/sprockets%2Ff8d73c0137e4da7517c4127b6e056d29 +0 -0
  247. data/test/dummy/tmp/cache/assets/CE1/A00/sprockets%2F168b4bf7364dfd883a5930302e0f554c +0 -0
  248. data/test/dummy/tmp/cache/assets/CE3/240/sprockets%2F018ba37f3cc68a07d752729e44e1790e +0 -0
  249. data/test/dummy/tmp/cache/assets/CE5/3C0/sprockets%2F51278e12fb2f83652a4698d0a7ffa625 +0 -0
  250. data/test/dummy/tmp/cache/assets/CE5/820/sprockets%2Fd5837a90d9d83d7208a14905e1f0f63d +0 -0
  251. data/test/dummy/tmp/cache/assets/CE5/A80/sprockets%2Ff284835027dd09004e65c8c7fcf4137d +0 -0
  252. data/test/dummy/tmp/cache/assets/CE5/F10/sprockets%2Fe9cf045465025d8527c83c3b93625fca +0 -0
  253. data/test/dummy/tmp/cache/assets/CE5/F80/sprockets%2F411e28ad08572cd67fcf1901569c45c8 +0 -0
  254. data/test/dummy/tmp/cache/assets/CE6/4A0/sprockets%2F9c04b8b8df7217a708732da4982a5f61 +0 -0
  255. data/test/dummy/tmp/cache/assets/CE7/650/sprockets%2F834b60044436456eefb9ce5cf7144d38 +0 -0
  256. data/test/dummy/tmp/cache/assets/CE7/970/sprockets%2Fc89cf760b663827c5e771b93d107b2c2 +0 -0
  257. data/test/dummy/tmp/cache/assets/CE7/A40/sprockets%2F2974c4aef7a04f06738c8f6a2066e292 +0 -0
  258. data/test/dummy/tmp/cache/assets/CE7/C70/sprockets%2F8627e999f207ce7214e0ab06afe86412 +0 -0
  259. data/test/dummy/tmp/cache/assets/CE8/AA0/sprockets%2Fd569f5f91016b77401782ef3b42de6a6 +0 -0
  260. data/test/dummy/tmp/cache/assets/CE8/C90/sprockets%2Fb58b83d1bc902887bc247af8336556c4 +0 -0
  261. data/test/dummy/tmp/cache/assets/CEA/860/sprockets%2F198736e2441a36cecc857814e7dda932 +0 -0
  262. data/test/dummy/tmp/cache/assets/CEB/0A0/sprockets%2Fa19152c9838b60787bad54bf0f5f6448 +0 -0
  263. data/test/dummy/tmp/cache/assets/CEB/B70/sprockets%2F139d9789a1a5e456ca4f796db15c5450 +0 -0
  264. data/test/dummy/tmp/cache/assets/CEB/B80/sprockets%2Fbd5b638965aac89832c75292e6c1435c +0 -0
  265. data/test/dummy/tmp/cache/assets/CEC/030/sprockets%2F15d996d59f6c9ce6c21f52604b903c71 +0 -0
  266. data/test/dummy/tmp/cache/assets/CEC/B30/sprockets%2F7cf9a1c683f008354d7837ea11439f6f +0 -0
  267. data/test/dummy/tmp/cache/assets/CEC/B60/sprockets%2F9dec0e0f236608a79f6690cf29211e59 +0 -0
  268. data/test/dummy/tmp/cache/assets/CED/500/sprockets%2F23db1088d6beb9cff9245e1648555294 +0 -0
  269. data/test/dummy/tmp/cache/assets/CED/5E0/sprockets%2F6e94c3343eb6f33eb4fd9803085d2983 +0 -0
  270. data/test/dummy/tmp/cache/assets/CED/730/sprockets%2Ffd2399e766d1a513490bd481898b2eb5 +0 -0
  271. data/test/dummy/tmp/cache/assets/CEE/920/sprockets%2F97c97b08d42738b583ed92b55c540a4f +0 -0
  272. data/test/dummy/tmp/cache/assets/CEE/C90/sprockets%2Fc66d1d80067892e2b17e3666f8255eec +0 -0
  273. data/test/dummy/tmp/cache/assets/CEF/160/sprockets%2F74caa14e02046241cad519b5c36c20a6 +0 -0
  274. data/test/dummy/tmp/cache/assets/CEF/F00/sprockets%2F8ac77338a1dc57bb32999653c561e74e +0 -0
  275. data/test/dummy/tmp/cache/assets/CF0/950/sprockets%2Fd08f99c34c161881adb05d342e8984f9 +0 -0
  276. data/test/dummy/tmp/cache/assets/CF1/980/sprockets%2Ffe3e06873a1d9f624947006e38fac498 +0 -0
  277. data/test/dummy/tmp/cache/assets/CF5/5C0/sprockets%2F64a4190014fe00d17e708fc02dfc2a32 +0 -0
  278. data/test/dummy/tmp/cache/assets/CF5/760/sprockets%2F681176b164b052212cabffc000e548ae +0 -0
  279. data/test/dummy/tmp/cache/assets/CF8/130/sprockets%2Fd519234d99322fc8c5e8d16d52e96d78 +0 -0
  280. data/test/dummy/tmp/cache/assets/CF8/8A0/sprockets%2Fa4144fea021936c315c3e315b56d6c2a +0 -0
  281. data/test/dummy/tmp/cache/assets/CF9/B70/sprockets%2F8144ebf49f85b18c46d90b897239b56e +0 -0
  282. data/test/dummy/tmp/cache/assets/CF9/EB0/sprockets%2F6b591f1a73b4b1b13410a5e3d0c2e488 +0 -0
  283. data/test/dummy/tmp/cache/assets/CFC/7F0/sprockets%2F6158d3ff6993e4c114a894dd371999ec +0 -0
  284. data/test/dummy/tmp/cache/assets/CFD/160/sprockets%2Fc63d29c7bc89b27fc00430230ba1d383 +0 -0
  285. data/test/dummy/tmp/cache/assets/CFD/750/sprockets%2Ff86ed3e35003369a86787f9cb98de345 +0 -0
  286. data/test/dummy/tmp/cache/assets/CFF/FC0/sprockets%2Ff34d34ffdba26c9d04860c02d6412107 +0 -0
  287. data/test/dummy/tmp/cache/assets/D00/5D0/sprockets%2F02f5e8429793cb8b4b69d38f8a7395e9 +0 -0
  288. data/test/dummy/tmp/cache/assets/D00/690/sprockets%2F488324fb426a1e3cb3ca16488caf4004 +0 -0
  289. data/test/dummy/tmp/cache/assets/D01/6F0/sprockets%2F740aff323f074082319acda2a34e781e +0 -0
  290. data/test/dummy/tmp/cache/assets/D02/320/sprockets%2F95d58a54f71758967c19cec8367ceb83 +0 -0
  291. data/test/dummy/tmp/cache/assets/D02/4C0/sprockets%2F6386d72b2c51c911a7fd84ba612430cc +0 -0
  292. data/test/dummy/tmp/cache/assets/D02/9C0/sprockets%2F65be886f420229fb150c2c10ea747c1b +0 -0
  293. data/test/dummy/tmp/cache/assets/D03/B80/sprockets%2F31dd24009526a39382b08eee51c6ad5c +0 -0
  294. data/test/dummy/tmp/cache/assets/D05/8A0/sprockets%2Fd1e45653c3a4190fb4dcc1b690781a55 +0 -0
  295. data/test/dummy/tmp/cache/assets/D06/590/sprockets%2F19c899c20cf5d9b8629878e3add89708 +0 -0
  296. data/test/dummy/tmp/cache/assets/D06/A70/sprockets%2Ff5da4e04222a35db9d267255424bf5c6 +0 -0
  297. data/test/dummy/tmp/cache/assets/D07/7F0/sprockets%2F3fb0ed6b32aa83a6878d12a209c38824 +0 -0
  298. data/test/dummy/tmp/cache/assets/D07/BF0/sprockets%2F47962bb2378ffb6010aaa3c0238f6d66 +0 -0
  299. data/test/dummy/tmp/cache/assets/D07/DC0/sprockets%2Fcf13f583677aa0343a26a3c58d25b1e8 +0 -0
  300. data/test/dummy/tmp/cache/assets/D09/020/sprockets%2F5176362c460747d5ebeb6c2ca3e02d84 +0 -0
  301. data/test/dummy/tmp/cache/assets/D09/7F0/sprockets%2Fa2d67c31222348f16a9812df26da3e8d +0 -0
  302. data/test/dummy/tmp/cache/assets/D0A/DD0/sprockets%2F00e49bc1f2658a16cb7682a0a8e95c16 +0 -0
  303. data/test/dummy/tmp/cache/assets/D0B/3E0/sprockets%2F66c11f02337c8851bfab67bbb3b94916 +0 -0
  304. data/test/dummy/tmp/cache/assets/D0B/E20/sprockets%2Ffabf936c2485109116fb25a3a277b28f +0 -0
  305. data/test/dummy/tmp/cache/assets/D0C/2E0/sprockets%2Fecb35ec370e250a63784c2f508b76a38 +0 -0
  306. data/test/dummy/tmp/cache/assets/D0E/010/sprockets%2F797b9e08c55a2106f8e2dace455710d0 +0 -0
  307. data/test/dummy/tmp/cache/assets/D0E/180/sprockets%2F045e183281dfc37485db513d585c5bdb +0 -0
  308. data/test/dummy/tmp/cache/assets/D0E/4E0/sprockets%2Fb2cdbc63ab95b474d109990759329a2a +0 -0
  309. data/test/dummy/tmp/cache/assets/D0E/7B0/sprockets%2Faf821bc72620991b57062886abfc0f8a +0 -0
  310. data/test/dummy/tmp/cache/assets/D0E/A90/sprockets%2F4ed87cbd33472d8a68d129e7c0a24045 +0 -0
  311. data/test/dummy/tmp/cache/assets/D0E/E40/sprockets%2Fdc478cae3337db897210c13c9c711e82 +0 -0
  312. data/test/dummy/tmp/cache/assets/D0F/590/sprockets%2F0602a50a4d729e9be6e2589d62d028bf +0 -0
  313. data/test/dummy/tmp/cache/assets/D10/890/sprockets%2Fdfa76c032ef4cb2636762a847488e0a2 +0 -0
  314. data/test/dummy/tmp/cache/assets/D11/FC0/sprockets%2F9bd6c83d367423fe05ef6c3338143aa6 +0 -0
  315. data/test/dummy/tmp/cache/assets/D12/1C0/sprockets%2F5901cb9faf1725dd2e472ca2965b4287 +0 -0
  316. data/test/dummy/tmp/cache/assets/D13/520/sprockets%2F3316346df1f7f5ff0202f8d5b4742de7 +0 -0
  317. data/test/dummy/tmp/cache/assets/D13/690/sprockets%2F305c399e52a63447a7be45c4d5d3dd74 +0 -0
  318. data/test/dummy/tmp/cache/assets/D13/6B0/sprockets%2F0975ed2a9d299bf1c719b3b1137e581b +0 -0
  319. data/test/dummy/tmp/cache/assets/D14/340/sprockets%2F4d057c80e80694c2c4d637ecd538bc08 +0 -0
  320. data/test/dummy/tmp/cache/assets/D14/BD0/sprockets%2Ffc2255112852fb55d96d41a92f8fb6b6 +0 -0
  321. data/test/dummy/tmp/cache/assets/D15/BD0/sprockets%2Fb15d82cc0a8387b5333c89a746d49f0e +0 -0
  322. data/test/dummy/tmp/cache/assets/D16/420/sprockets%2Fc1439b84cda5475e55f3d8da6071467c +0 -0
  323. data/test/dummy/tmp/cache/assets/D17/6C0/sprockets%2F69144d8b21e495ac17e4994fdfa3a803 +0 -0
  324. data/test/dummy/tmp/cache/assets/D19/680/sprockets%2Fcd3a545b89d274cfd328f4d341f96272 +0 -0
  325. data/test/dummy/tmp/cache/assets/D19/760/sprockets%2F6cb307be30e1d67f838e8d11a0678d89 +0 -0
  326. data/test/dummy/tmp/cache/assets/D19/AD0/sprockets%2F113bd6f12a1645dc5cc6a10bb3045b15 +0 -0
  327. data/test/dummy/tmp/cache/assets/D1B/210/sprockets%2F92ebfed0378e79e9bc22e628733d4042 +0 -0
  328. data/test/dummy/tmp/cache/assets/D1B/A60/sprockets%2F0f13887548f4f3b551c8c4a4b487e6bd +0 -0
  329. data/test/dummy/tmp/cache/assets/D1E/360/sprockets%2F4a6a3690f7ffd0ee9f19758978b3a200 +0 -0
  330. data/test/dummy/tmp/cache/assets/D1E/370/sprockets%2F99ee518676e86a61ec0dca0706665c5d +0 -0
  331. data/test/dummy/tmp/cache/assets/D1F/5D0/sprockets%2Fce9e23d48e27f794d23915d707fb9b03 +0 -0
  332. data/test/dummy/tmp/cache/assets/D20/A50/sprockets%2F4783e2bd28795d2da95bb0e195d9735e +0 -0
  333. data/test/dummy/tmp/cache/assets/D22/0B0/sprockets%2F9dfda36b032e59892637b875d7af392b +0 -0
  334. data/test/dummy/tmp/cache/assets/D22/2C0/sprockets%2Fe42d5d90d467a803999bdec116955f8b +0 -0
  335. data/test/dummy/tmp/cache/assets/D22/820/sprockets%2F1bc531079d5acc4c26b027b910b2af42 +0 -0
  336. data/test/dummy/tmp/cache/assets/D22/D40/sprockets%2Fc4121b103539f9c9fa321f05b1cb0a6b +0 -0
  337. data/test/dummy/tmp/cache/assets/D23/610/sprockets%2F0e51cca080cc65e62e080941b232a1ed +0 -0
  338. data/test/dummy/tmp/cache/assets/D25/C00/sprockets%2Ff63d097054df34bc660bdf98f7661b99 +0 -0
  339. data/test/dummy/tmp/cache/assets/D25/E40/sprockets%2F72fe6a6283eff449a28d79d8c33494d0 +0 -0
  340. data/test/dummy/tmp/cache/assets/D2A/6F0/sprockets%2Fd6e43c7223231cda4b71e82ba285bd40 +0 -0
  341. data/test/dummy/tmp/cache/assets/D2D/E40/sprockets%2Faf21fa3d26ad3f68a23532178e20fb15 +0 -0
  342. data/test/dummy/tmp/cache/assets/D2F/100/sprockets%2F8c0286ee70744ca12c7c12a563de4b2a +0 -0
  343. data/test/dummy/tmp/cache/assets/D2F/770/sprockets%2F02fc9c6163ec87ca3301a8ed104a5d63 +0 -0
  344. data/test/dummy/tmp/cache/assets/D30/5C0/sprockets%2F22dfce18279e968c8824f70808e6fce8 +0 -0
  345. data/test/dummy/tmp/cache/assets/D30/9E0/sprockets%2F0d913be407e5e0c8732bc2c4ed6e2160 +0 -0
  346. data/test/dummy/tmp/cache/assets/D34/020/sprockets%2F99d101b09145af7ac80cdd219ee4730b +0 -0
  347. data/test/dummy/tmp/cache/assets/D35/120/sprockets%2Fee634821c4051385267b64ef5dcba3aa +0 -0
  348. data/test/dummy/tmp/cache/assets/D36/7F0/sprockets%2F78e0c63f0043ae6e6536ec504cc23a9b +0 -0
  349. data/test/dummy/tmp/cache/assets/D36/E70/sprockets%2F69b00a4118d012bf6d7cf293b5f316ff +0 -0
  350. data/test/dummy/tmp/cache/assets/D39/3A0/sprockets%2F2e21042d01b594dd46e5a7b2bece9389 +0 -0
  351. data/test/dummy/tmp/cache/assets/D3A/7B0/sprockets%2Ff812a5e25abeb03b136494656f3b79bc +0 -0
  352. data/test/dummy/tmp/cache/assets/D3A/A00/sprockets%2F1077cd94fef55fbb01ce529612180bd5 +0 -0
  353. data/test/dummy/tmp/cache/assets/D3A/ED0/sprockets%2F5ae1cf0266d63b8eb0647535ca93b63d +0 -0
  354. data/test/dummy/tmp/cache/assets/D3C/640/sprockets%2F42e7a70bb8be9398385afb3c4742aa04 +0 -0
  355. data/test/dummy/tmp/cache/assets/D3C/BB0/sprockets%2Ff498d519cb8ac1895bb3aa90117d424a +0 -0
  356. data/test/dummy/tmp/cache/assets/D3D/A60/sprockets%2Fc1ddc173463642dde6a64d0ae5518c79 +0 -0
  357. data/test/dummy/tmp/cache/assets/D3E/940/sprockets%2F5ed82a03c1de5c34135b67ff053787ec +0 -0
  358. data/test/dummy/tmp/cache/assets/D3E/CF0/sprockets%2Ffdaaeb4c030471898b22f8c144f76b56 +0 -0
  359. data/test/dummy/tmp/cache/assets/D3F/050/sprockets%2Fab4aa96dbce1e6b359f2658118291d90 +0 -0
  360. data/test/dummy/tmp/cache/assets/D3F/350/sprockets%2Fc430fa77be69b17f1c9d6c01d667501f +0 -0
  361. data/test/dummy/tmp/cache/assets/D3F/6B0/sprockets%2Fd4c6072434f9fab0ef336571f108efb6 +0 -0
  362. data/test/dummy/tmp/cache/assets/D3F/E10/sprockets%2Ff8492202733ea4a4f67065c95eec1beb +0 -0
  363. data/test/dummy/tmp/cache/assets/D40/D10/sprockets%2F7af151c9b6080d9285fe058ae6d40c4d +0 -0
  364. data/test/dummy/tmp/cache/assets/D41/8A0/sprockets%2Fbc7ce77806517ea173350e6a4d8c55db +0 -0
  365. data/test/dummy/tmp/cache/assets/D42/140/sprockets%2F1cb73727ffa2680da8200ea7abf78669 +0 -0
  366. data/test/dummy/tmp/cache/assets/D42/DC0/sprockets%2F6c6197617cfb36bcc7bac0477815a3f5 +0 -0
  367. data/test/dummy/tmp/cache/assets/D43/6F0/sprockets%2F38649a8cba0b6c9788cb58f6e03da040 +0 -0
  368. data/test/dummy/tmp/cache/assets/D43/FE0/sprockets%2F5d585d195aa6c45453c7d8125fcb1dc8 +0 -0
  369. data/test/dummy/tmp/cache/assets/D44/4B0/sprockets%2F0eecb09395e147d5b94245d54cc8d6d2 +0 -0
  370. data/test/dummy/tmp/cache/assets/D45/3B0/sprockets%2Fd26b5a0d570ef57d06df6f032e9b8980 +0 -0
  371. data/test/dummy/tmp/cache/assets/D46/600/sprockets%2F1c942ecb30874a3f9e9fea418725ab75 +0 -0
  372. data/test/dummy/tmp/cache/assets/D46/770/sprockets%2F96355435f9ab8090c2d3e4f0ddd9b7c3 +0 -0
  373. data/test/dummy/tmp/cache/assets/D46/8A0/sprockets%2F49683a7741a9baf859c3aa7ff32a417b +0 -0
  374. data/test/dummy/tmp/cache/assets/D46/930/sprockets%2F3f7e8c9b45f15625db37da7d7325dc05 +0 -0
  375. data/test/dummy/tmp/cache/assets/D46/C80/sprockets%2Ff4ba1c28702e084d8c375097c78aea9e +0 -0
  376. data/test/dummy/tmp/cache/assets/D47/670/sprockets%2F95284b12addf9c46e49d92031ace56d8 +0 -0
  377. data/test/dummy/tmp/cache/assets/D47/8F0/sprockets%2F1cc6e49382be4f74cbb97821ae1928c4 +0 -0
  378. data/test/dummy/tmp/cache/assets/D47/AC0/sprockets%2Fcb9189183de4d74faa04d6ad1347964f +0 -0
  379. data/test/dummy/tmp/cache/assets/D48/250/sprockets%2F84991347702fd5edbb2ebb5515963ece +0 -0
  380. data/test/dummy/tmp/cache/assets/D48/2F0/sprockets%2F6b79e4839df89b4abb51c2c6105d15e8 +0 -0
  381. data/test/dummy/tmp/cache/assets/D48/960/sprockets%2F90e2c11ff8fd31e591b9fd39932631bf +0 -0
  382. data/test/dummy/tmp/cache/assets/D4A/DE0/sprockets%2F45bff385904356cf5b4852a8ef07e1fb +0 -0
  383. data/test/dummy/tmp/cache/assets/D4E/5A0/sprockets%2Ffb32d449b4bc8d5193d5daf6838f1667 +0 -0
  384. data/test/dummy/tmp/cache/assets/D4E/6C0/sprockets%2Fedd9cf282af0f00637e5273c8c3888b9 +0 -0
  385. data/test/dummy/tmp/cache/assets/D50/810/sprockets%2Fee536e389f63f834aece59d21801d36f +0 -0
  386. data/test/dummy/tmp/cache/assets/D50/ED0/sprockets%2F5332ba66dc2dfa796617ee96ce9d9900 +0 -0
  387. data/test/dummy/tmp/cache/assets/D51/230/sprockets%2F742ba6ca9f84d98ffc38ca5687c05155 +0 -0
  388. data/test/dummy/tmp/cache/assets/D53/440/sprockets%2F2def445147b9f5d6363f6f6d497d2f0e +0 -0
  389. data/test/dummy/tmp/cache/assets/D53/530/sprockets%2F59ee24852d9e4f5fbc71c76d036ec773 +0 -0
  390. data/test/dummy/tmp/cache/assets/D53/E50/sprockets%2Fb969596338bb3970b4d09a9bf1dd4ff6 +0 -0
  391. data/test/dummy/tmp/cache/assets/D54/0D0/sprockets%2F448752db3a53dd453db1b01de121ebd2 +0 -0
  392. data/test/dummy/tmp/cache/assets/D54/210/sprockets%2F685458463f9ac9566ebff2e93bbc920b +0 -0
  393. data/test/dummy/tmp/cache/assets/D56/140/sprockets%2F20a89c927f3ff593ebf3349f31f39e9a +0 -0
  394. data/test/dummy/tmp/cache/assets/D56/1F0/sprockets%2F291fcb7a26ff3aac6bc1404e0a247242 +0 -0
  395. data/test/dummy/tmp/cache/assets/D56/BA0/sprockets%2Fed013a2db663133e834b255e3aff20da +0 -0
  396. data/test/dummy/tmp/cache/assets/D59/070/sprockets%2F822cd47e69d40ba87f95181fdd698ed5 +0 -0
  397. data/test/dummy/tmp/cache/assets/D5D/120/sprockets%2F1d71e8cf1b3ca05ca8165a84a90bb615 +0 -0
  398. data/test/dummy/tmp/cache/assets/D5F/7F0/sprockets%2Fabbcc55042a82b42c900c09d59de4c29 +0 -0
  399. data/test/dummy/tmp/cache/assets/D5F/A30/sprockets%2F1b6a076e9dfac220107d3ec6b4a3b766 +0 -0
  400. data/test/dummy/tmp/cache/assets/D61/180/sprockets%2F8d15744bb332d6b8b1ffef2ce0315c04 +0 -0
  401. data/test/dummy/tmp/cache/assets/D62/2E0/sprockets%2F51a06ddef9bd05b405fd605d37be3154 +0 -0
  402. data/test/dummy/tmp/cache/assets/D63/D60/sprockets%2Ff791df22a3d7e2f4ef01ad0742f370c1 +0 -0
  403. data/test/dummy/tmp/cache/assets/D63/DC0/sprockets%2Fc298c2b66150c7f11d95cecf450bb14a +0 -0
  404. data/test/dummy/tmp/cache/assets/D63/DE0/sprockets%2F73c9e04acfc930681ab170b3e4bfc453 +0 -0
  405. data/test/dummy/tmp/cache/assets/D64/670/sprockets%2F7dc8c0ad36d436eb56a0824a46e0eb08 +0 -0
  406. data/test/dummy/tmp/cache/assets/D65/990/sprockets%2Fa2965ca374a00aaceb747e60b654e2f8 +0 -0
  407. data/test/dummy/tmp/cache/assets/D67/A60/sprockets%2Faa00971b7f5d4b45eb77d656a284a5aa +0 -0
  408. data/test/dummy/tmp/cache/assets/D67/B70/sprockets%2F93b435826e79fa4e5f6eaa001a7a11bf +0 -0
  409. data/test/dummy/tmp/cache/assets/D68/000/sprockets%2F39c01fa5c01830f3558eb1c97c4dfb6b +0 -0
  410. data/test/dummy/tmp/cache/assets/D68/210/sprockets%2Fdc284967860db06c2cb2e1da78bab156 +0 -0
  411. data/test/dummy/tmp/cache/assets/D69/490/sprockets%2Fec6b9dc7d26370cb16e31c8f051e3e07 +0 -0
  412. data/test/dummy/tmp/cache/assets/D69/F10/sprockets%2Ff34035624ea8bef910a3f3afdc9f0526 +0 -0
  413. data/test/dummy/tmp/cache/assets/D6B/200/sprockets%2F5d6139fdef36c3f5380b2a7c2c4fc332 +0 -0
  414. data/test/dummy/tmp/cache/assets/D6C/AD0/sprockets%2Fdabce05f6e4419832e20d6b7420fe9a7 +0 -0
  415. data/test/dummy/tmp/cache/assets/D6D/080/sprockets%2F3cc7b7355591babda1661e6c5e9f8c20 +0 -0
  416. data/test/dummy/tmp/cache/assets/D6D/CF0/sprockets%2Fbbad825b6b477d1967533ee21c454ade +0 -0
  417. data/test/dummy/tmp/cache/assets/D6D/E80/sprockets%2F9ef00ee94e3b0eed7c4e45b342085d51 +0 -0
  418. data/test/dummy/tmp/cache/assets/D6E/940/sprockets%2Fb19f43bd8383eeb5e26a4d2b79f1240e +0 -0
  419. data/test/dummy/tmp/cache/assets/D6E/9F0/sprockets%2F15f61ad82d9ca6cce6a0e42b7249662f +0 -0
  420. data/test/dummy/tmp/cache/assets/D6F/AB0/sprockets%2Fb9d2a198d05cec1f1f9e110318cdf929 +0 -0
  421. data/test/dummy/tmp/cache/assets/D71/CA0/sprockets%2F441e444a0921896e5ca39df6bba85daf +0 -0
  422. data/test/dummy/tmp/cache/assets/D72/C00/sprockets%2Fbcb0957c48f5623c9cd792f05cb0f40f +0 -0
  423. data/test/dummy/tmp/cache/assets/D73/6E0/sprockets%2F1f4defb0e469096950900f0ad9c3fde4 +0 -0
  424. data/test/dummy/tmp/cache/assets/D75/6B0/sprockets%2Fec34bca59e6bb0e4ab0ef45953657992 +0 -0
  425. data/test/dummy/tmp/cache/assets/D76/030/sprockets%2F7e8689ec6a9f3754a4aa660e303cbf4a +0 -0
  426. data/test/dummy/tmp/cache/assets/D76/C80/sprockets%2F952307811ad5e9e8b540cf5e9cf08cea +0 -0
  427. data/test/dummy/tmp/cache/assets/D76/CA0/sprockets%2F797920cdabaf2f8431968a34c2cbae79 +0 -0
  428. data/test/dummy/tmp/cache/assets/D78/D60/sprockets%2Feb6b4ca6b29b6f82ea665a74e67d8621 +0 -0
  429. data/test/dummy/tmp/cache/assets/D78/DE0/sprockets%2F77704150a5a59b97997ebeeaa8d2aed2 +0 -0
  430. data/test/dummy/tmp/cache/assets/D79/4D0/sprockets%2Fd9478c98121c5a4bfccf42c262d587fc +0 -0
  431. data/test/dummy/tmp/cache/assets/D79/E80/sprockets%2F7d329345d1b9f914c87fc5e07ea9ab4b +0 -0
  432. data/test/dummy/tmp/cache/assets/D7A/D90/sprockets%2F5e731a54c86bfbaa18ba9e489178cf64 +0 -0
  433. data/test/dummy/tmp/cache/assets/D7C/620/sprockets%2Fa30b274099bbe2af59458e9f9e4d36fa +0 -0
  434. data/test/dummy/tmp/cache/assets/D7E/2A0/sprockets%2F1ce479f9423e748690a75abbabf8af84 +0 -0
  435. data/test/dummy/tmp/cache/assets/D80/3B0/sprockets%2Fd574f0ceb59e292506dc7dc2f99d6b91 +0 -0
  436. data/test/dummy/tmp/cache/assets/D81/B70/sprockets%2F44d160a7cd56a4d4b2e0d23a9c61aab1 +0 -0
  437. data/test/dummy/tmp/cache/assets/D84/0A0/sprockets%2F07fc0bfe2237a171b813aa147f3ced1a +0 -0
  438. data/test/dummy/tmp/cache/assets/D85/5A0/sprockets%2Fc2cbee1b5160e0e8b022933feb36ea30 +0 -0
  439. data/test/dummy/tmp/cache/assets/D8A/2C0/sprockets%2F6ec8da0142f240ce8a7e0b46aea363c1 +0 -0
  440. data/test/dummy/tmp/cache/assets/D8A/370/sprockets%2Fb4600d72a29aba7a39c2ec58aa04f18b +0 -0
  441. data/test/dummy/tmp/cache/assets/D8A/B90/sprockets%2F7506f75d60f93f9e8405ffb9cf85ddb2 +0 -0
  442. data/test/dummy/tmp/cache/assets/D8D/C50/sprockets%2Fa0229d30e2113dbf6d3cd51c5e82ee6c +0 -0
  443. data/test/dummy/tmp/cache/assets/D8F/4A0/sprockets%2Fec8facf81aea15d619953688978be79c +0 -0
  444. data/test/dummy/tmp/cache/assets/D8F/8A0/sprockets%2F5dfeb1f78f62586e3d97cb9e77758da0 +0 -0
  445. data/test/dummy/tmp/cache/assets/D90/2D0/sprockets%2Fac8aa858f328c72e90dff5de97c59939 +0 -0
  446. data/test/dummy/tmp/cache/assets/D93/0F0/sprockets%2Fbae826e41e4d9c8365bc23eb610dea40 +0 -0
  447. data/test/dummy/tmp/cache/assets/D94/1A0/sprockets%2Fb4748c092e8a4c127bcfacb06cdc2735 +0 -0
  448. data/test/dummy/tmp/cache/assets/D94/AD0/sprockets%2Fa1ac4bf342006e1f98def10cf9d7d234 +0 -0
  449. data/test/dummy/tmp/cache/assets/D95/430/sprockets%2Fcf054ac65aa2c4b72d661fc32c898aa5 +0 -0
  450. data/test/dummy/tmp/cache/assets/D95/A60/sprockets%2Fcade84652b25a95128cba5721b7bdb5e +0 -0
  451. data/test/dummy/tmp/cache/assets/D97/4C0/sprockets%2F4d4aea86610bc9652c70455a6beafc4d +0 -0
  452. data/test/dummy/tmp/cache/assets/D97/680/sprockets%2Fbcae9b5fae1163de31141bd7b94c7448 +0 -0
  453. data/test/dummy/tmp/cache/assets/D98/280/sprockets%2F1b8bca892cab85afe98307a2b0b394e2 +0 -0
  454. data/test/dummy/tmp/cache/assets/D99/B10/sprockets%2F4aa8fece5b18d820a44dc266a89d50e0 +0 -0
  455. data/test/dummy/tmp/cache/assets/D99/CD0/sprockets%2Ffe0c5f4b8b52baa0f91870da12599a6d +0 -0
  456. data/test/dummy/tmp/cache/assets/D9A/B20/sprockets%2Fcabbfbb982365500b12a89e74dfcb646 +0 -0
  457. data/test/dummy/tmp/cache/assets/D9B/6B0/sprockets%2Ffd3ec162a92d864e65f1b7ea48a4fa10 +0 -0
  458. data/test/dummy/tmp/cache/assets/D9D/170/sprockets%2F37f702f1f3ad35b9022fc87fdce7de02 +0 -0
  459. data/test/dummy/tmp/cache/assets/D9E/C90/sprockets%2F9cd75b38f1c1f85bbdac2576ca9106b5 +0 -0
  460. data/test/dummy/tmp/cache/assets/D9F/200/sprockets%2F22deb3ee0d99f7b2b283df5382e1ae81 +0 -0
  461. data/test/dummy/tmp/cache/assets/D9F/3D0/sprockets%2Fc85d1920bbf4d6f3b27723fcd2fb7c55 +0 -0
  462. data/test/dummy/tmp/cache/assets/D9F/7F0/sprockets%2Fd8fd738fc116ab5c8da0e4922cfb8180 +0 -0
  463. data/test/dummy/tmp/cache/assets/DA0/1B0/sprockets%2F71e2cd8803aac9fb0bb4c47593cf17e8 +0 -0
  464. data/test/dummy/tmp/cache/assets/DA1/710/sprockets%2Fcc28e7b96a94b2a571877b147fdecaa0 +0 -0
  465. data/test/dummy/tmp/cache/assets/DA2/9A0/sprockets%2F4bd1c9899ece1257adec0c553fc087b2 +0 -0
  466. data/test/dummy/tmp/cache/assets/DA3/9F0/sprockets%2F5122955dfe6694bdc6b69cbea09d2cd1 +0 -0
  467. data/test/dummy/tmp/cache/assets/DA4/A50/sprockets%2F5ccc3cb812b94b7b60841969a9ecbe7b +0 -0
  468. data/test/dummy/tmp/cache/assets/DA5/0E0/sprockets%2Fe61590dc98f1e532ea20e296c5fce7bd +0 -0
  469. data/test/dummy/tmp/cache/assets/DA5/830/sprockets%2Fefce0b2d75e80d1d17b6db8598841ed2 +0 -0
  470. data/test/dummy/tmp/cache/assets/DA5/920/sprockets%2F17fef15ed3d8c1147570663a93efedea +0 -0
  471. data/test/dummy/tmp/cache/assets/DAA/420/sprockets%2F6779ef7b8e5c2c362cfd5d5fa472e1b1 +0 -0
  472. data/test/dummy/tmp/cache/assets/DAB/920/sprockets%2F047a9da6b427dd9d7093799fad63aceb +0 -0
  473. data/test/dummy/tmp/cache/assets/DB0/BF0/sprockets%2F52e4cdf37aa489ff6c138dedf036588d +0 -0
  474. data/test/dummy/tmp/cache/assets/DB1/6D0/sprockets%2Fd7990d5c07f95d0ee1cb9d5e6e5b818c +0 -0
  475. data/test/dummy/tmp/cache/assets/DB1/C80/sprockets%2Fa2d1a10a3cc780fd30127b2be96ddfa2 +0 -0
  476. data/test/dummy/tmp/cache/assets/DB2/1F0/sprockets%2Fca6346c5717c1efd6fae57773f94ee8a +0 -0
  477. data/test/dummy/tmp/cache/assets/DB2/480/sprockets%2Fa249ccdcac57daf829713de88e3629f8 +0 -0
  478. data/test/dummy/tmp/cache/assets/DB2/9D0/sprockets%2F37bbd81e0c7ddf7c7668e674925eaca9 +0 -0
  479. data/test/dummy/tmp/cache/assets/DB7/670/sprockets%2F14afe7f2ff7c6a35f6f5dd27e95593f4 +0 -0
  480. data/test/dummy/tmp/cache/assets/DBC/DF0/sprockets%2Fd1ff56754c1bf2a8d4082abe2f00adb4 +0 -0
  481. data/test/dummy/tmp/cache/assets/DBD/080/sprockets%2F039ace5986a3cbf4cca0b0a753bc71a6 +0 -0
  482. data/test/dummy/tmp/cache/assets/DBE/430/sprockets%2Fe45190f40a462e86ae1ee01f3bbcad8a +0 -0
  483. data/test/dummy/tmp/cache/assets/DC1/C20/sprockets%2Fb60b7b3aeb56bd55b67183b6f151ecca +0 -0
  484. data/test/dummy/tmp/cache/assets/DC4/600/sprockets%2Fa0794a1ac15dbb57b803dbdce2069ff7 +0 -0
  485. data/test/dummy/tmp/cache/assets/DC5/500/sprockets%2F25ac94fa819bdb1fad28f4420fd4b90a +0 -0
  486. data/test/dummy/tmp/cache/assets/DC5/660/sprockets%2F637431e1c8fffeaafc23f021bd49fa06 +0 -0
  487. data/test/dummy/tmp/cache/assets/DC6/7C0/sprockets%2Fb408df7a822c70a0924e0cdf6c8fe2ca +0 -0
  488. data/test/dummy/tmp/cache/assets/DCC/F40/sprockets%2Fdc3342c548fc7d3c4f4e27732b5acfea +0 -0
  489. data/test/dummy/tmp/cache/assets/DCD/740/sprockets%2Fc80244c564e19eada1cdddf5f6d0d962 +0 -0
  490. data/test/dummy/tmp/cache/assets/DCD/8D0/sprockets%2Fbf36f09be83b4d0986ad23ea4d1f32df +0 -0
  491. data/test/dummy/tmp/cache/assets/DCE/170/sprockets%2F2576bc54ebe0a91592bbdbf3f5c8bb57 +0 -0
  492. data/test/dummy/tmp/cache/assets/DCE/1C0/sprockets%2F58cc5eb1cb2a47c8067c940caecf449d +0 -0
  493. data/test/dummy/tmp/cache/assets/DCE/BA0/sprockets%2F57c5ecddc82aa706b1e64691a8a5bcc9 +0 -0
  494. data/test/dummy/tmp/cache/assets/DCF/4A0/sprockets%2F3efd01a56bae3ae99fd13085f75b9e0d +0 -0
  495. data/test/dummy/tmp/cache/assets/DCF/900/sprockets%2Fb4dc2a3c5d5822e5cc13ee7098e9ec2e +0 -0
  496. data/test/dummy/tmp/cache/assets/DCF/E20/sprockets%2Fd24ee80741a60bd4db8f59b784e3ccda +0 -0
  497. data/test/dummy/tmp/cache/assets/DD5/D40/sprockets%2F8a656fbe5efc00f64f2451fff1c21fe9 +0 -0
  498. data/test/dummy/tmp/cache/assets/DD7/600/sprockets%2Fcc47edff1a4a983589bb45bce09533ed +0 -0
  499. data/test/dummy/tmp/cache/assets/DD9/530/sprockets%2Fe9cbd5b6d7b21568cfb4f7990c7b50eb +0 -0
  500. data/test/dummy/tmp/cache/assets/DDB/140/sprockets%2F7815fdf1a6a74db4fca71ff6537ced67 +0 -0
  501. data/test/dummy/tmp/cache/assets/DDE/450/sprockets%2Fdc1aabe992a97f95a43ce5d8364ff9d1 +0 -0
  502. data/test/dummy/tmp/cache/assets/DDF/070/sprockets%2Ffe4d825f88eadf5580f2db2f45c3df28 +0 -0
  503. data/test/dummy/tmp/cache/assets/DDF/3F0/sprockets%2F06db623ed4f5ff5f487dbcade39f9516 +0 -0
  504. data/test/dummy/tmp/cache/assets/DE7/550/sprockets%2Ffff04b0980f1fbe9ece54cd8ca779867 +0 -0
  505. data/test/dummy/tmp/cache/assets/DF0/CB0/sprockets%2F2b2884f2950bbb31aec8a3ef1e16cbdd +0 -0
  506. data/test/dummy/tmp/cache/assets/DF5/0C0/sprockets%2Faf8105cfdb7ceae04b099c4a2f654ce1 +0 -0
  507. data/test/dummy/tmp/cache/assets/DFC/9D0/sprockets%2F38fd8e0a2fde3b853f2a24571cd2dfdd +0 -0
  508. data/test/dummy/tmp/cache/assets/E02/B00/sprockets%2F723ccdfbeacf6c4176de34f371c91af9 +0 -0
  509. data/test/dummy/tmp/cache/assets/E02/DA0/sprockets%2F9829dec75de6c2a52fdc20d428d2edae +0 -0
  510. data/test/dummy/tmp/cache/assets/E02/FD0/sprockets%2F3b854b1f189aea494b8d7cbb8bba57bf +0 -0
  511. data/test/dummy/tmp/cache/assets/E04/860/sprockets%2F972757dbdbdfabfeac8ecb8a15520793 +0 -0
  512. data/test/dummy/tmp/cache/assets/E07/FD0/sprockets%2F2b98add7bf753973c33fe3b83bdb7abf +0 -0
  513. data/test/dummy/tmp/cache/assets/E09/EE0/sprockets%2F3a991c15e3b2bb3a1a61f1cad0babc5d +0 -0
  514. data/test/dummy/tmp/cache/assets/E0B/9C0/sprockets%2F056c4cfcff64c6e7d884bfc5df9a6a30 +0 -0
  515. data/test/dummy/tmp/cache/assets/E0C/810/sprockets%2Fe74897a12cedd8efea5a559354bd5bfc +0 -0
  516. data/test/dummy/tmp/cache/assets/E0F/B40/sprockets%2Ff5dfabed7f563e53d4735ef9c4b7a0e9 +0 -0
  517. data/test/dummy/tmp/cache/assets/E11/DA0/sprockets%2Fe190d6d51f5a7a4d99cb6fcee9aef818 +0 -0
  518. data/test/dummy/tmp/cache/assets/E1F/5E0/sprockets%2Fedacf71afed14b1da329d30fcaf84091 +0 -0
  519. data/test/dummy/tmp/cache/assets/E2D/630/sprockets%2F95b2fe9ec24a6321c9aebcc3b7c53dfe +0 -0
  520. data/test/dummy/tmp/cache/assets/E2F/3D0/sprockets%2Ff740ae8eecbaedadc3c664c62b83e925 +0 -0
  521. data/test/dummy/tmp/cache/assets/E2F/930/sprockets%2F22b1cbacd98f51adeaab5bd8765e4f97 +0 -0
  522. data/test/dummy/tmp/cache/assets/E30/C50/sprockets%2Fdaad6c4c7b1429f8de49d81fac6ad18b +0 -0
  523. data/test/dummy/tmp/cache/assets/E36/230/sprockets%2F56aec75c7f17ef3509d4cadcf2e6fc3d +0 -0
  524. data/test/dummy/tmp/cache/assets/E3C/680/sprockets%2Fd057ba99f8cc7b032da8ed9e8c0dff7c +0 -0
  525. data/test/dummy/tmp/cache/assets/E45/7D0/sprockets%2Fb0cc11f8e54af3bf47bfb15dd0a1cd4a +0 -0
  526. data/test/dummy/tmp/cache/assets/E53/340/sprockets%2Fbad75d3d5f8eba9ceada05fa125a642f +0 -0
  527. data/test/dummy/tmp/cache/assets/E55/340/sprockets%2Faaeaef87c1531a051fcdb8def54f4c1f +0 -0
  528. data/test/dummy/tmp/cache/assets/E5E/CA0/sprockets%2Fdf31d095f37e9abda2e4ddb3e0e6fcb9 +0 -0
  529. data/test/dummy/tmp/cache/assets/E89/BE0/sprockets%2F9bfc41fee1adbc5e0ab3e58eafb550f9 +0 -0
  530. metadata +163 -32
  531. data/app/assets/javascripts/Core/package.json +0 -6
  532. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +0 -8
  533. data/app/assets/javascripts/DynamicScene/package.json +0 -6
  534. data/app/assets/javascripts/Renderer/Renderer.profile.js +0 -8
  535. data/app/assets/javascripts/Renderer/package.json +0 -6
  536. data/app/assets/javascripts/Scene/Scene.profile.js +0 -8
  537. data/app/assets/javascripts/Scene/TileLoadQueue.js +0 -123
  538. data/app/assets/javascripts/Scene/package.json +0 -6
  539. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +0 -454
  540. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +0 -24
  541. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +0 -892
  542. data/app/assets/javascripts/Shaders/Noise.js +0 -477
  543. data/app/assets/javascripts/Shaders/PolygonFSPick.js +0 -11
  544. data/app/assets/javascripts/Shaders/PolygonVSPick.js +0 -36
  545. data/app/assets/javascripts/Shaders/Ray.js +0 -538
  546. data/app/assets/javascripts/Shaders/package.json +0 -6
  547. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +0 -8
  548. data/app/assets/javascripts/ThirdParty/package.json +0 -6
  549. data/app/assets/javascripts/Widgets/Widgets.profile.js +0 -8
  550. data/app/assets/javascripts/Widgets/package.json +0 -6
  551. data/app/assets/javascripts/Workers/Workers.profile.js +0 -8
  552. data/app/assets/javascripts/copyrightHeader.js +0 -22
  553. data/app/assets/javascripts/main.js +0 -10
@@ -1,24 +0,0 @@
1
- //This file is automatically rebuilt by the Cesium build process.
2
- /*global define*/
3
- define(function() {
4
- "use strict";
5
- return "attribute vec4 position;\n\
6
- \n\
7
- varying vec3 v_positionEC;\n\
8
- varying vec3 v_sensorVertexWC;\n\
9
- varying vec3 v_sensorVertexEC;\n\
10
- varying vec3 v_sensorAxisEC;\n\
11
- \n\
12
- void main()\n\
13
- {\n\
14
- gl_Position = czm_modelViewInfiniteProjection * position;\n\
15
- v_positionEC = (czm_modelView * position).xyz;\n\
16
- \n\
17
- // These transforms could be done once on the CPU, but there are only five vertices.\n\
18
- // We could also hand-optimize the zeros out if the compiler doesn't already.\n\
19
- vec4 sensorVertexMC = vec4(0.0, 0.0, 0.0, 1.0);\n\
20
- v_sensorVertexWC = (czm_model * sensorVertexMC).xyz;\n\
21
- v_sensorVertexEC = (czm_modelView * sensorVertexMC).xyz;\n\
22
- v_sensorAxisEC = czm_normal * vec3(0.0, 0.0, 1.0);\n\
23
- }";
24
- });
@@ -1,892 +0,0 @@
1
- //This file is automatically rebuilt by the Cesium build process.
2
- /*global define*/
3
- define(function() {
4
- "use strict";
5
- return "float _czm_addWithCancellationCheck(float left, float right, float tolerance)\n\
6
- {\n\
7
- float difference = left + right;\n\
8
- if ((sign(left) != sign(right)) && abs(difference / max(abs(left), abs(right))) < tolerance)\n\
9
- {\n\
10
- return 0.0;\n\
11
- }\n\
12
- else\n\
13
- {\n\
14
- return difference;\n\
15
- }\n\
16
- }\n\
17
- \n\
18
- /**\n\
19
- * DOC_TBA\n\
20
- *\n\
21
- * @name czm_quadraticRoots\n\
22
- * @glslStruct\n\
23
- */\n\
24
- struct czm_quadraticRoots\n\
25
- {\n\
26
- int numberOfRoots;\n\
27
- float root0;\n\
28
- float root1;\n\
29
- };\n\
30
- \n\
31
- /**\n\
32
- * Computes the real-valued roots of the 2nd order polynomial function of one variable with only real coefficients.\n\
33
- *\n\
34
- * @name czm_quadraticRealPolynomialRealRoots\n\
35
- * @glslFunction\n\
36
- *\n\
37
- * @param {float} a The coefficient of the 2nd order monomial.\n\
38
- * @param {float} b The coefficient of the 1st order monomial.\n\
39
- * @param {float} c The coefficient of the 0th order monomial.\n\
40
- * \n\
41
- * @returns {czm_quadraticRoots} Zero, one, or two real-valued roots.\n\
42
- * \n\
43
- * @example\n\
44
- * czm_quadraticRoots r = czm_quadraticRealPolynomialRealRoots(2.0, -4.0, -6.0); // 2(x + 1)(x - 3)\n\
45
- * // The result is r.numberOfRoots = 2, r.root0 = -1.0, and r.root1 = 3.0.\n\
46
- */\n\
47
- czm_quadraticRoots czm_quadraticRealPolynomialRealRoots(float a, float b, float c)\n\
48
- {\n\
49
- // This function's return statements have an ANGLE workaround: http://code.google.com/p/angleproject/issues/detail?id=185\n\
50
- \n\
51
- const float tolerance = czm_epsilon7;\n\
52
- \n\
53
- if (a == 0.0)\n\
54
- {\n\
55
- if (b == 0.0)\n\
56
- {\n\
57
- // Constant function: c = 0. No real polynomial roots possible.\n\
58
- czm_quadraticRoots r = czm_quadraticRoots(0, 0.0, 0.0);\n\
59
- return r;\n\
60
- }\n\
61
- else\n\
62
- {\n\
63
- // Linear function: b * x + c = 0.\n\
64
- czm_quadraticRoots r = czm_quadraticRoots(1, -c / b, 0.0);\n\
65
- return r; \n\
66
- }\n\
67
- }\n\
68
- else if (b == 0.0)\n\
69
- {\n\
70
- if (c == 0.0)\n\
71
- {\n\
72
- // 2nd order monomial: a * x^2 = 0.\n\
73
- czm_quadraticRoots r = czm_quadraticRoots(2, 0.0, 0.0);\n\
74
- return r;\n\
75
- }\n\
76
- else\n\
77
- {\n\
78
- float cMagnitude = abs(c);\n\
79
- float aMagnitude = abs(a);\n\
80
- \n\
81
- if ((cMagnitude < aMagnitude) && (cMagnitude / aMagnitude < tolerance)) // c ~= 0.0.\n\
82
- {\n\
83
- // 2nd order monomial: a * x^2 = 0.\n\
84
- czm_quadraticRoots r = czm_quadraticRoots(2, 0.0, 0.0);\n\
85
- return r;\n\
86
- }\n\
87
- else if ((cMagnitude > aMagnitude) && (aMagnitude / cMagnitude < tolerance)) // a ~= 0.0.\n\
88
- {\n\
89
- // Constant function: c = 0.\n\
90
- czm_quadraticRoots r = czm_quadraticRoots(0, 0.0, 0.0);\n\
91
- return r;\n\
92
- }\n\
93
- else\n\
94
- {\n\
95
- // a * x^2 + c = 0\n\
96
- float ratio = -c / a;\n\
97
- \n\
98
- if (ratio < 0.0)\n\
99
- {\n\
100
- // Both roots are complex.\n\
101
- czm_quadraticRoots r = czm_quadraticRoots(0, 0.0, 0.0);\n\
102
- return r;\n\
103
- }\n\
104
- else\n\
105
- {\n\
106
- // Both roots are real.\n\
107
- float root = sqrt(ratio);\n\
108
- \n\
109
- // Return them in ascending order.\n\
110
- czm_quadraticRoots r = czm_quadraticRoots(2, -root, root);\n\
111
- return r;\n\
112
- }\n\
113
- }\n\
114
- }\n\
115
- }\n\
116
- else if (c == 0.0)\n\
117
- {\n\
118
- // a * x^2 + b * x = 0\n\
119
- float ratio = -b / a;\n\
120
- \n\
121
- // Return them in ascending order.\n\
122
- if (ratio < 0.0)\n\
123
- {\n\
124
- czm_quadraticRoots r = czm_quadraticRoots(2, ratio, 0.0);\n\
125
- return r; \n\
126
- }\n\
127
- else\n\
128
- {\n\
129
- czm_quadraticRoots r = czm_quadraticRoots(2, 0.0, ratio);\n\
130
- return r;\n\
131
- }\n\
132
- }\n\
133
- else\n\
134
- {\n\
135
- // a * x^2 + b * x + c = 0\n\
136
- float b2 = b * b;\n\
137
- float four_ac = 4.0 * a * c;\n\
138
- float radicand = _czm_addWithCancellationCheck(b2, -four_ac, tolerance);\n\
139
- \n\
140
- if (radicand < 0.0)\n\
141
- {\n\
142
- // Both roots are complex.\n\
143
- czm_quadraticRoots r = czm_quadraticRoots(0, 0.0, 0.0);\n\
144
- return r;\n\
145
- }\n\
146
- else\n\
147
- {\n\
148
- // Both roots are real.\n\
149
- float q = -0.5 * _czm_addWithCancellationCheck(b, sign(b) * sqrt(radicand), tolerance);\n\
150
- \n\
151
- // Return them in ascending order.\n\
152
- if (b > 0.0)\n\
153
- {\n\
154
- // q < 0.0\n\
155
- czm_quadraticRoots r = czm_quadraticRoots(2, q / a, c / q);\n\
156
- return r; \n\
157
- }\n\
158
- else\n\
159
- {\n\
160
- // q > 0.0\n\
161
- czm_quadraticRoots r = czm_quadraticRoots(2, c / q, q / a);\n\
162
- return r; \n\
163
- }\n\
164
- }\n\
165
- }\n\
166
- }\n\
167
- \n\
168
- ///////////////////////////////////////////////////////////////////////////////\n\
169
- \n\
170
- /**\n\
171
- * DOC_TBA\n\
172
- *\n\
173
- * @name czm_sphere\n\
174
- * @glslStruct\n\
175
- */\n\
176
- struct czm_sphere\n\
177
- {\n\
178
- vec3 center;\n\
179
- float radius;\n\
180
- };\n\
181
- \n\
182
- /**\n\
183
- * DOC_TBA\n\
184
- *\n\
185
- * @name czm_raySphereIntersectionInterval\n\
186
- * @glslFunction\n\
187
- *\n\
188
- * @see czm_sphereNormal\n\
189
- */\n\
190
- czm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, czm_sphere sphere)\n\
191
- {\n\
192
- // From Real-Time Rendering, Section 16.6.2, Optimized Ray/Sphere Intersection Solution, Page 741\n\
193
- \n\
194
- // This function's return statements have an ANGLE workaround: http://code.google.com/p/angleproject/issues/detail?id=185\n\
195
- \n\
196
- // PERFORMANCE_IDEA: A more optimized but less friendly function could take radius squared directly, \n\
197
- // assume a center or origin of zero, etc.\n\
198
- \n\
199
- vec3 l = sphere.center - ray.origin;\n\
200
- float s = dot(l, ray.direction);\n\
201
- float l2 = dot(l, l);\n\
202
- float r2 = sphere.radius * sphere.radius;\n\
203
- \n\
204
- if ((s < 0.0) // Looking away from sphere.\n\
205
- && (l2 > r2)) // Outside of sphere.\n\
206
- {\n\
207
- return czm_emptyRaySegment; // ray does not intersect (at least not along the indicated direction).\n\
208
- }\n\
209
- \n\
210
- float s2 = s * s;\n\
211
- float m2 = l2 - s2;\n\
212
- \n\
213
- if (m2 > r2) // Discriminant is negative, yielding only imaginary roots.\n\
214
- {\n\
215
- return czm_emptyRaySegment; // ray does not intersect.\n\
216
- }\n\
217
- \n\
218
- float q = sqrt(r2 - m2);\n\
219
- \n\
220
- if (czm_equalsEpsilon(q, 0.0)) // Discriminant is zero, yielding a double root.\n\
221
- {\n\
222
- return czm_raySegment(s, s); // ray is tangent.\n\
223
- }\n\
224
- \n\
225
- if (l2 > r2) // Outside of sphere.\n\
226
- {\n\
227
- czm_raySegment i = czm_raySegment(s - q, s + q);\n\
228
- return i;\n\
229
- }\n\
230
- else if (l2 < r2) // Inside of sphere.\n\
231
- {\n\
232
- czm_raySegment i = czm_raySegment(0.0, s + q);\n\
233
- return i;\n\
234
- }\n\
235
- else if (s > 0.0) // On sphere and looking inward.\n\
236
- {\n\
237
- czm_raySegment i = czm_raySegment(0.0, s + q);\n\
238
- return i;\n\
239
- }\n\
240
- else // On sphere and looking outward or tangent.\n\
241
- {\n\
242
- return czm_emptyRaySegment;\n\
243
- }\n\
244
- }\n\
245
- \n\
246
- /**\n\
247
- * DOC_TBA\n\
248
- *\n\
249
- * @name czm_sphereNormal\n\
250
- * @glslFunction\n\
251
- *\n\
252
- * @see czm_raySphereIntersectionInterval \n\
253
- * @see czm_pointAlongRay\n\
254
- */\n\
255
- vec3 czm_sphereNormal(czm_sphere sphere, vec3 pointOnSphere)\n\
256
- {\n\
257
- return normalize(pointOnSphere - sphere.center);\n\
258
- }\n\
259
- \n\
260
- ///////////////////////////////////////////////////////////////////////////////\n\
261
- \n\
262
- /**\n\
263
- * DOC_TBA\n\
264
- *\n\
265
- * @name czm_cone\n\
266
- * @glslStruct\n\
267
- */\n\
268
- struct czm_cone\n\
269
- {\n\
270
- vec3 vertex;\n\
271
- vec3 axis; // Unit-length direction vector\n\
272
- float halfAperture; // Measured from the cone axis to the cone wall\n\
273
- // PERFORMANCE_IDEA: Make sure all of these are used...\n\
274
- float cosineOfHalfAperture;\n\
275
- float cosineSquaredOfHalfAperture;\n\
276
- float sineOfHalfAperture;\n\
277
- float sineSquaredOfHalfAperture;\n\
278
- mat3 intersectionMatrix;\n\
279
- };\n\
280
- \n\
281
- czm_cone czm_coneNew(vec3 vertex, vec3 axis, float halfAperture)\n\
282
- {\n\
283
- float cosineOfHalfAperture = cos(halfAperture);\n\
284
- float cosineSquaredOfHalfAperture = cosineOfHalfAperture * cosineOfHalfAperture;\n\
285
- float sineOfHalfAperture = sin(halfAperture);\n\
286
- float sineSquaredOfHalfAperture = sineOfHalfAperture * sineOfHalfAperture;\n\
287
- \n\
288
- float x2 = axis.x * axis.x;\n\
289
- float y2 = axis.y * axis.y;\n\
290
- float z2 = axis.z * axis.z;\n\
291
- float xy = axis.x * axis.y;\n\
292
- float yz = axis.y * axis.z;\n\
293
- float zx = axis.z * axis.x;\n\
294
- \n\
295
- // This is a symmetric matrix.\n\
296
- mat3 intersectionMatrix = mat3(\n\
297
- cosineSquaredOfHalfAperture - x2, -xy, -zx,\n\
298
- -xy, cosineSquaredOfHalfAperture - y2, -yz,\n\
299
- -zx, -yz, cosineSquaredOfHalfAperture - z2); \n\
300
- \n\
301
- czm_cone temp = czm_cone(vertex, axis, halfAperture,\n\
302
- cosineOfHalfAperture, cosineSquaredOfHalfAperture,\n\
303
- sineOfHalfAperture, sineSquaredOfHalfAperture, intersectionMatrix);\n\
304
- return temp;\n\
305
- }\n\
306
- \n\
307
- /**\n\
308
- * Determines if a point is in, or on the boundary, of an infinite cone.\n\
309
- *\n\
310
- * @name czm_coneContainsPoint\n\
311
- * @glslFunction\n\
312
- *\n\
313
- * @param {czm_cone} cone The infinite cone.\n\
314
- * @param {vec3} point The point to test for containment.\n\
315
- *\n\
316
- * @returns {bool} <code>true</code> if the point is in the infinite cone; otherwise, <code>false</code>.\n\
317
- *\n\
318
- * @see czm_rayConeIntersectionInterval\n\
319
- *\n\
320
- * @example\n\
321
- * czm_cone cone = czm_coneNew(vec3(0.0), vec3(0.0, 0.0, 1.0), radians(45.0)); // vertex, axis, halfAperture\n\
322
- * vec3 point = vec3(1.0, 0.0, 0.0);\n\
323
- * bool b = czm_coneContainsPoint(cone, point)); // false\n\
324
- */\n\
325
- bool czm_coneContainsPoint(czm_cone cone, vec3 point)\n\
326
- {\n\
327
- vec3 n = normalize(point - cone.vertex);\n\
328
- return (dot(n, cone.axis) >= cone.cosineOfHalfAperture);\n\
329
- }\n\
330
- \n\
331
- bool _czm_rayIntersectsReflectedCone(czm_ray ray, czm_cone cone, float time, float cosine)\n\
332
- {\n\
333
- vec3 s = ray.origin + (time * ray.direction) - cone.vertex; // The vector from the origin is at (vertex + s)\n\
334
- vec3 sUnit = normalize(s);\n\
335
- float c = dot(sUnit, cone.axis);\n\
336
- \n\
337
- return (sign(c) != sign(cosine));\n\
338
- }\n\
339
- \n\
340
- /**\n\
341
- * DOC_TBA\n\
342
- *\n\
343
- * @name czm_rayConeIntersectionInterval\n\
344
- * @glslFunction\n\
345
- *\n\
346
- * @see czm_coneNormal\n\
347
- * @see czm_coneContainsPoint\n\
348
- */\n\
349
- czm_raySegmentCollection czm_rayConeIntersectionInterval(czm_ray ray, czm_cone cone)\n\
350
- {\n\
351
- vec3 temp = ray.origin - cone.vertex;\n\
352
- \n\
353
- float t2 = dot(temp, temp);\n\
354
- \n\
355
- float cosineNu = dot(ray.direction, cone.axis);\n\
356
- \n\
357
- if (t2 == 0.0) // At vertex.\n\
358
- {\n\
359
- if (cosineNu >= cone.cosineOfHalfAperture) // Looking inward or along surface.\n\
360
- {\n\
361
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
362
- }\n\
363
- else // Looking outward.\n\
364
- {\n\
365
- return czm_raySegmentCollectionNew();\n\
366
- }\n\
367
- }\n\
368
- else // Not at vertex\n\
369
- {\n\
370
- float projection = dot(normalize(temp), cone.axis);\n\
371
- \n\
372
- if (projection == cone.cosineOfHalfAperture) // On surface.\n\
373
- {\n\
374
- vec3 u = ray.direction;\n\
375
- \n\
376
- mat3 crossProductMatrix = mat3(0.0, -u.z, u.y,\n\
377
- u.z, 0.0, -u.x,\n\
378
- -u.y, u.x, 0.0);\n\
379
- if (length(crossProductMatrix * temp) == 0.0) // Looking along surface.\n\
380
- {\n\
381
- if (dot(temp, u) > 0.0) // Looking away from vertex.\n\
382
- {\n\
383
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
384
- }\n\
385
- else // Looking toward vertex.\n\
386
- {\n\
387
- czm_raySegment i = czm_raySegment(0.0, length(temp));\n\
388
- return czm_raySegmentCollectionNew(i);\n\
389
- }\n\
390
- }\n\
391
- else // Looking tangent at surface.\n\
392
- {\n\
393
- return czm_raySegmentCollectionNew();\n\
394
- }\n\
395
- }\n\
396
- else // Not on surface\n\
397
- {\n\
398
- vec3 t = normalize(temp);\n\
399
- \n\
400
- float cosineAlpha2 = cone.cosineOfHalfAperture * cone.cosineOfHalfAperture;\n\
401
- \n\
402
- float cosineTau = dot(t, cone.axis);\n\
403
- float cosineDelta = dot(t, ray.direction);\n\
404
- \n\
405
- float cosineNu2 = cosineNu * cosineNu;\n\
406
- float cosineTau2 = cosineTau * cosineTau;\n\
407
- \n\
408
- float stuff = cosineTau * cosineNu;\n\
409
- \n\
410
- float positiveTerm = cosineNu2 + cosineTau2;\n\
411
- float negativeTerm = (cosineDelta * cosineDelta - 1.0) * cosineAlpha2;\n\
412
- float signedTerm = -2.0 * stuff * cosineDelta;\n\
413
- \n\
414
- if (signedTerm > 0.0)\n\
415
- {\n\
416
- positiveTerm = positiveTerm + signedTerm;\n\
417
- }\n\
418
- else if (signedTerm < 0.0)\n\
419
- {\n\
420
- negativeTerm = negativeTerm + signedTerm;\n\
421
- }\n\
422
- \n\
423
- float d = 4.0 * cosineAlpha2 * (positiveTerm + negativeTerm);\n\
424
- \n\
425
- if (d < 0.0) // Imaginary roots. No intersections.\n\
426
- {\n\
427
- if (cone.cosineOfHalfAperture < 0.0) // Obtuse cone.\n\
428
- {\n\
429
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
430
- }\n\
431
- else // Acute cone.\n\
432
- {\n\
433
- return czm_raySegmentCollectionNew();\n\
434
- }\n\
435
- }\n\
436
- else if (d > 0.0) // Distinct real roots. Two intersections.\n\
437
- {\n\
438
- float a = cosineNu2 - cosineAlpha2;\n\
439
- float c = cosineTau2 - cosineAlpha2;\n\
440
- float b = 2.0 * (stuff - cosineDelta * cosineAlpha2);\n\
441
- \n\
442
- float s = (b == 0.0) ? 1.0 : sign(b);\n\
443
- float q = -(b + s * sqrt(d)) / 2.0;\n\
444
- \n\
445
- float first = q / a;\n\
446
- float second = c / q;\n\
447
- if (second < first)\n\
448
- {\n\
449
- float thing = first;\n\
450
- first = second;\n\
451
- second = thing;\n\
452
- }\n\
453
- \n\
454
- // Check roots to ensure that they are non-negative and intersect the desired nape of the cone.\n\
455
- bool firstTest = (first >= 0.0) && !(sign(dot(t + first * ray.direction, cone.axis)) == -sign(cone.cosineOfHalfAperture));\n\
456
- bool secondTest = (second >= 0.0) && !(sign(dot(t + second * ray.direction, cone.axis)) == -sign(cone.cosineOfHalfAperture));\n\
457
- \n\
458
- float m = sqrt(t2);\n\
459
- \n\
460
- if (cosineTau > cone.cosineOfHalfAperture) // Inside cone.\n\
461
- {\n\
462
- if (firstTest && secondTest)\n\
463
- {\n\
464
- // Ray starts inside cone and exits; then enters and never exits.\n\
465
- czm_raySegment one = czm_raySegment(0.0, m * first);\n\
466
- czm_raySegment two = czm_raySegment(m * second, czm_infinity);\n\
467
- return czm_raySegmentCollectionNew(one, two);\n\
468
- }\n\
469
- else if (firstTest)\n\
470
- {\n\
471
- // Ray starts inside cone and exits.\n\
472
- czm_raySegment i = czm_raySegment(0.0, m * first);\n\
473
- return czm_raySegmentCollectionNew(i);\n\
474
- }\n\
475
- else if (secondTest)\n\
476
- {\n\
477
- // Ray starts inside cone and exits.\n\
478
- czm_raySegment i = czm_raySegment(0.0, m * second);\n\
479
- return czm_raySegmentCollectionNew(i);\n\
480
- }\n\
481
- else\n\
482
- {\n\
483
- // Ray starts inside cone and never exits.\n\
484
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
485
- }\n\
486
- }\n\
487
- else\n\
488
- {\n\
489
- if (firstTest && secondTest)\n\
490
- {\n\
491
- // Ray enters and exits.\n\
492
- czm_raySegment i = czm_raySegment(m * first, m * second);\n\
493
- return czm_raySegmentCollectionNew(i);\n\
494
- }\n\
495
- else if (firstTest)\n\
496
- {\n\
497
- // Ray enters and never exits.\n\
498
- czm_raySegment i = czm_raySegment(m * first, czm_infinity);\n\
499
- return czm_raySegmentCollectionNew(i);\n\
500
- }\n\
501
- else if (secondTest)\n\
502
- {\n\
503
- // Ray enters and never exits.\n\
504
- czm_raySegment i = czm_raySegment(m * second, czm_infinity);\n\
505
- return czm_raySegmentCollectionNew(i);\n\
506
- }\n\
507
- else\n\
508
- {\n\
509
- // Ray never enters.\n\
510
- return czm_raySegmentCollectionNew();\n\
511
- }\n\
512
- }\n\
513
- }\n\
514
- else // (d == 0.0) Repeated real roots. Two intersections.\n\
515
- {\n\
516
- if (cone.cosineOfHalfAperture == 0.0) // Planar cone.\n\
517
- {\n\
518
- if (cosineTau >= 0.0) // Inside or on surface.\n\
519
- {\n\
520
- if (cosineNu >= 0.0) // Looking inward or tangent.\n\
521
- {\n\
522
- // Ray starts inside cone and never exits.\n\
523
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
524
- }\n\
525
- else\n\
526
- {\n\
527
- // Ray starts inside cone and intersects.\n\
528
- czm_raySegment i = czm_raySegment(0.0, -sqrt(t2) * cosineTau / cosineNu);\n\
529
- return czm_raySegmentCollectionNew(i);\n\
530
- }\n\
531
- }\n\
532
- else // Outside.\n\
533
- {\n\
534
- if (cosineNu <= 0.0) // Looking outward or tangent.\n\
535
- {\n\
536
- // Ray starts outside cone and never enters.\n\
537
- return czm_raySegmentCollectionNew();\n\
538
- }\n\
539
- else\n\
540
- {\n\
541
- // Ray starts outside cone and intersects.\n\
542
- czm_raySegment i = czm_raySegment(-sqrt(t2) * cosineTau / cosineNu, czm_infinity);\n\
543
- return czm_raySegmentCollectionNew(i);\n\
544
- }\n\
545
- }\n\
546
- }\n\
547
- else\n\
548
- {\n\
549
- float a = cosineNu2 - cosineAlpha2;\n\
550
- float c = cosineTau2 - cosineAlpha2;\n\
551
- float b = 2.0 * (stuff - cosineDelta * cosineAlpha2);\n\
552
- \n\
553
- float root = (a == 0.0) ? -sign(b) * czm_infinity : (-sign(b) / sign(a)) * sqrt(c / a);\n\
554
- \n\
555
- // Check roots to ensure that they are non-negative and intersect the desired nape of the cone.\n\
556
- bool rootTest = (root >= 0.0) && !(sign(dot(t + root * ray.direction, cone.axis)) == -sign(cone.cosineOfHalfAperture));\n\
557
- \n\
558
- float m = sqrt(t2);\n\
559
- \n\
560
- if (cosineTau > cone.cosineOfHalfAperture) // Inside cone.\n\
561
- {\n\
562
- if (rootTest)\n\
563
- {\n\
564
- // Ray starts inside cone and exits or becomes tangent.\n\
565
- czm_raySegment i = czm_raySegment(0.0, m * root);\n\
566
- return czm_raySegmentCollectionNew(i);\n\
567
- }\n\
568
- else\n\
569
- {\n\
570
- // Ray starts inside cone and never exits.\n\
571
- return czm_raySegmentCollectionNew(czm_fullRaySegment);\n\
572
- }\n\
573
- }\n\
574
- else\n\
575
- {\n\
576
- if (rootTest)\n\
577
- {\n\
578
- if (c < 0.0) // Outside both napes of the cone.\n\
579
- {\n\
580
- // Ray starts outside cone and becomes tangent.\n\
581
- float thing = m * root;\n\
582
- czm_raySegment i = czm_raySegment(thing, thing);\n\
583
- return czm_raySegmentCollectionNew(i);\n\
584
- }\n\
585
- else\n\
586
- {\n\
587
- // Ray starts outside cone and enters at vertex.\n\
588
- float thing = m * root;\n\
589
- czm_raySegment i = czm_raySegment(thing, czm_infinity);\n\
590
- return czm_raySegmentCollectionNew(i);\n\
591
- }\n\
592
- }\n\
593
- else\n\
594
- {\n\
595
- // Ray never enters.\n\
596
- return czm_raySegmentCollectionNew();\n\
597
- }\n\
598
- }\n\
599
- }\n\
600
- }\n\
601
- }\n\
602
- }\n\
603
- }\n\
604
- \n\
605
- /**\n\
606
- * DOC_TBA\n\
607
- *\n\
608
- * @name czm_rayConeIntersectNormal\n\
609
- * @glslFunction \n\
610
- *\n\
611
- * @see czm_rayConeIntersectionInterval\n\
612
- * @see czm_pointAlongRay\n\
613
- *\n\
614
- * @example\n\
615
- * // Compute the outward-facing cone normal where a ray first intersects a cone\n\
616
- * czm_ray ray = czm_ray(vec3(0.0), vec3(0.0, 0.0, 1.0)); // origin, direction\n\
617
- * czm_cone cone = czm_coneNew(vec3(0.0, 0.0, 1.0), vec3(0.0, 0.0, 1.0), radians(45.0)); // vertex, axis, halfAperture\n\
618
- * czm_raySegment i = czm_rayConeIntersectionInterval(ray, cone);\n\
619
- * vec3 normal = czm_coneNormal(cone, czm_pointAlongRay(ray, i.start));\n\
620
- */\n\
621
- vec3 czm_coneNormal(czm_cone cone, vec3 pointOnCone)\n\
622
- {\n\
623
- // PERFORMANCE_IDEA: Remove duplicate computation with _czm_rayIntersectsReflectedCone\n\
624
- vec3 s = pointOnCone - cone.vertex; // Vector from the origin is at (vertex + s)\n\
625
- vec3 sUnit = normalize(s);\n\
626
- return normalize((cone.cosineOfHalfAperture * sUnit - cone.axis) / cone.sineOfHalfAperture);\n\
627
- }\n\
628
- \n\
629
- ///////////////////////////////////////////////////////////////////////////////\n\
630
- \n\
631
- /**\n\
632
- * DOC_TBA\n\
633
- *\n\
634
- * @name czm_ellipsoidSilhouetteCone\n\
635
- * @glslStruct\n\
636
- */\n\
637
- struct czm_ellipsoidSilhouetteCone\n\
638
- {\n\
639
- czm_ellipsoid ellipsoid;\n\
640
- vec3 pointOutsideEllipsoid;\n\
641
- czm_cone coneInScaledSpace;\n\
642
- };\n\
643
- \n\
644
- /**\n\
645
- * DOC_TBA\n\
646
- *\n\
647
- * @name czm_ellipsoidSilhouetteConeNormal\n\
648
- * @glslFunction\n\
649
- *\n\
650
- */\n\
651
- vec3 czm_ellipsoidSilhouetteConeNormal(czm_ellipsoidSilhouetteCone cone, vec3 pointOnCone)\n\
652
- {\n\
653
- vec3 pointOnScaledCone = cone.ellipsoid.inverseRadii * (czm_inverseView * vec4(pointOnCone, 1.0)).xyz;\n\
654
- \n\
655
- vec3 scaledNormal = czm_coneNormal(cone.coneInScaledSpace, pointOnScaledCone);\n\
656
- \n\
657
- vec3 temp = -normalize(czm_viewRotation * (cone.ellipsoid.radii * scaledNormal));\n\
658
- \n\
659
- return temp;\n\
660
- }\n\
661
- \n\
662
- /**\n\
663
- * DOC_TBA\n\
664
- *\n\
665
- * @name czm_ellipsoidSilhouetteConeNew\n\
666
- * @glslFunction\n\
667
- *\n\
668
- */\n\
669
- czm_ellipsoidSilhouetteCone czm_ellipsoidSilhouetteConeNew(czm_ellipsoid ellipsoid, vec3 pointOutsideEllipsoid)\n\
670
- {\n\
671
- vec3 q = ellipsoid.inverseRadii * (czm_inverseView * vec4(pointOutsideEllipsoid, 1.0)).xyz;\n\
672
- vec3 axis = -normalize(q);\n\
673
- \n\
674
- float q2 = dot(q, q);\n\
675
- float sineSquaredOfHalfAperture = 1.0 / q2;\n\
676
- float sineOfHalfAperture = sqrt(sineSquaredOfHalfAperture);\n\
677
- float cosineSquaredOfHalfAperture = 1.0 - sineSquaredOfHalfAperture;\n\
678
- float cosineOfHalfAperture = sqrt(cosineSquaredOfHalfAperture);\n\
679
- float halfAperture = atan(sineOfHalfAperture / cosineOfHalfAperture);\n\
680
- \n\
681
- float x2 = axis.x * axis.x;\n\
682
- float y2 = axis.y * axis.y;\n\
683
- float z2 = axis.z * axis.z;\n\
684
- float xy = axis.x * axis.y;\n\
685
- float yz = axis.y * axis.z;\n\
686
- float zx = axis.z * axis.x;\n\
687
- \n\
688
- // This is a symmetric matrix.\n\
689
- mat3 intersectionMatrix = mat3(\n\
690
- cosineSquaredOfHalfAperture - x2, -xy, -zx,\n\
691
- -xy, cosineSquaredOfHalfAperture - y2, -yz,\n\
692
- -zx, -yz, cosineSquaredOfHalfAperture - z2); \n\
693
- \n\
694
- czm_cone coneInScaledSpace = czm_cone(q, axis, halfAperture,\n\
695
- cosineOfHalfAperture, cosineSquaredOfHalfAperture,\n\
696
- sineOfHalfAperture, sineSquaredOfHalfAperture, intersectionMatrix);\n\
697
- \n\
698
- // ANGLE workaround: http://code.google.com/p/angleproject/issues/detail?id=185 \n\
699
- czm_ellipsoidSilhouetteCone temp = czm_ellipsoidSilhouetteCone(ellipsoid, pointOutsideEllipsoid, coneInScaledSpace);\n\
700
- return temp;\n\
701
- }\n\
702
- \n\
703
- /**\n\
704
- * DOC_TBA\n\
705
- *\n\
706
- * @name czm_rayEllipsoidSilhouetteConeIntersectionInterval\n\
707
- * @glslFunction\n\
708
- *\n\
709
- */\n\
710
- czm_raySegment czm_rayEllipsoidSilhouetteConeIntersectionInterval(czm_ray ray, czm_ellipsoidSilhouetteCone cone)\n\
711
- {\n\
712
- // Determine the ray in the scaled space.\n\
713
- vec3 origin = cone.ellipsoid.inverseRadii * (czm_inverseView * vec4(ray.origin, 1.0)).xyz;\n\
714
- vec3 direction = normalize(cone.ellipsoid.inverseRadii * (czm_inverseViewRotation * ray.direction));\n\
715
- czm_ray rayInScaledSpace = czm_ray(origin, direction);\n\
716
- \n\
717
- // Perform the intersection in the scaled space.\n\
718
- czm_raySegmentCollection collection = czm_rayConeIntersectionInterval(rayInScaledSpace, cone.coneInScaledSpace);\n\
719
- \n\
720
- if (collection.count == 0) // No intersection.\n\
721
- {\n\
722
- return czm_emptyRaySegment;\n\
723
- }\n\
724
- else // Intersection.\n\
725
- {\n\
726
- czm_raySegment interval = collection.intervals[0];\n\
727
- \n\
728
- // Honor ray origin case (start == 0.0).\n\
729
- float start = interval.start;\n\
730
- if (start != 0.0)\n\
731
- {\n\
732
- // Determine start in unscaled space.\n\
733
- vec3 temp = (czm_view * vec4(cone.ellipsoid.radii * czm_pointAlongRay(rayInScaledSpace, start), 1.0)).xyz;\n\
734
- start = dot(temp, ray.direction);\n\
735
- }\n\
736
- \n\
737
- // Honor infinite ray (stop == infinity).\n\
738
- float stop = interval.stop;\n\
739
- if (stop != czm_infinity)\n\
740
- {\n\
741
- // Determine stop in unscaled space.\n\
742
- vec3 temp = (czm_view * vec4(cone.ellipsoid.radii * czm_pointAlongRay(rayInScaledSpace, stop), 1.0)).xyz;\n\
743
- stop = dot(temp, ray.direction);\n\
744
- }\n\
745
- \n\
746
- return czm_raySegment(start, stop);\n\
747
- }\n\
748
- }\n\
749
- \n\
750
- ///////////////////////////////////////////////////////////////////////////////\n\
751
- \n\
752
- /**\n\
753
- * DOC_TBA\n\
754
- *\n\
755
- * @name czm_halfspace\n\
756
- * @glslStruct\n\
757
- */\n\
758
- struct czm_halfspace\n\
759
- {\n\
760
- vec3 center;\n\
761
- vec3 normal; // Unit vector.\n\
762
- };\n\
763
- \n\
764
- /**\n\
765
- * DOC_TBA\n\
766
- *\n\
767
- * @name czm_rayHalfspaceIntersectionInterval\n\
768
- * @glslFunction\n\
769
- *\n\
770
- */\n\
771
- czm_raySegment czm_rayHalfspaceIntersectionInterval(czm_ray ray, czm_halfspace halfspace)\n\
772
- {\n\
773
- float numerator = dot(halfspace.center - ray.origin, halfspace.normal);\n\
774
- float denominator = dot(ray.direction, halfspace.normal);\n\
775
- \n\
776
- if (numerator > 0.0) // Inside.\n\
777
- {\n\
778
- if (denominator > 0.0) // Looking outward.\n\
779
- {\n\
780
- return czm_raySegment(0.0, numerator / denominator);\n\
781
- }\n\
782
- else // Looking inward or parallel.\n\
783
- {\n\
784
- return czm_fullRaySegment; \n\
785
- }\n\
786
- }\n\
787
- else if (numerator < 0.0) // Outside.\n\
788
- {\n\
789
- if (denominator < 0.0 ) // Looking inward.\n\
790
- {\n\
791
- return czm_raySegment(numerator / denominator, czm_infinity); \n\
792
- }\n\
793
- else // Looking outward or parallel.\n\
794
- {\n\
795
- return czm_emptyRaySegment;\n\
796
- }\n\
797
- }\n\
798
- else // On surface.\n\
799
- {\n\
800
- if (denominator < 0.0 ) // Looking inward.\n\
801
- {\n\
802
- return czm_fullRaySegment; \n\
803
- }\n\
804
- else // Looking outward or parallel.\n\
805
- {\n\
806
- return czm_emptyRaySegment;\n\
807
- }\n\
808
- }\n\
809
- }\n\
810
- \n\
811
- ///////////////////////////////////////////////////////////////////////////////\n\
812
- \n\
813
- /**\n\
814
- * DOC_TBA\n\
815
- *\n\
816
- * @name czm_ellipsoidSilhouetteHalfspace\n\
817
- * @glslStruct\n\
818
- */\n\
819
- struct czm_ellipsoidSilhouetteHalfspace\n\
820
- {\n\
821
- czm_ellipsoid ellipsoid;\n\
822
- vec3 pointOutsideEllipsoid;\n\
823
- czm_halfspace halfspaceInScaledSpace;\n\
824
- };\n\
825
- \n\
826
- /**\n\
827
- * DOC_TBA\n\
828
- *\n\
829
- * @name czm_ellipsoidSilhouetteHalfspaceNew\n\
830
- * @glslFunction\n\
831
- *\n\
832
- */\n\
833
- czm_ellipsoidSilhouetteHalfspace czm_ellipsoidSilhouetteHalfspaceNew(czm_ellipsoid ellipsoid, vec3 pointOutsideEllipsoid)\n\
834
- {\n\
835
- vec3 q = ellipsoid.inverseRadii * (czm_inverseView * vec4(pointOutsideEllipsoid, 1.0)).xyz;\n\
836
- float magnitude = 1.0 / length(q);\n\
837
- vec3 normal = normalize(q);\n\
838
- vec3 center = magnitude * normal; \n\
839
- \n\
840
- czm_halfspace halfspaceInScaledSpace = czm_halfspace(center, normal);\n\
841
- \n\
842
- // ANGLE workaround: http://code.google.com/p/angleproject/issues/detail?id=185 \n\
843
- czm_ellipsoidSilhouetteHalfspace temp = czm_ellipsoidSilhouetteHalfspace(ellipsoid, pointOutsideEllipsoid, halfspaceInScaledSpace);\n\
844
- return temp;\n\
845
- }\n\
846
- \n\
847
- /**\n\
848
- * DOC_TBA\n\
849
- *\n\
850
- * @name czm_rayEllipsoidSilhouetteHalfspaceIntersectionInterval\n\
851
- * @glslFunction\n\
852
- *\n\
853
- */\n\
854
- czm_raySegment czm_rayEllipsoidSilhouetteHalfspaceIntersectionInterval(czm_ray ray, czm_ellipsoidSilhouetteHalfspace halfspace)\n\
855
- {\n\
856
- // Determine the ray in the scaled space.\n\
857
- vec3 origin = halfspace.ellipsoid.inverseRadii * (czm_inverseView * vec4(ray.origin, 1.0)).xyz;\n\
858
- vec3 direction = halfspace.ellipsoid.inverseRadii * (czm_inverseViewRotation * ray.direction);\n\
859
- czm_ray rayInScaledSpace = czm_ray(origin, direction);\n\
860
- \n\
861
- // Perform the intersection in the scaled space.\n\
862
- czm_raySegment interval = czm_rayHalfspaceIntersectionInterval(rayInScaledSpace, halfspace.halfspaceInScaledSpace);\n\
863
- \n\
864
- if (czm_isEmpty(interval)) // No intersection.\n\
865
- {\n\
866
- return interval;\n\
867
- }\n\
868
- else // Intersection.\n\
869
- {\n\
870
- // Honor ray origin case (start == 0.0).\n\
871
- float start = interval.start;\n\
872
- if (start != 0.0)\n\
873
- {\n\
874
- // Determine start in unscaled space.\n\
875
- vec3 temp = (czm_view * vec4(halfspace.ellipsoid.radii * czm_pointAlongRay(rayInScaledSpace, start), 1.0)).xyz;\n\
876
- start = dot(temp, ray.direction);\n\
877
- }\n\
878
- \n\
879
- // Honor infinite ray (stop == infinity).\n\
880
- float stop = interval.stop;\n\
881
- if (stop != czm_infinity)\n\
882
- {\n\
883
- // Determine stop in unscaled space.\n\
884
- vec3 temp = (czm_view * vec4(halfspace.ellipsoid.radii * czm_pointAlongRay(rayInScaledSpace, stop), 1.0)).xyz;\n\
885
- stop = dot(temp, ray.direction);\n\
886
- }\n\
887
- \n\
888
- return czm_raySegment(start, stop);\n\
889
- }\n\
890
- }\n\
891
- ";
892
- });