cesium 0.13.2 → 0.14.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.
- data/app/assets/javascripts/Cesium.js +2 -2
- data/app/assets/javascripts/Core/Clock.js +81 -81
- data/app/assets/javascripts/Core/ClockRange.js +5 -3
- data/app/assets/javascripts/Core/ClockStep.js +7 -1
- data/app/assets/javascripts/Core/Event.js +12 -11
- data/app/assets/javascripts/Core/JulianDate.js +16 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +1 -1
- data/app/assets/javascripts/Renderer/ClearCommand.js +1 -1
- data/app/assets/javascripts/Renderer/Context.js +23 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +1 -1
- data/app/assets/javascripts/Scene/BillboardCollection.js +14 -24
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +8 -31
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +13 -4
- data/app/assets/javascripts/Scene/Tile.js +11 -6
- data/app/assets/javascripts/Scene/ViewportQuad.js +21 -36
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +15 -11
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +47 -27
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +886 -228
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +173 -40
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +17 -14
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +25 -19
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +61 -31
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +5 -4
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +9 -7
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +392 -299
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +12 -8
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +836 -530
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -58
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +7 -6
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +34 -26
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +21 -5
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +19 -11
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +13 -9
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +33 -22
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +24 -17
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +14 -10
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -20
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +11 -6
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +18 -13
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +12 -7
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +9 -6
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +23 -16
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +14 -11
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +10 -8
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +10 -8
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +12 -7
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +21 -12
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +11 -7
- data/app/assets/javascripts/Shaders/Materials/Water.js +46 -45
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +29 -19
- data/app/assets/javascripts/Shaders/Noise.js +408 -173
- data/app/assets/javascripts/Shaders/PolygonFS.js +20 -10
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +3 -3
- data/app/assets/javascripts/Shaders/PolygonVS.js +27 -22
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +23 -19
- data/app/assets/javascripts/Shaders/PolylineFS.js +3 -3
- data/app/assets/javascripts/Shaders/PolylineVS.js +24 -19
- data/app/assets/javascripts/Shaders/Ray.js +496 -315
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +16 -6
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +5 -2
- data/app/assets/javascripts/Shaders/SensorVolume.js +32 -15
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +61 -16
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +106 -53
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +4 -2
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +5 -3
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +14 -10
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +6 -5
- data/app/assets/javascripts/ThirdParty/knockout.js +88 -0
- data/app/assets/javascripts/Widgets/Animation/Animation.css +141 -0
- data/app/assets/javascripts/Widgets/Animation/Animation.js +944 -0
- data/app/assets/javascripts/Widgets/Animation/AnimationViewModel.js +503 -0
- data/app/assets/javascripts/Widgets/Animation/darker.css +69 -0
- data/app/assets/javascripts/Widgets/ClockViewModel.js +167 -0
- data/app/assets/javascripts/Widgets/Command.js +33 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +54 -77
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +6 -27
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +124 -187
- data/app/assets/javascripts/Widgets/Fullscreen/FullscreenViewModel.js +88 -0
- data/app/assets/javascripts/Widgets/Fullscreen/FullscreenWidget.css +16 -0
- data/app/assets/javascripts/Widgets/Fullscreen/FullscreenWidget.js +50 -0
- data/app/assets/javascripts/Widgets/Fullscreen/darker.css +14 -0
- data/app/assets/javascripts/Widgets/Images/enterFullscreen-darker.svg +18 -0
- data/app/assets/javascripts/Widgets/Images/enterFullscreen.svg +18 -0
- data/app/assets/javascripts/Widgets/Images/exitFullscreen-darker.svg +18 -0
- data/app/assets/javascripts/Widgets/Images/exitFullscreen.svg +18 -0
- data/app/assets/javascripts/Widgets/Observable.js +29 -0
- data/app/assets/javascripts/Widgets/{Timeline.css → Timeline/Timeline.css} +18 -21
- data/app/assets/javascripts/Widgets/{Timeline.js → Timeline/Timeline.js} +12 -7
- data/app/assets/javascripts/Widgets/{TimelineHighlightRange.js → Timeline/TimelineHighlightRange.js} +0 -0
- data/app/assets/javascripts/Widgets/{TimelineTrack.js → Timeline/TimelineTrack.js} +1 -1
- data/app/assets/javascripts/Widgets/Timeline/darker.css +20 -0
- data/app/assets/javascripts/Widgets/ToggleButtonViewModel.js +40 -0
- data/app/assets/javascripts/Widgets/createCommand.js +41 -0
- data/lib/cesium/version.rb +1 -1
- data/test/dummy/log/development.log +3300 -0
- data/test/dummy/tmp/cache/assets/C0D/D90/sprockets%2F297417de8571859510683b028659bf97 +0 -0
- data/test/dummy/tmp/cache/assets/C5E/6E0/sprockets%2F990a847694744e4ac598dc125572a243 +0 -0
- data/test/dummy/tmp/cache/assets/C64/470/sprockets%2Fa605a34504c3a61f1e0309374154a4f2 +0 -0
- data/test/dummy/tmp/cache/assets/C6C/D20/sprockets%2F8214271b512224e3f7a73a322e85b15c +0 -0
- data/test/dummy/tmp/cache/assets/C6E/8C0/sprockets%2F13ad4320ee685ee062033b0806b07756 +0 -0
- data/test/dummy/tmp/cache/assets/C71/D40/sprockets%2F191b5a7162930434c9ea09419d2c0c42 +0 -0
- data/test/dummy/tmp/cache/assets/C75/FC0/sprockets%2F7100611b808c367104f4537af8b467ca +0 -0
- data/test/dummy/tmp/cache/assets/C77/C90/sprockets%2F5c6d277228741022bef80d17b5422c55 +0 -0
- data/test/dummy/tmp/cache/assets/C7B/2E0/sprockets%2F049f5400e934154d876d9e7a110d0b72 +0 -0
- data/test/dummy/tmp/cache/assets/C7D/290/sprockets%2F07b270a59082157be139ee653b4435b9 +0 -0
- data/test/dummy/tmp/cache/assets/C82/860/sprockets%2Fbd185743a7cf9fa41b72715364178414 +0 -0
- data/test/dummy/tmp/cache/assets/C83/5B0/sprockets%2F11288f143903cfc5595d8a5771f51f20 +0 -0
- data/test/dummy/tmp/cache/assets/C84/210/sprockets%2F5e7c3418b40688a85916fd18512fc213 +0 -0
- data/test/dummy/tmp/cache/assets/C85/2A0/sprockets%2F409dfb449462105286e47c6a8c32860e +0 -0
- data/test/dummy/tmp/cache/assets/C87/790/sprockets%2F49d9e234d84217773d540a5b4813fc64 +0 -0
- data/test/dummy/tmp/cache/assets/C8C/C50/sprockets%2F87a1327314e4aa2a3ea44a33a4730420 +0 -0
- data/test/dummy/tmp/cache/assets/C9C/B20/sprockets%2Fc3000c708c2d95253d8a414d6c087d10 +0 -0
- data/test/dummy/tmp/cache/assets/C9E/DC0/sprockets%2F2f7b17e380320fe9d0650d3aa4614432 +0 -0
- data/test/dummy/tmp/cache/assets/C9F/9B0/sprockets%2Faeb280e1126521372c0bd6660e22969b +0 -0
- data/test/dummy/tmp/cache/assets/CA0/9A0/sprockets%2Fc1e9542f7960491862764447bf6d7f9e +0 -0
- data/test/dummy/tmp/cache/assets/CA1/C10/sprockets%2F804602800eb2e183aa91825b5f881b0d +0 -0
- data/test/dummy/tmp/cache/assets/CA6/DD0/sprockets%2F8b2532b8158e7333d5392bb505ca512f +0 -0
- data/test/dummy/tmp/cache/assets/CA8/4C0/sprockets%2Fbe667b320658d0297c210cb43c77b760 +0 -0
- data/test/dummy/tmp/cache/assets/CA9/340/sprockets%2Fd3c10509ea49a62e909622f77f4b3220 +0 -0
- data/test/dummy/tmp/cache/assets/CA9/430/sprockets%2F68e71052d60ebac0303e9e883c541265 +0 -0
- data/test/dummy/tmp/cache/assets/CAB/380/sprockets%2Fc2d6119b9334706b0b40e54f93f431f7 +0 -0
- data/test/dummy/tmp/cache/assets/CAC/820/sprockets%2F6b14c16171e49a1128966926eade622b +0 -0
- data/test/dummy/tmp/cache/assets/CB2/A60/sprockets%2F5583541ee042c37a846d149d80c8a36d +0 -0
- data/test/dummy/tmp/cache/assets/CB2/F30/sprockets%2Fcd4160d432937934435655ca7c56c5fa +0 -0
- data/test/dummy/tmp/cache/assets/CB3/280/sprockets%2F7e73589c2b0009c3748f7a068242cc7a +0 -0
- data/test/dummy/tmp/cache/assets/CB4/A90/sprockets%2F8fa8411bd1707443dcf02695b9a80776 +0 -0
- data/test/dummy/tmp/cache/assets/CB4/F10/sprockets%2F06ee620db145798202a9fd4c1849944b +0 -0
- data/test/dummy/tmp/cache/assets/CB8/3B0/sprockets%2Fd03836e3d10fb91125597086f6dcc848 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/280/sprockets%2F0e4025fc9a78a70774353617a9b7e96a +0 -0
- data/test/dummy/tmp/cache/assets/CBB/3F0/sprockets%2F410c0a86475946a391fc849c9c34e5e4 +0 -0
- data/test/dummy/tmp/cache/assets/CBE/B60/sprockets%2F872738245c2698dd11952e55f1d2cd5f +0 -0
- data/test/dummy/tmp/cache/assets/CC2/090/sprockets%2F1f4c818e07baa8b05de5987748339952 +0 -0
- data/test/dummy/tmp/cache/assets/CC3/D90/sprockets%2Fd7e90e060a9924b61d0b2c6d102c0024 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/310/sprockets%2F3d942c768ca693e08155d8a9b2195e99 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/9F0/sprockets%2Fbc7ef55837e5097405e3f5097fe35961 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/A80/sprockets%2F887a36c292044706f9d58ee02f659eb9 +0 -0
- data/test/dummy/tmp/cache/assets/CC8/E20/sprockets%2F27297a29159534cf493ff55576c9faa5 +0 -0
- data/test/dummy/tmp/cache/assets/CCD/040/sprockets%2Faf449bc1503080d6262424c20bb97b6d +0 -0
- data/test/dummy/tmp/cache/assets/CCD/210/sprockets%2F33c821e4b3b2538af0c79006df1318d0 +0 -0
- data/test/dummy/tmp/cache/assets/CCD/8B0/sprockets%2F738651415c65eb022af5ec9230a6b2b1 +0 -0
- data/test/dummy/tmp/cache/assets/CCF/180/sprockets%2F39ad17e27f30e3d0080675315bdae602 +0 -0
- data/test/dummy/tmp/cache/assets/CD0/CB0/sprockets%2F139767c003a27a8b5da08fc3714c072b +0 -0
- data/test/dummy/tmp/cache/assets/CD2/6E0/sprockets%2F161543077a1e9c52a2d577bbc3d41e62 +0 -0
- data/test/dummy/tmp/cache/assets/CD3/5A0/sprockets%2F3b02ea5d52854a16dea8336c339c5090 +0 -0
- data/test/dummy/tmp/cache/assets/CD5/9F0/sprockets%2F72d2b1b535d37251fb45c4754d62e2a6 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/170/sprockets%2Ffae3735873d2d340da1827ee6246500e +0 -0
- data/test/dummy/tmp/cache/assets/CDA/C40/sprockets%2F1d06e02833dd2620777ee9818ec61bb0 +0 -0
- data/test/dummy/tmp/cache/assets/CDC/080/sprockets%2Fb33c033c645ff28315cc958538cd5b13 +0 -0
- data/test/dummy/tmp/cache/assets/CDC/990/sprockets%2F913dd1f104b8b71495b00d798c2922de +0 -0
- data/test/dummy/tmp/cache/assets/CDD/090/sprockets%2F62a239aa6b1847f0cd82f6e5b7187303 +0 -0
- data/test/dummy/tmp/cache/assets/CDF/E30/sprockets%2F27d4b1eb52518a0667aef8525455b57c +0 -0
- data/test/dummy/tmp/cache/assets/CE6/E20/sprockets%2F0c20945489c7228a66bb54fd7cc449f0 +0 -0
- data/test/dummy/tmp/cache/assets/CE8/F00/sprockets%2Fd5833932a705129ff7ce6072ee0fb945 +0 -0
- data/test/dummy/tmp/cache/assets/CE9/C20/sprockets%2F5c49d701727e703847268f9fffdba020 +0 -0
- data/test/dummy/tmp/cache/assets/CED/610/sprockets%2F678ef9639f922616c1ced8f3b1b12931 +0 -0
- data/test/dummy/tmp/cache/assets/CEE/300/sprockets%2Fc27f86c561d6e1e8c08d5f852857b025 +0 -0
- data/test/dummy/tmp/cache/assets/CEF/B50/sprockets%2F877a93d34cbc7b4cf1837a56398f0185 +0 -0
- data/test/dummy/tmp/cache/assets/CF2/6B0/sprockets%2F8c7e5aab44b8703a6379569d887145be +0 -0
- data/test/dummy/tmp/cache/assets/CF3/2A0/sprockets%2Fcf7fca385a816577b9a3a8583117696d +0 -0
- data/test/dummy/tmp/cache/assets/CF5/5E0/sprockets%2Fdaf7891f7f08019202f8576899bb51ce +0 -0
- data/test/dummy/tmp/cache/assets/CF5/F60/sprockets%2Fbf00d9de7199bf7775c55128a295b677 +0 -0
- data/test/dummy/tmp/cache/assets/CF6/F60/sprockets%2Fc8e90a0ee2521916c1aa1a41b6463a63 +0 -0
- data/test/dummy/tmp/cache/assets/CF8/AB0/sprockets%2F7755643d4dc601cdf47e9886b4f379a5 +0 -0
- data/test/dummy/tmp/cache/assets/CF8/FA0/sprockets%2F853bda27091dea80f5121d20a08b53a7 +0 -0
- data/test/dummy/tmp/cache/assets/CFC/970/sprockets%2Fbe27af53c78bc90a6113a41620a448e1 +0 -0
- data/test/dummy/tmp/cache/assets/D01/160/sprockets%2Fa74c8a20e3158be3fb170499a11093db +0 -0
- data/test/dummy/tmp/cache/assets/D01/4A0/sprockets%2F9e53138a5fa453940a6190c1ba3ac36e +0 -0
- data/test/dummy/tmp/cache/assets/D09/360/sprockets%2Fe5d09aa6884c385437dbb18ca301e353 +0 -0
- data/test/dummy/tmp/cache/assets/D0D/990/sprockets%2F9cbe1835abd85d521b876411a56cb672 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/610/sprockets%2F3e14d0cbb1493615f7d23438bf8fd068 +0 -0
- data/test/dummy/tmp/cache/assets/D0F/870/sprockets%2F7597efb306ce615354e507d02edd14d4 +0 -0
- data/test/dummy/tmp/cache/assets/D10/590/sprockets%2F80386d276f6569b0a12ae1be155f9b3e +0 -0
- data/test/dummy/tmp/cache/assets/D11/060/sprockets%2F6d0bee24e84229bd6014301c878ff6d6 +0 -0
- data/test/dummy/tmp/cache/assets/D11/6A0/sprockets%2Ff21a9f2e8f4075086e68cda0059b25e2 +0 -0
- data/test/dummy/tmp/cache/assets/D11/A30/sprockets%2F210c5ab2fecdef47005c7308685e9297 +0 -0
- data/test/dummy/tmp/cache/assets/D12/460/sprockets%2F9c0db7ab725c7c7b15d2450657fe2369 +0 -0
- data/test/dummy/tmp/cache/assets/D12/760/sprockets%2F03c39aaab0669a6e9670a29f048db686 +0 -0
- data/test/dummy/tmp/cache/assets/D12/A90/sprockets%2F5f4bf0f279ca050491c07688df6d7c02 +0 -0
- data/test/dummy/tmp/cache/assets/D14/020/sprockets%2F0c3544de7e7bd74ee6e2040477f04a88 +0 -0
- data/test/dummy/tmp/cache/assets/D15/9B0/sprockets%2F015d78bcd557b68b039a7abd33b47679 +0 -0
- data/test/dummy/tmp/cache/assets/D19/B40/sprockets%2F1f58b7a260a18bcc697883f96e266a1b +0 -0
- data/test/dummy/tmp/cache/assets/D1A/520/sprockets%2Fe32e6a17fb333c5883939fcb234d2f69 +0 -0
- data/test/dummy/tmp/cache/assets/D1C/6B0/sprockets%2F3c7df42c4a83942ffb31d85d827595b4 +0 -0
- data/test/dummy/tmp/cache/assets/D1C/BD0/sprockets%2Ff389718cb2ba6fe3e0e0c420398f9486 +0 -0
- data/test/dummy/tmp/cache/assets/D21/E90/sprockets%2F2fe752c3566ccd57f7ee339086fc3427 +0 -0
- data/test/dummy/tmp/cache/assets/D23/CD0/sprockets%2F20f79a5d5570f3efef4de79621355e49 +0 -0
- data/test/dummy/tmp/cache/assets/D23/D30/sprockets%2F71867caa2cf28987ed0048cf7d3a7569 +0 -0
- data/test/dummy/tmp/cache/assets/D24/EF0/sprockets%2F776d054d84f539061bd8ddffa66906c8 +0 -0
- data/test/dummy/tmp/cache/assets/D25/4D0/sprockets%2Fde6d162f5e2a587d9564e88d90c773a3 +0 -0
- data/test/dummy/tmp/cache/assets/D27/A90/sprockets%2F1a25693899836d58cad4cbfe8c7a7707 +0 -0
- data/test/dummy/tmp/cache/assets/D2D/F30/sprockets%2Fc75a2beb051b582840cf3800d55b26dc +0 -0
- data/test/dummy/tmp/cache/assets/D2D/F80/sprockets%2F0293aae3c8d8a4fda11a0883c48b5222 +0 -0
- data/test/dummy/tmp/cache/assets/D2E/600/sprockets%2Fda9f7539b9df0aa7d763d14999870d94 +0 -0
- data/test/dummy/tmp/cache/assets/D33/040/sprockets%2F6593d8c52e0b617a12ae2c49aa6e3b07 +0 -0
- data/test/dummy/tmp/cache/assets/D34/7A0/sprockets%2F4b4a0c9775248b2e49c1bae8a72a05c3 +0 -0
- data/test/dummy/tmp/cache/assets/D36/770/sprockets%2F2942b9a5caa50e9107de74eca152619c +0 -0
- data/test/dummy/tmp/cache/assets/D37/9C0/sprockets%2Fdfa99409821a9d0d1d6f30b5461b1ae5 +0 -0
- data/test/dummy/tmp/cache/assets/D38/930/sprockets%2F1dd724d3466a12a84bb248dc7e6d06c6 +0 -0
- data/test/dummy/tmp/cache/assets/D39/7E0/sprockets%2F0a236c2722565068da14f7ecf7b7a8da +0 -0
- data/test/dummy/tmp/cache/assets/D3A/420/sprockets%2Fbd47498d7cbba00ab9c8201883915f2a +0 -0
- data/test/dummy/tmp/cache/assets/D3B/BB0/sprockets%2Ff533a1adca88a3594ec94233f71eb812 +0 -0
- data/test/dummy/tmp/cache/assets/D3B/E20/sprockets%2Fd20320e720f8dc2779b4ec627eb15fb6 +0 -0
- data/test/dummy/tmp/cache/assets/D3D/080/sprockets%2F007ac06f3c784668b28baba6902eec76 +0 -0
- data/test/dummy/tmp/cache/assets/D3D/D30/sprockets%2F5fa8cd221b97c829234dc81721eea60e +0 -0
- data/test/dummy/tmp/cache/assets/D3E/1F0/sprockets%2F6e84e3f3e420bd5ad7f336ce41750d36 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/960/sprockets%2F237931317e014eabd96932637ffadddc +0 -0
- data/test/dummy/tmp/cache/assets/D42/460/sprockets%2Fb195b37929fa63c85fbfb573aa05d209 +0 -0
- data/test/dummy/tmp/cache/assets/D42/F90/sprockets%2F632555653af85b04e418abb9dee238cf +0 -0
- data/test/dummy/tmp/cache/assets/D44/400/sprockets%2F3cdc153bbcae4ac07e75193678d61996 +0 -0
- data/test/dummy/tmp/cache/assets/D46/D10/sprockets%2F3399d1c2c5dbc7c9e0f2106296d82fd7 +0 -0
- data/test/dummy/tmp/cache/assets/D47/A70/sprockets%2F526b1eb3f0c2369b0c16c96ddf775f96 +0 -0
- data/test/dummy/tmp/cache/assets/D48/180/sprockets%2Ffce9aa3720b73d2259e644a2e3a99c89 +0 -0
- data/test/dummy/tmp/cache/assets/D48/6F0/sprockets%2F7a67d797a92f48d3104ecf5e42b5bc71 +0 -0
- data/test/dummy/tmp/cache/assets/D4A/7B0/sprockets%2F8cbd4e8cdea7e3e486565d92b2271561 +0 -0
- data/test/dummy/tmp/cache/assets/D4C/2C0/sprockets%2F096baecb9254aaa68d12c0a3c34a2121 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/440/sprockets%2F141dfe7665828ab1d5ee647d0e797e5a +0 -0
- data/test/dummy/tmp/cache/assets/D4F/D90/sprockets%2F1e4fde9a33bb918796edc96eb0805564 +0 -0
- data/test/dummy/tmp/cache/assets/D50/390/sprockets%2F04f3299f7c28fa65842d4bda257df9d5 +0 -0
- data/test/dummy/tmp/cache/assets/D51/330/sprockets%2F0e113bb1dc7050041be6f8d28c4ebb41 +0 -0
- data/test/dummy/tmp/cache/assets/D57/370/sprockets%2F102e7ebfa287ea2e1b58052b052c1ee2 +0 -0
- data/test/dummy/tmp/cache/assets/D57/C50/sprockets%2F28a22bacabfe4b780402b3ca83a54843 +0 -0
- data/test/dummy/tmp/cache/assets/D57/D00/sprockets%2Fbb9c7666fe4175a054557fff4ccf5983 +0 -0
- data/test/dummy/tmp/cache/assets/D59/E30/sprockets%2Fa8a09c836fc128ee889ce97d72e6444c +0 -0
- data/test/dummy/tmp/cache/assets/D5C/800/sprockets%2Fdd1b21cea3433ac792403e3de4f84f11 +0 -0
- data/test/dummy/tmp/cache/assets/D5D/140/sprockets%2Ffca988958f2a37ce8eb6b77337e793c0 +0 -0
- data/test/dummy/tmp/cache/assets/D5F/630/sprockets%2Ff2df01200f9420db5285f15bbdf4e34e +0 -0
- data/test/dummy/tmp/cache/assets/D61/420/sprockets%2F79102ecb63d32f0f43e46f481acab0c7 +0 -0
- data/test/dummy/tmp/cache/assets/D61/B10/sprockets%2F56a7f22ca114fc32e60a2ca8e5c946e1 +0 -0
- data/test/dummy/tmp/cache/assets/D61/C00/sprockets%2F71ad51ea200867d43de03b8b25eb3e6f +0 -0
- data/test/dummy/tmp/cache/assets/D63/400/sprockets%2F30721d1c6698a64ac1cdc7e8d3ad37a0 +0 -0
- data/test/dummy/tmp/cache/assets/D65/3D0/sprockets%2Fc70f23593414be8a0daf25149ecb06fd +0 -0
- data/test/dummy/tmp/cache/assets/D68/020/sprockets%2Fc393ddcb5c7dbaf1665bc90491523d23 +0 -0
- data/test/dummy/tmp/cache/assets/D68/9F0/sprockets%2F0a2eac996cb10aab983963ec21c9d166 +0 -0
- data/test/dummy/tmp/cache/assets/D68/FA0/sprockets%2F315d926695d2ababc102ded8362e7c7b +0 -0
- data/test/dummy/tmp/cache/assets/D69/810/sprockets%2F8a4fedc6fc72ca37c7403924c01b374d +0 -0
- data/test/dummy/tmp/cache/assets/D6A/400/sprockets%2F7797a681a0c8c541bad4febaa526920e +0 -0
- data/test/dummy/tmp/cache/assets/D6A/800/sprockets%2F9e3ba44ae81df1dc8c541a05e0239c79 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/890/sprockets%2Fdacdb6e192b1709870319bbb0feb3669 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/DD0/sprockets%2Ffbfa79e06a10e3016c741fff74c5e652 +0 -0
- data/test/dummy/tmp/cache/assets/D6E/540/sprockets%2F1ec9a9013efe375e03b9ba538af9b515 +0 -0
- data/test/dummy/tmp/cache/assets/D70/D70/sprockets%2Fd7f6a9d69e31ff706e22c0b283b6a1e4 +0 -0
- data/test/dummy/tmp/cache/assets/D70/F70/sprockets%2Ff296c418125b7be0bc89c34eec50e82d +0 -0
- data/test/dummy/tmp/cache/assets/D71/6E0/sprockets%2F8c3e23061d8826cf63999adbe4a0d5ba +0 -0
- data/test/dummy/tmp/cache/assets/D73/3D0/sprockets%2Fbad4cc5e382119c131bd5947dd7c96e7 +0 -0
- data/test/dummy/tmp/cache/assets/D74/9D0/sprockets%2F1893ad2efa07114b729fd1f09ae97f4e +0 -0
- data/test/dummy/tmp/cache/assets/D74/EE0/sprockets%2Fe68a01853f554a88bb865bc94ba1bbd9 +0 -0
- data/test/dummy/tmp/cache/assets/D75/900/sprockets%2F857ad23ff231bc76bec12fd9a966538a +0 -0
- data/test/dummy/tmp/cache/assets/D76/060/sprockets%2Fd80d293a509fdecc872163f94b8fcc13 +0 -0
- data/test/dummy/tmp/cache/assets/D76/350/sprockets%2F66508d9698453a0ffabcf1368ca7a1fc +0 -0
- data/test/dummy/tmp/cache/assets/D79/820/sprockets%2F99bcacecd3fb76124a968b4b8341e729 +0 -0
- data/test/dummy/tmp/cache/assets/D7E/130/sprockets%2F1affef8c994fdc43ba85491b2724627f +0 -0
- data/test/dummy/tmp/cache/assets/D7E/C00/sprockets%2F8ed69e6fd77505a244caf6dde36822e3 +0 -0
- data/test/dummy/tmp/cache/assets/D80/7A0/sprockets%2F68e74ee988b46d128ff3020bc0e9c7fd +0 -0
- data/test/dummy/tmp/cache/assets/D82/800/sprockets%2F9f0d326f40e88f324ff3a367d9b3fc9f +0 -0
- data/test/dummy/tmp/cache/assets/D84/650/sprockets%2Fea05e644410721afbbd8fd1a3a7a1c08 +0 -0
- data/test/dummy/tmp/cache/assets/D89/3A0/sprockets%2F53ef2870ac0bb142a8322eee9adca207 +0 -0
- data/test/dummy/tmp/cache/assets/D8B/240/sprockets%2Faddf06da0d70aa150d16b97b6816d0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D8B/3B0/sprockets%2Fd0c134b0b275ea2f800380fcaebc95f5 +0 -0
- data/test/dummy/tmp/cache/assets/D8D/F70/sprockets%2F70d5fc5c803f7ba21c3a7374003bfcdd +0 -0
- data/test/dummy/tmp/cache/assets/D8F/B90/sprockets%2F5468bccabc20d4cf562bd110508df3d8 +0 -0
- data/test/dummy/tmp/cache/assets/D92/3B0/sprockets%2Fc03a95a4b2eb432d9f5ceda3fb082860 +0 -0
- data/test/dummy/tmp/cache/assets/D93/FE0/sprockets%2Fac1c5a644564a7fd2861539dbaf2a0fb +0 -0
- data/test/dummy/tmp/cache/assets/D95/500/sprockets%2Fa3c0fdf5260f72d128f7cbb2a64fd408 +0 -0
- data/test/dummy/tmp/cache/assets/D97/2E0/sprockets%2F93c35b873a3c8ea35f1628e1ad2deb2b +0 -0
- data/test/dummy/tmp/cache/assets/D97/4A0/sprockets%2F2fae66f8ad04be7ce8109005c735acf1 +0 -0
- data/test/dummy/tmp/cache/assets/D98/E90/sprockets%2F04cdcb52b072efd49452f2cde9721fb4 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/E90/sprockets%2F7d2da4bd8ee5b4ff754581d41806aba2 +0 -0
- data/test/dummy/tmp/cache/assets/DA0/2C0/sprockets%2F61c0dfd9a973f9891cd3d6b322bc33ea +0 -0
- data/test/dummy/tmp/cache/assets/DA0/C70/sprockets%2Ff29a718bce262c8d86f3abe9443b41cb +0 -0
- data/test/dummy/tmp/cache/assets/DA3/A00/sprockets%2F7e7df285dbb4694a5f1583fba12ab84d +0 -0
- data/test/dummy/tmp/cache/assets/DA3/EC0/sprockets%2F159d528ec53e415cbc9d29be3a2b96fb +0 -0
- data/test/dummy/tmp/cache/assets/DA5/170/sprockets%2F6a564a0e1afd718a07d87f069bc48dff +0 -0
- data/test/dummy/tmp/cache/assets/DA6/730/sprockets%2F5758d9d4ad2c22c9ffd113a78f6d36bb +0 -0
- data/test/dummy/tmp/cache/assets/DA7/6F0/sprockets%2F3e39ce593cda9b3bce9c3c8e014829b5 +0 -0
- data/test/dummy/tmp/cache/assets/DA9/0B0/sprockets%2F66e39ce1e6e7adc58cb01550fe58c93d +0 -0
- data/test/dummy/tmp/cache/assets/DAD/9D0/sprockets%2Fc99ec7c84f8f79200eda8424c6bda6e1 +0 -0
- data/test/dummy/tmp/cache/assets/DAE/B70/sprockets%2F278f525bc64f4ead949d9dfa1f1a37c8 +0 -0
- data/test/dummy/tmp/cache/assets/DB3/740/sprockets%2F3fc2be88f7fa50a9992fe961ffc50a83 +0 -0
- data/test/dummy/tmp/cache/assets/DB3/770/sprockets%2F47998ff4ce9a2b5383b95bd54ded3c3d +0 -0
- data/test/dummy/tmp/cache/assets/DB6/6C0/sprockets%2Fe710d8fbf4ca41d29a742b22a21a0fec +0 -0
- data/test/dummy/tmp/cache/assets/DBC/330/sprockets%2Ffc79d797d11878bc435b668cdfbc94cf +0 -0
- data/test/dummy/tmp/cache/assets/DBF/270/sprockets%2F820ebc60d1be685f4044d1cb8cabdd17 +0 -0
- data/test/dummy/tmp/cache/assets/DBF/E80/sprockets%2F41d82531e91fc1ca0c806beacf0cfc84 +0 -0
- data/test/dummy/tmp/cache/assets/DC1/E40/sprockets%2F57aebd4c69abf9331b4770bd3ced100d +0 -0
- data/test/dummy/tmp/cache/assets/DC1/FD0/sprockets%2Ff97fb61e211912bbc1eaed82c4ad740c +0 -0
- data/test/dummy/tmp/cache/assets/DC2/250/sprockets%2Ffddac1268ff054c12ea32cc6619c46ac +0 -0
- data/test/dummy/tmp/cache/assets/DC2/5F0/sprockets%2F68dc2f8cab31bbd8ab65220c685eb15b +0 -0
- data/test/dummy/tmp/cache/assets/DC3/7C0/sprockets%2Fa78b7c0aa57b250e05d5ad1e56ac9ed5 +0 -0
- data/test/dummy/tmp/cache/assets/DC9/330/sprockets%2Fc5fe138ffe1adb009a407c172fcb9b49 +0 -0
- data/test/dummy/tmp/cache/assets/DCC/F10/sprockets%2F4fb860d9bb2c56165fae6ecc193bd1f2 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/0E0/sprockets%2Fc1845aeaffa0d9c887108b5cf1a77dc2 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/920/sprockets%2F5208ac969dfa6f4dd531ef2d2afb454b +0 -0
- data/test/dummy/tmp/cache/assets/DCE/950/sprockets%2F2d0d1caef1b638f88de704d1eb07be88 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/9C0/sprockets%2Fc6b7fd0b623a5b66692ed21dafe5ee18 +0 -0
- data/test/dummy/tmp/cache/assets/DD2/190/sprockets%2F3662cdc2f2f551c51ec9bddb9177deb7 +0 -0
- data/test/dummy/tmp/cache/assets/DD2/C80/sprockets%2Fe94b85ec5d4eeb0616972dd03cadf06f +0 -0
- data/test/dummy/tmp/cache/assets/DD3/B30/sprockets%2Ff1eab781d903ebdf7d9379cca92533ba +0 -0
- data/test/dummy/tmp/cache/assets/DD5/8F0/sprockets%2F4bfcc6fffb235da87a162efc721985e2 +0 -0
- data/test/dummy/tmp/cache/assets/DD6/8B0/sprockets%2F8ab6728b7ab04dbec482fe5fb7ef8604 +0 -0
- data/test/dummy/tmp/cache/assets/DD6/E50/sprockets%2F1ce8c04cfee001955cf5fd9ed7d59a52 +0 -0
- data/test/dummy/tmp/cache/assets/DD9/D30/sprockets%2F9abfa5c86dbf28fd7be89b650c3d5225 +0 -0
- data/test/dummy/tmp/cache/assets/DE7/E30/sprockets%2F18bca0215ecdc63ba01a2ee5cd7c34f8 +0 -0
- data/test/dummy/tmp/cache/assets/DE8/C20/sprockets%2Fc91409dc1b447ba1beaa0be9b33ef14d +0 -0
- data/test/dummy/tmp/cache/assets/DED/270/sprockets%2Fdee70d8becb01a00e2d7420c6a646dff +0 -0
- data/test/dummy/tmp/cache/assets/DF4/2D0/sprockets%2Ffd83bba93ef8ca1a70c63ee4b625a6b0 +0 -0
- data/test/dummy/tmp/cache/assets/DF8/E50/sprockets%2Fbb1bdc05e895b8c08cb6ca4491ed51cf +0 -0
- data/test/dummy/tmp/cache/assets/DFB/EC0/sprockets%2F94ccf06d9a630eaa4a9865d7e74aaaba +0 -0
- data/test/dummy/tmp/cache/assets/DFC/FC0/sprockets%2Fd8badee5b41f9328df1d3fe153eef401 +0 -0
- data/test/dummy/tmp/cache/assets/DFD/F30/sprockets%2Fd60da4793bab6bff313a6bfc25985dfb +0 -0
- data/test/dummy/tmp/cache/assets/DFE/230/sprockets%2Fd260ce7fb8bf41f914b57c0dde9b0af6 +0 -0
- data/test/dummy/tmp/cache/assets/DFE/2E0/sprockets%2F813f277df6cd78babbdb7f5c34f3ab05 +0 -0
- data/test/dummy/tmp/cache/assets/DFE/E50/sprockets%2F59b3e0cbbf99e92737aab0bcfc205f5f +0 -0
- data/test/dummy/tmp/cache/assets/DFF/9F0/sprockets%2Fb4677ae08ff6f9edaf3b2bcbb115a963 +0 -0
- data/test/dummy/tmp/cache/assets/E05/480/sprockets%2F789f3eb9b0ee9d3fb684066acaebd4a1 +0 -0
- data/test/dummy/tmp/cache/assets/E08/8A0/sprockets%2F3cb6916a9933fdfd43d6defe3e4a6d1d +0 -0
- data/test/dummy/tmp/cache/assets/E09/A00/sprockets%2F77913b88dec083cedb3875beae2efd5a +0 -0
- data/test/dummy/tmp/cache/assets/E16/E60/sprockets%2Ffe5e3c5af908e8cc7ff70976fdc14db7 +0 -0
- data/test/dummy/tmp/cache/assets/E28/B70/sprockets%2Fb2fa75ae01dda6654abd60c78c8bf5cf +0 -0
- data/test/dummy/tmp/cache/assets/E30/8A0/sprockets%2F5d3fccefabad47a78655a5c92adb3c76 +0 -0
- data/test/dummy/tmp/cache/assets/E36/9F0/sprockets%2Fb2bdf95afd8ecf06ce9b8407a2f9b1b8 +0 -0
- data/test/dummy/tmp/cache/assets/E3E/C60/sprockets%2F8b3bfb5dbc23d849d4f2fc6dd7fe45d9 +0 -0
- data/test/dummy/tmp/cache/assets/E3F/B10/sprockets%2F7b1af74e67b27fff762f3cdfebe5f4a7 +0 -0
- data/test/dummy/tmp/cache/assets/E50/740/sprockets%2F0578ebbffb5c27d00cc86b1dd7b1eada +0 -0
- data/test/dummy/tmp/cache/assets/E50/9F0/sprockets%2Fddfa62aba6a56ed6ab5e44ae36b175ad +0 -0
- data/test/dummy/tmp/cache/assets/E5D/160/sprockets%2F44a9be8a9b567fceec2bdc4ab074bbb9 +0 -0
- data/test/dummy/tmp/cache/assets/E61/FB0/sprockets%2F97c2b65cafddc7ac59ae4a5e2a18afe8 +0 -0
- data/test/dummy/tmp/cache/assets/E73/680/sprockets%2F1a4d0b08b6fdbacbfe0d1cb7df5db251 +0 -0
- data/test/dummy/tmp/cache/assets/ED1/C10/sprockets%2Fa9a13ad3bb3a6ccbb6faac3fac0b6c8e +0 -0
- data/test/dummy/tmp/cache/assets/EF0/E30/sprockets%2F3ac422b66adec6cffa8edecf9bdea48d +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -1
- metadata +33 -15
- data/app/assets/javascripts/Core/AnimationController.js +0 -148
- data/app/assets/javascripts/Scene/ImageryProviderError.js +0 -149
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +0 -1
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +0 -47
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +0 -24
@@ -3,11 +3,12 @@
|
|
3
3
|
define(function() {
|
4
4
|
"use strict";
|
5
5
|
return "attribute vec4 position;\n\
|
6
|
+
\n\
|
6
7
|
varying vec4 positionEC;\n\
|
8
|
+
\n\
|
7
9
|
void main()\n\
|
8
10
|
{\n\
|
9
|
-
positionEC = czm_modelView * position;\n\
|
10
|
-
gl_Position = czm_projection * positionEC;\n\
|
11
|
-
}
|
12
|
-
";
|
11
|
+
positionEC = czm_modelView * position;\n\
|
12
|
+
gl_Position = czm_projection * positionEC;\n\
|
13
|
+
}";
|
13
14
|
});
|
@@ -3,13 +3,15 @@
|
|
3
3
|
define(function() {
|
4
4
|
"use strict";
|
5
5
|
return "attribute vec4 position;\n\
|
6
|
+
\n\
|
6
7
|
varying vec2 v_textureCoordinates;\n\
|
7
|
-
|
8
|
+
\n\
|
9
|
+
void main() \n\
|
8
10
|
{\n\
|
9
|
-
float x = (position.x - czm_viewport.x) / czm_viewport.z;\n\
|
10
|
-
float y = (position.y - czm_viewport.y) / czm_viewport.w;\n\
|
11
|
-
v_textureCoordinates = vec2(x, y);\n\
|
12
|
-
|
13
|
-
|
14
|
-
";
|
11
|
+
float x = (position.x - czm_viewport.x) / czm_viewport.z;\n\
|
12
|
+
float y = (position.y - czm_viewport.y) / czm_viewport.w;\n\
|
13
|
+
v_textureCoordinates = vec2(x, y);\n\
|
14
|
+
\n\
|
15
|
+
gl_Position = czm_viewportOrthographic * position;\n\
|
16
|
+
}";
|
15
17
|
});
|
@@ -3,359 +3,452 @@
|
|
3
3
|
define(function() {
|
4
4
|
"use strict";
|
5
5
|
return "#ifdef GL_OES_standard_derivatives\n\
|
6
|
-
#extension GL_OES_standard_derivatives : enable\n\
|
7
|
-
#endif\n\
|
6
|
+
#extension GL_OES_standard_derivatives : enable\n\
|
7
|
+
#endif \n\
|
8
|
+
\n\
|
8
9
|
uniform float u_sensorRadius;\n\
|
9
10
|
uniform float u_outerHalfAngle;\n\
|
10
11
|
uniform float u_innerHalfAngle;\n\
|
11
12
|
uniform float u_maximumClockAngle;\n\
|
12
13
|
uniform float u_minimumClockAngle;\n\
|
13
|
-
uniform bool u_showIntersection
|
14
|
+
uniform bool u_showIntersection; \n\
|
14
15
|
uniform vec4 u_pickColor;\n\
|
16
|
+
\n\
|
15
17
|
varying vec3 v_positionEC;\n\
|
16
18
|
varying vec3 v_sensorVertexWC;\n\
|
17
19
|
varying vec3 v_sensorVertexEC;\n\
|
18
20
|
varying vec3 v_sensorAxisEC;\n\
|
21
|
+
\n\
|
19
22
|
#ifndef RENDER_FOR_PICK\n\
|
23
|
+
\n\
|
20
24
|
czm_materialInput getMaterialInput(float sensorRadius, vec3 pointEC, vec3 normalEC)\n\
|
21
25
|
{\n\
|
22
|
-
czm_materialInput materialInput;\n\
|
23
|
-
|
24
|
-
|
25
|
-
materialInput.
|
26
|
-
materialInput.
|
27
|
-
|
28
|
-
materialInput.
|
29
|
-
|
26
|
+
czm_materialInput materialInput;\n\
|
27
|
+
\n\
|
28
|
+
vec3 pointMC = (czm_inverseModelView * vec4(pointEC, 1.0)).xyz;\n\
|
29
|
+
materialInput.positionToEyeEC = -v_positionEC; \n\
|
30
|
+
materialInput.normalEC = normalEC;\n\
|
31
|
+
\n\
|
32
|
+
materialInput.st = sensor2dTextureCoordinates(sensorRadius, pointMC);\n\
|
33
|
+
materialInput.str = pointMC / sensorRadius; \n\
|
34
|
+
materialInput.positionMC = pointMC;\n\
|
35
|
+
\n\
|
36
|
+
return materialInput;\n\
|
30
37
|
}\n\
|
31
38
|
vec4 getOuterColor(float sensorRadius, vec3 pointEC, vec3 normalEC)\n\
|
32
39
|
{\n\
|
33
|
-
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
34
|
-
czm_material material = czm_getOuterMaterial(materialInput);\n\
|
35
|
-
|
36
|
-
|
40
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
41
|
+
czm_material material = czm_getOuterMaterial(materialInput);\n\
|
42
|
+
\n\
|
43
|
+
//Final\n\
|
44
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);\n\
|
45
|
+
\n\
|
46
|
+
return czm_phong(positionToEyeEC, material);\n\
|
37
47
|
}\n\
|
48
|
+
\n\
|
38
49
|
vec4 getInnerColor(float sensorRadius, vec3 pointEC, vec3 normalEC)\n\
|
39
50
|
{\n\
|
40
|
-
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
41
|
-
czm_material material = czm_getInnerMaterial(materialInput);\n\
|
42
|
-
|
43
|
-
|
51
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
52
|
+
czm_material material = czm_getInnerMaterial(materialInput);\n\
|
53
|
+
\n\
|
54
|
+
//Final\n\
|
55
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);\n\
|
56
|
+
\n\
|
57
|
+
return czm_phong(positionToEyeEC, material); \n\
|
44
58
|
}\n\
|
59
|
+
\n\
|
45
60
|
vec4 getCapColor(float sensorRadius, vec3 pointEC, vec3 normalEC)\n\
|
46
61
|
{\n\
|
47
|
-
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
48
|
-
czm_material material = czm_getCapMaterial(materialInput);\n\
|
49
|
-
|
50
|
-
|
62
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
63
|
+
czm_material material = czm_getCapMaterial(materialInput);\n\
|
64
|
+
\n\
|
65
|
+
//Final\n\
|
66
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);\n\
|
67
|
+
\n\
|
68
|
+
return czm_phong(positionToEyeEC, material); \n\
|
51
69
|
}\n\
|
70
|
+
\n\
|
52
71
|
vec4 getSilhouetteColor(float sensorRadius, vec3 pointEC, vec3 normalEC)\n\
|
53
72
|
{\n\
|
54
|
-
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
55
|
-
czm_material material = czm_getSilhouetteMaterial(materialInput);\n\
|
56
|
-
|
57
|
-
|
73
|
+
czm_materialInput materialInput = getMaterialInput(sensorRadius, pointEC, normalEC);\n\
|
74
|
+
czm_material material = czm_getSilhouetteMaterial(materialInput);\n\
|
75
|
+
\n\
|
76
|
+
//Final\n\
|
77
|
+
vec3 positionToEyeEC = normalize(-v_positionEC);\n\
|
78
|
+
\n\
|
79
|
+
return czm_phong(positionToEyeEC, material); \n\
|
58
80
|
}\n\
|
81
|
+
\n\
|
59
82
|
#endif\n\
|
83
|
+
\n\
|
60
84
|
bool czm_isOnOrNear(float d, czm_raySegment interval, float epsilon)\n\
|
61
85
|
{\n\
|
62
|
-
bool answer = (czm_equalsEpsilon(d, interval.start, epsilon) || czm_equalsEpsilon(d, interval.stop, epsilon));\n\
|
63
|
-
return answer;\n\
|
86
|
+
bool answer = (czm_equalsEpsilon(d, interval.start, epsilon) || czm_equalsEpsilon(d, interval.stop, epsilon));\n\
|
87
|
+
return answer;\n\
|
64
88
|
}\n\
|
89
|
+
\n\
|
65
90
|
bool czm_isOnOrNear(float d, czm_raySegmentCollection coneIntervals, float epsilon)\n\
|
66
91
|
{\n\
|
67
|
-
|
68
|
-
|
69
|
-
|
92
|
+
// Can have a maximum of two ray segments from cone intersection.\n\
|
93
|
+
bool answer = (coneIntervals.count > 0 && (czm_isOnOrNear(d, coneIntervals.intervals[0], epsilon)))\n\
|
94
|
+
|| (coneIntervals.count > 1 && (czm_isOnOrNear(d, coneIntervals.intervals[1], epsilon)));\n\
|
95
|
+
return answer;\n\
|
70
96
|
}\n\
|
97
|
+
\n\
|
71
98
|
bool czm_isOnOrNearSensor(float d, czm_raySegmentCollection outerIntervals, czm_raySegmentCollection innerIntervals, float epsilon)\n\
|
72
99
|
{\n\
|
73
|
-
bool answer = czm_isOnOrNear(d, outerIntervals, epsilon) || czm_isOnOrNear(d, innerIntervals, epsilon);\n\
|
74
|
-
return answer;\n\
|
100
|
+
bool answer = czm_isOnOrNear(d, outerIntervals, epsilon) || czm_isOnOrNear(d, innerIntervals, epsilon);\n\
|
101
|
+
return answer;\n\
|
75
102
|
}\n\
|
103
|
+
\n\
|
76
104
|
bool ellipsoidSensorIntersection(czm_raySegment sphereInterval,\n\
|
77
|
-
czm_raySegmentCollection outerIntervals, czm_raySegmentCollection innerIntervals,\n\
|
78
|
-
czm_raySegmentCollection clockIntervals,\n\
|
79
|
-
czm_raySegment ellipsoidInterval, czm_raySegment silhouetteHalfspaceInterval, czm_raySegmentCollection solid)\n\
|
80
|
-
{\n\
|
81
|
-
if (czm_isEmpty(ellipsoidInterval))\n\
|
82
|
-
{\n\
|
83
|
-
return false;\n\
|
84
|
-
}\n\
|
85
|
-
|
105
|
+
czm_raySegmentCollection outerIntervals, czm_raySegmentCollection innerIntervals,\n\
|
106
|
+
czm_raySegmentCollection clockIntervals,\n\
|
107
|
+
czm_raySegment ellipsoidInterval, czm_raySegment silhouetteHalfspaceInterval, czm_raySegmentCollection solid)\n\
|
108
|
+
{\n\
|
109
|
+
if (czm_isEmpty(ellipsoidInterval))\n\
|
110
|
+
{\n\
|
111
|
+
return false;\n\
|
112
|
+
}\n\
|
113
|
+
\n\
|
114
|
+
float t = ellipsoidInterval.start;\n\
|
115
|
+
\n\
|
86
116
|
#ifdef GL_OES_standard_derivatives\n\
|
87
|
-
|
117
|
+
// TODO: This seems to be too aggressive in some areas, and too conservative in others\n\
|
118
|
+
float epsilon = max(abs(dFdx(t)), abs(dFdy(t)));\n\
|
88
119
|
#else\n\
|
89
|
-
|
120
|
+
// TODO: Don't hardcode this.\n\
|
121
|
+
float epsilon = t / 500.0;\n\
|
90
122
|
#endif\n\
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
if (
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
d
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
d
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
d
|
116
|
-
|
117
|
-
|
118
|
-
||
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
}\n\
|
123
|
+
\n\
|
124
|
+
float width = 2.0; // TODO: Expose as a uniform\n\
|
125
|
+
epsilon *= width; \n\
|
126
|
+
\n\
|
127
|
+
// TODO: Rework this once the ray segments have associated boundary surfaces with their start/stop values.\n\
|
128
|
+
if (solid.count > 0)\n\
|
129
|
+
{\n\
|
130
|
+
float d = solid.intervals[0].start;\n\
|
131
|
+
if (d == ellipsoidInterval.start\n\
|
132
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)\n\
|
133
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon) \n\
|
134
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon) \n\
|
135
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;\n\
|
136
|
+
d = solid.intervals[0].stop;\n\
|
137
|
+
if (d == ellipsoidInterval.start\n\
|
138
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)\n\
|
139
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon) \n\
|
140
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon) \n\
|
141
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;\n\
|
142
|
+
\n\
|
143
|
+
if (solid.count > 1)\n\
|
144
|
+
{\n\
|
145
|
+
d = solid.intervals[1].start;\n\
|
146
|
+
if (d == ellipsoidInterval.start\n\
|
147
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)\n\
|
148
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon) \n\
|
149
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon) \n\
|
150
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;\n\
|
151
|
+
d = solid.intervals[1].stop;\n\
|
152
|
+
if (d == ellipsoidInterval.start\n\
|
153
|
+
&& (czm_isOnOrNear(d, silhouetteHalfspaceInterval, epsilon)\n\
|
154
|
+
|| czm_isOnOrNear(d, sphereInterval, epsilon) \n\
|
155
|
+
|| czm_isOnOrNear(d, clockIntervals, epsilon) \n\
|
156
|
+
|| czm_isOnOrNearSensor(d, outerIntervals, innerIntervals, epsilon))) return true;\n\
|
157
|
+
}\n\
|
158
|
+
\n\
|
159
|
+
return false;\n\
|
160
|
+
}\n\
|
161
|
+
else\n\
|
162
|
+
{\n\
|
163
|
+
false;\n\
|
164
|
+
}\n\
|
165
|
+
}\n\
|
166
|
+
\n\
|
129
167
|
vec4 shade(\n\
|
130
|
-
czm_ray ray,\n\
|
131
|
-
float nearestRayTime,\n\
|
132
|
-
czm_sphere sphere,\n\
|
133
|
-
czm_cone outerCone,\n\
|
134
|
-
czm_cone innerCone,\n\
|
135
|
-
czm_halfspace maxClock,\n\
|
136
|
-
czm_halfspace minClock,\n\
|
137
|
-
czm_ellipsoidSilhouetteCone silhouetteCone,\n\
|
138
|
-
czm_ellipsoidSilhouetteHalfspace silhouetteHalfspace
|
139
|
-
czm_raySegment sphereInterval,\n\
|
140
|
-
czm_raySegmentCollection outerConeInterval,\n\
|
141
|
-
czm_raySegmentCollection innerConeInterval,\n\
|
142
|
-
czm_raySegment maxClockInterval,\n\
|
143
|
-
czm_raySegment minClockInterval,\n\
|
144
|
-
czm_raySegmentCollection clockIntervals,\n\
|
145
|
-
czm_raySegment silhouetteConeInterval,\n\
|
146
|
-
czm_raySegment silhouetteHalfspaceInterval,\n\
|
147
|
-
czm_raySegment ellipsoidInterval,\n\
|
148
|
-
czm_raySegmentCollection intervals)\n\
|
168
|
+
czm_ray ray,\n\
|
169
|
+
float nearestRayTime,\n\
|
170
|
+
czm_sphere sphere,\n\
|
171
|
+
czm_cone outerCone,\n\
|
172
|
+
czm_cone innerCone,\n\
|
173
|
+
czm_halfspace maxClock,\n\
|
174
|
+
czm_halfspace minClock,\n\
|
175
|
+
czm_ellipsoidSilhouetteCone silhouetteCone,\n\
|
176
|
+
czm_ellipsoidSilhouetteHalfspace silhouetteHalfspace, \n\
|
177
|
+
czm_raySegment sphereInterval,\n\
|
178
|
+
czm_raySegmentCollection outerConeInterval,\n\
|
179
|
+
czm_raySegmentCollection innerConeInterval,\n\
|
180
|
+
czm_raySegment maxClockInterval,\n\
|
181
|
+
czm_raySegment minClockInterval,\n\
|
182
|
+
czm_raySegmentCollection clockIntervals,\n\
|
183
|
+
czm_raySegment silhouetteConeInterval,\n\
|
184
|
+
czm_raySegment silhouetteHalfspaceInterval,\n\
|
185
|
+
czm_raySegment ellipsoidInterval,\n\
|
186
|
+
czm_raySegmentCollection intervals)\n\
|
149
187
|
{\n\
|
150
188
|
#ifdef RENDER_FOR_PICK\n\
|
151
|
-
return u_pickColor;\n\
|
189
|
+
return u_pickColor;\n\
|
152
190
|
#else\n\
|
153
|
-
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);\n\
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
(
|
177
|
-
(
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
(nearestRayTime ==
|
186
|
-
{\n\
|
187
|
-
|
188
|
-
normal =
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
(
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
191
|
+
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);\n\
|
192
|
+
\n\
|
193
|
+
// Visualization TODO: Segment stop surface can be used to determine which pixels to \"fill\" \n\
|
194
|
+
// in order to indicate projection onto the ellipsoid surface.\n\
|
195
|
+
\n\
|
196
|
+
if (u_showIntersection && ellipsoidSensorIntersection(sphereInterval,\n\
|
197
|
+
outerConeInterval, innerConeInterval, clockIntervals,\n\
|
198
|
+
ellipsoidInterval, silhouetteHalfspaceInterval, intervals))\n\
|
199
|
+
{\n\
|
200
|
+
return getIntersectionColor(u_sensorRadius, nearestPoint);\n\
|
201
|
+
} \n\
|
202
|
+
\n\
|
203
|
+
vec3 positionToEyeEC = -ray.direction; // normalized position-to-eye vector in eye coordinates\n\
|
204
|
+
vec3 czm_sunDirectionEC = czm_sunDirectionEC; // normalized position-to-sun vector in eye coordinates\n\
|
205
|
+
\n\
|
206
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)\n\
|
207
|
+
{\n\
|
208
|
+
if (i < outerConeInterval.count &&\n\
|
209
|
+
((nearestRayTime == outerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume\n\
|
210
|
+
(nearestRayTime == outerConeInterval.intervals[i].stop))) // Viewer inside\n\
|
211
|
+
{\n\
|
212
|
+
// Shade outer cone\n\
|
213
|
+
vec3 normal = czm_coneNormal(outerCone, nearestPoint);\n\
|
214
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
215
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);\n\
|
216
|
+
}\n\
|
217
|
+
}\n\
|
218
|
+
\n\
|
219
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)\n\
|
220
|
+
{\n\
|
221
|
+
if (i < innerConeInterval.count &&\n\
|
222
|
+
((nearestRayTime == innerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume\n\
|
223
|
+
(nearestRayTime == innerConeInterval.intervals[i].stop))) // Viewer inside\n\
|
224
|
+
{\n\
|
225
|
+
// Shade inner cone\n\
|
226
|
+
vec3 normal = -czm_coneNormal(innerCone, nearestPoint);\n\
|
227
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
228
|
+
return getInnerColor(u_sensorRadius, nearestPoint, normal); \n\
|
229
|
+
}\n\
|
230
|
+
}\n\
|
231
|
+
\n\
|
232
|
+
if ((nearestRayTime == sphereInterval.start) || // Viewer outside sensor CSG volume\n\
|
233
|
+
(nearestRayTime == sphereInterval.stop)) // Viewer inside\n\
|
234
|
+
{\n\
|
235
|
+
// Shade top cap\n\
|
236
|
+
vec3 normal = czm_sphereNormal(sphere, nearestPoint);\n\
|
237
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
238
|
+
return getCapColor(u_sensorRadius, nearestPoint, normal); \n\
|
239
|
+
}\n\
|
240
|
+
\n\
|
241
|
+
if ((nearestRayTime == maxClockInterval.start) || // Viewer outside sensor CSG volume\n\
|
242
|
+
(nearestRayTime == maxClockInterval.stop)) // Viewer inside\n\
|
243
|
+
{\n\
|
244
|
+
// Shade top cap\n\
|
245
|
+
vec3 normal = maxClock.normal;\n\
|
246
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
247
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal); \n\
|
248
|
+
}\n\
|
249
|
+
\n\
|
250
|
+
if ((nearestRayTime == minClockInterval.start) || // Viewer outside sensor CSG volume\n\
|
251
|
+
(nearestRayTime == minClockInterval.stop)) // Viewer inside\n\
|
252
|
+
{\n\
|
253
|
+
// Shade top cap\n\
|
254
|
+
vec3 normal = minClock.normal;\n\
|
255
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
256
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal); \n\
|
257
|
+
}\n\
|
258
|
+
\n\
|
259
|
+
if ((nearestRayTime == silhouetteConeInterval.start) || // Viewer outside sensor CSG volume\n\
|
260
|
+
(nearestRayTime == silhouetteConeInterval.stop)) // Viewer inside\n\
|
261
|
+
{\n\
|
262
|
+
vec3 normal = czm_ellipsoidSilhouetteConeNormal(silhouetteCone, nearestPoint); // Normal is already inverted.\n\
|
263
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
264
|
+
return getSilhouetteColor(u_sensorRadius, nearestPoint, normal); \n\
|
265
|
+
}\n\
|
266
|
+
\n\
|
267
|
+
// Should never happen\n\
|
268
|
+
return vec4(1.0, 0.0, 0.0, 1.0);\n\
|
213
269
|
#endif\n\
|
214
270
|
}\n\
|
271
|
+
\n\
|
215
272
|
vec4 shade(\n\
|
216
|
-
czm_ray ray,\n\
|
217
|
-
float nearestRayTime,\n\
|
218
|
-
czm_sphere sphere,\n\
|
219
|
-
czm_cone outerCone,\n\
|
220
|
-
czm_cone innerCone,\n\
|
221
|
-
czm_halfspace maxClock,\n\
|
222
|
-
czm_halfspace minClock,\n\
|
223
|
-
czm_raySegment sphereInterval,\n\
|
224
|
-
czm_raySegmentCollection outerConeInterval,\n\
|
225
|
-
czm_raySegmentCollection innerConeInterval,\n\
|
226
|
-
czm_raySegment maxClockInterval,\n\
|
227
|
-
czm_raySegment minClockInterval,\n\
|
228
|
-
czm_raySegmentCollection intervals)\n\
|
273
|
+
czm_ray ray,\n\
|
274
|
+
float nearestRayTime,\n\
|
275
|
+
czm_sphere sphere,\n\
|
276
|
+
czm_cone outerCone,\n\
|
277
|
+
czm_cone innerCone,\n\
|
278
|
+
czm_halfspace maxClock,\n\
|
279
|
+
czm_halfspace minClock,\n\
|
280
|
+
czm_raySegment sphereInterval,\n\
|
281
|
+
czm_raySegmentCollection outerConeInterval,\n\
|
282
|
+
czm_raySegmentCollection innerConeInterval,\n\
|
283
|
+
czm_raySegment maxClockInterval,\n\
|
284
|
+
czm_raySegment minClockInterval,\n\
|
285
|
+
czm_raySegmentCollection intervals)\n\
|
229
286
|
{\n\
|
230
287
|
#ifdef RENDER_FOR_PICK\n\
|
231
|
-
return u_pickColor;\n\
|
288
|
+
return u_pickColor;\n\
|
232
289
|
#else\n\
|
233
|
-
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);\n\
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
(
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
(
|
251
|
-
{\n\
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
(
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
vec3 normal =
|
268
|
-
normal = mix(normal, -normal, step(normal.z, 0.0))
|
269
|
-
return
|
270
|
-
}\n\
|
271
|
-
|
272
|
-
(nearestRayTime ==
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
return
|
290
|
+
vec3 nearestPoint = czm_pointAlongRay(ray, nearestRayTime);\n\
|
291
|
+
\n\
|
292
|
+
vec3 positionToEyeEC = -ray.direction; // normalized position-to-eye vector in eye coordinates\n\
|
293
|
+
\n\
|
294
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)\n\
|
295
|
+
{\n\
|
296
|
+
if (i < outerConeInterval.count &&\n\
|
297
|
+
((nearestRayTime == outerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume\n\
|
298
|
+
(nearestRayTime == outerConeInterval.intervals[i].stop))) // Viewer inside\n\
|
299
|
+
{\n\
|
300
|
+
// Shade outer cone\n\
|
301
|
+
vec3 normal = czm_coneNormal(outerCone, nearestPoint);\n\
|
302
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
303
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal);\n\
|
304
|
+
}\n\
|
305
|
+
}\n\
|
306
|
+
\n\
|
307
|
+
for (int i = 0; i < czm_raySegmentCollectionCapacity; ++i)\n\
|
308
|
+
{\n\
|
309
|
+
if (i < innerConeInterval.count &&\n\
|
310
|
+
((nearestRayTime == innerConeInterval.intervals[i].start) || // Viewer outside sensor CSG volume\n\
|
311
|
+
(nearestRayTime == innerConeInterval.intervals[i].stop))) // Viewer inside\n\
|
312
|
+
{\n\
|
313
|
+
// Shade inner cone\n\
|
314
|
+
vec3 normal = -czm_coneNormal(innerCone, nearestPoint);\n\
|
315
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
316
|
+
return getInnerColor(u_sensorRadius, nearestPoint, normal); \n\
|
317
|
+
}\n\
|
318
|
+
}\n\
|
319
|
+
\n\
|
320
|
+
if ((nearestRayTime == sphereInterval.start) || // Viewer outside sensor CSG volume\n\
|
321
|
+
(nearestRayTime == sphereInterval.stop)) // Viewer inside\n\
|
322
|
+
{\n\
|
323
|
+
// Shade top cap\n\
|
324
|
+
vec3 normal = czm_sphereNormal(sphere, nearestPoint);\n\
|
325
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
326
|
+
return getCapColor(u_sensorRadius, nearestPoint, normal); \n\
|
327
|
+
}\n\
|
328
|
+
\n\
|
329
|
+
if ((nearestRayTime == maxClockInterval.start) || // Viewer outside sensor CSG volume\n\
|
330
|
+
(nearestRayTime == maxClockInterval.stop)) // Viewer inside\n\
|
331
|
+
{\n\
|
332
|
+
// Shade top cap\n\
|
333
|
+
vec3 normal = maxClock.normal;\n\
|
334
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
335
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal); \n\
|
336
|
+
}\n\
|
337
|
+
\n\
|
338
|
+
if ((nearestRayTime == minClockInterval.start) || // Viewer outside sensor CSG volume\n\
|
339
|
+
(nearestRayTime == minClockInterval.stop)) // Viewer inside\n\
|
340
|
+
{\n\
|
341
|
+
// Shade top cap\n\
|
342
|
+
vec3 normal = minClock.normal;\n\
|
343
|
+
normal = mix(normal, -normal, step(normal.z, 0.0)); // Normal facing viewer\n\
|
344
|
+
return getOuterColor(u_sensorRadius, nearestPoint, normal); \n\
|
345
|
+
}\n\
|
346
|
+
\n\
|
347
|
+
// Should never happen\n\
|
348
|
+
return vec4(1.0, 0.0, 0.0, 1.0);\n\
|
279
349
|
#endif\n\
|
280
350
|
}\n\
|
351
|
+
\n\
|
281
352
|
void main()\n\
|
282
353
|
{\n\
|
283
|
-
czm_ray ray = czm_ray(vec3(0.0), normalize(v_positionEC))
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
czm_raySegmentCollection
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
sensor)
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
}\n\
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
354
|
+
czm_ray ray = czm_ray(vec3(0.0), normalize(v_positionEC)); // Ray from eye to fragment in eye coordinates\n\
|
355
|
+
\n\
|
356
|
+
// Determine the sensor primitive intervals.\n\
|
357
|
+
\n\
|
358
|
+
czm_sphere sphere = czm_sphere(v_sensorVertexEC, u_sensorRadius);\n\
|
359
|
+
czm_raySegment sphereInterval = czm_raySphereIntersectionInterval(ray, sphere);\n\
|
360
|
+
if (czm_isEmpty(sphereInterval))\n\
|
361
|
+
{\n\
|
362
|
+
discard;\n\
|
363
|
+
}\n\
|
364
|
+
\n\
|
365
|
+
vec3 coneAxisEC = normalize(v_sensorAxisEC); \n\
|
366
|
+
\n\
|
367
|
+
czm_cone outerCone = czm_coneNew(v_sensorVertexEC, coneAxisEC, u_outerHalfAngle);\n\
|
368
|
+
czm_raySegmentCollection outerConeInterval = czm_rayConeIntersectionInterval(ray, outerCone);\n\
|
369
|
+
if (outerConeInterval.count == 0)\n\
|
370
|
+
{\n\
|
371
|
+
discard;\n\
|
372
|
+
}\n\
|
373
|
+
\n\
|
374
|
+
czm_cone innerCone = czm_coneNew(v_sensorVertexEC, coneAxisEC, u_innerHalfAngle);\n\
|
375
|
+
czm_raySegmentCollection innerConeInterval = czm_rayConeIntersectionInterval(ray, innerCone);\n\
|
376
|
+
\n\
|
377
|
+
// Build up the CSG representation of the sensor. \n\
|
378
|
+
czm_raySegmentCollection difference = (innerConeInterval.count == 0) ? outerConeInterval : czm_subtraction(outerConeInterval, innerConeInterval);\n\
|
379
|
+
if (difference.count == 0)\n\
|
380
|
+
{\n\
|
381
|
+
discard;\n\
|
382
|
+
}\n\
|
383
|
+
czm_raySegmentCollection capped = czm_intersection(difference, sphereInterval);\n\
|
384
|
+
if (capped.count == 0)\n\
|
385
|
+
{\n\
|
386
|
+
discard;\n\
|
387
|
+
}\n\
|
388
|
+
\n\
|
389
|
+
vec3 maxNormal = normalize((czm_modelView * vec4(-sin(u_maximumClockAngle), cos(u_maximumClockAngle), 0.0, 0.0)).xyz);\n\
|
390
|
+
czm_halfspace maxClock = czm_halfspace(v_sensorVertexEC, maxNormal);\n\
|
391
|
+
czm_raySegment maxClockInterval = czm_rayHalfspaceIntersectionInterval(ray, maxClock);\n\
|
392
|
+
\n\
|
393
|
+
vec3 minNormal = normalize((czm_modelView * vec4(sin(u_minimumClockAngle), -cos(u_minimumClockAngle), 0.0, 0.0)).xyz);\n\
|
394
|
+
czm_halfspace minClock = czm_halfspace(v_sensorVertexEC, minNormal);\n\
|
395
|
+
czm_raySegment minClockInterval = czm_rayHalfspaceIntersectionInterval(ray, minClock);\n\
|
396
|
+
\n\
|
397
|
+
czm_raySegmentCollection clockIntervals = ((u_maximumClockAngle - u_minimumClockAngle) > czm_pi)\n\
|
398
|
+
? (czm_isEmpty(maxClockInterval) \n\
|
399
|
+
? (czm_isEmpty(minClockInterval) ? czm_raySegmentCollectionNew() : czm_raySegmentCollectionNew(minClockInterval))\n\
|
400
|
+
: (czm_isEmpty(minClockInterval) ? czm_raySegmentCollectionNew(maxClockInterval) : czm_union(maxClockInterval, minClockInterval)))\n\
|
401
|
+
: ((czm_isEmpty(maxClockInterval) || czm_isEmpty(minClockInterval)) ? czm_raySegmentCollectionNew() : czm_raySegmentCollectionNew(czm_intersection(maxClockInterval, minClockInterval)));\n\
|
402
|
+
\n\
|
403
|
+
czm_raySegmentCollection sensor = (clockIntervals.count == 0) ? czm_raySegmentCollectionNew() : czm_intersection(capped, clockIntervals);\n\
|
404
|
+
if (sensor.count == 0)\n\
|
405
|
+
{\n\
|
406
|
+
discard;\n\
|
407
|
+
}\n\
|
408
|
+
\n\
|
409
|
+
// Determine the obstruction primitive intervals.\n\
|
410
|
+
\n\
|
411
|
+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();\n\
|
412
|
+
\n\
|
413
|
+
czm_ellipsoidSilhouetteCone silhouetteCone = czm_ellipsoidSilhouetteConeNew(ellipsoid, v_sensorVertexEC);\n\
|
414
|
+
czm_raySegment silhouetteConeInterval = czm_rayEllipsoidSilhouetteConeIntersectionInterval(ray, silhouetteCone);\n\
|
415
|
+
\n\
|
416
|
+
if (czm_isEmpty(silhouetteConeInterval))\n\
|
417
|
+
{\n\
|
418
|
+
gl_FragColor = shade(ray, sensor.intervals[0].start,\n\
|
419
|
+
sphere, outerCone, innerCone, maxClock, minClock,\n\
|
420
|
+
sphereInterval, outerConeInterval, innerConeInterval, maxClockInterval, minClockInterval,\n\
|
421
|
+
sensor);\n\
|
422
|
+
}\n\
|
423
|
+
else\n\
|
424
|
+
{ \n\
|
425
|
+
czm_ellipsoidSilhouetteHalfspace silhouetteHalfspace = czm_ellipsoidSilhouetteHalfspaceNew(ellipsoid, v_sensorVertexEC); \n\
|
426
|
+
czm_raySegment silhouetteHalfspaceInterval = czm_rayEllipsoidSilhouetteHalfspaceIntersectionInterval(ray, silhouetteHalfspace);\n\
|
427
|
+
\n\
|
428
|
+
// Build up the CSG representation of the composite.\n\
|
429
|
+
czm_raySegment temp = (czm_isEmpty(silhouetteHalfspaceInterval)) ? czm_emptyRaySegment : czm_intersection(silhouetteConeInterval, silhouetteHalfspaceInterval);\n\
|
430
|
+
czm_raySegmentCollection stuff = (czm_isEmpty(temp)) ? sensor : czm_subtraction(sensor, temp);\n\
|
431
|
+
if (stuff.count == 0)\n\
|
432
|
+
{\n\
|
433
|
+
discard;\n\
|
434
|
+
}\n\
|
435
|
+
\n\
|
436
|
+
czm_raySegment ellipsoidInterval = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);\n\
|
437
|
+
czm_raySegmentCollection result = (czm_isEmpty(ellipsoidInterval)) ? stuff : czm_subtraction(stuff, ellipsoidInterval);\n\
|
438
|
+
\n\
|
439
|
+
if ((result.count == 0)\n\
|
440
|
+
|| (!czm_isEmpty(ellipsoidInterval) && (result.intervals[0].start > ellipsoidInterval.start))) // Fails depth test with ellipsoid\n\
|
441
|
+
{\n\
|
442
|
+
discard;\n\
|
443
|
+
}\n\
|
444
|
+
\n\
|
445
|
+
gl_FragColor = shade(ray, result.intervals[0].start,\n\
|
446
|
+
sphere, outerCone, innerCone, maxClock, minClock,\n\
|
447
|
+
silhouetteCone, silhouetteHalfspace,\n\
|
448
|
+
sphereInterval, outerConeInterval, innerConeInterval, maxClockInterval, minClockInterval, clockIntervals,\n\
|
449
|
+
silhouetteConeInterval, silhouetteHalfspaceInterval, ellipsoidInterval,\n\
|
450
|
+
result);\n\
|
451
|
+
}\n\
|
359
452
|
}\n\
|
360
453
|
";
|
361
454
|
});
|