From febd2985569a8cfbfc505f56396973082d90c216 Mon Sep 17 00:00:00 2001 From: Andreas Engberg Date: Wed, 3 Dec 2025 10:48:30 +0100 Subject: [PATCH] Update Solarbrowsing branch to compile on latest master Also includes some additional minor changes from the original feature/solarbrowsing branch --- .gitmodules | 3 + .../parkersolarprobe/solarbrowsing.asset | 144 +++++ .../solarbrowsing/colortables/AIA-131.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-1311.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-1600.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-1700.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-171.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-193.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-211.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-304.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-335.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-4500.txt | 259 ++++++++ .../solarbrowsing/colortables/AIA-94.txt | 259 ++++++++ .../solarbrowsing/colortables/EUVI-A-171.txt | 259 ++++++++ .../parkersolarprobe/transforms.asset | 41 ++ .../download_from_helioviewer.task | 24 + include/openspace/util/timeline.h | 2 + include/openspace/util/timeline.inl | 56 ++ modules/solarbrowsing/CMakeLists.txt | 86 +++ modules/solarbrowsing/ext/openjpeg | 1 + modules/solarbrowsing/include.cmake | 4 + .../rendering/renderablesolarimagery.cpp | 355 ++++++++++ .../rendering/renderablesolarimagery.h | 122 ++++ .../renderablesolarimageryprojection.cpp | 201 ++++++ .../renderablesolarimageryprojection.h | 76 +++ .../rendering/spacecraftcameraplane.cpp | 304 +++++++++ .../rendering/spacecraftcameraplane.h | 91 +++ .../shaders/spacecraftimagefrustum_fs.glsl | 46 ++ .../shaders/spacecraftimagefrustum_vs.glsl | 55 ++ .../shaders/spacecraftimageplane_fs.glsl | 76 +++ .../shaders/spacecraftimageplane_vs.glsl | 55 ++ .../shaders/spacecraftimageprojection_fs.glsl | 114 ++++ .../shaders/spacecraftimageprojection_vs.glsl | 62 ++ modules/solarbrowsing/solarbrowsingmodule.cpp | 66 ++ modules/solarbrowsing/solarbrowsingmodule.h | 48 ++ .../tasks/helioviewerdownloadtask.cpp | 227 +++++++ .../tasks/helioviewerdownloadtask.h | 60 ++ modules/solarbrowsing/util/j2kcodec.cpp | 393 ++++++++++++ modules/solarbrowsing/util/j2kcodec.h | 88 +++ .../solarbrowsing/util/pixelbufferobject.cpp | 78 +++ .../solarbrowsing/util/pixelbufferobject.h | 59 ++ .../util/spacecraftimagerymanager.cpp | 606 ++++++++++++++++++ .../util/spacecraftimagerymanager.h | 69 ++ modules/solarbrowsing/util/structs.h | 59 ++ 44 files changed, 6779 insertions(+) create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing.asset create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-131.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1311.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1600.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1700.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-171.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-193.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-211.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-304.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-335.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-4500.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-94.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/EUVI-A-171.txt create mode 100644 data/assets/scene/solarsystem/missions/parkersolarprobe/transforms.asset create mode 100644 data/tasks/solarbrowsing/download_from_helioviewer.task create mode 100644 modules/solarbrowsing/CMakeLists.txt create mode 160000 modules/solarbrowsing/ext/openjpeg create mode 100644 modules/solarbrowsing/include.cmake create mode 100644 modules/solarbrowsing/rendering/renderablesolarimagery.cpp create mode 100644 modules/solarbrowsing/rendering/renderablesolarimagery.h create mode 100644 modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp create mode 100644 modules/solarbrowsing/rendering/renderablesolarimageryprojection.h create mode 100644 modules/solarbrowsing/rendering/spacecraftcameraplane.cpp create mode 100644 modules/solarbrowsing/rendering/spacecraftcameraplane.h create mode 100644 modules/solarbrowsing/shaders/spacecraftimagefrustum_fs.glsl create mode 100644 modules/solarbrowsing/shaders/spacecraftimagefrustum_vs.glsl create mode 100644 modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl create mode 100644 modules/solarbrowsing/shaders/spacecraftimageplane_vs.glsl create mode 100644 modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl create mode 100644 modules/solarbrowsing/shaders/spacecraftimageprojection_vs.glsl create mode 100644 modules/solarbrowsing/solarbrowsingmodule.cpp create mode 100644 modules/solarbrowsing/solarbrowsingmodule.h create mode 100644 modules/solarbrowsing/tasks/helioviewerdownloadtask.cpp create mode 100644 modules/solarbrowsing/tasks/helioviewerdownloadtask.h create mode 100644 modules/solarbrowsing/util/j2kcodec.cpp create mode 100644 modules/solarbrowsing/util/j2kcodec.h create mode 100644 modules/solarbrowsing/util/pixelbufferobject.cpp create mode 100644 modules/solarbrowsing/util/pixelbufferobject.h create mode 100644 modules/solarbrowsing/util/spacecraftimagerymanager.cpp create mode 100644 modules/solarbrowsing/util/spacecraftimagerymanager.h create mode 100644 modules/solarbrowsing/util/structs.h diff --git a/.gitmodules b/.gitmodules index 4fb7924109..7be53ba79f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -53,3 +53,6 @@ [submodule "support/cmake/common-compile-settings"] path = support/cmake/common-compile-settings url = https://github.com/OpenSpace/common-compile-settings +[submodule "modules/solarbrowsing/ext/openjpeg"] + path = modules/solarbrowsing/ext/openjpeg + url = https://github.com/uclouvain/openjpeg.git diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing.asset b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing.asset new file mode 100644 index 0000000000..ca20c8c029 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing.asset @@ -0,0 +1,144 @@ +-- local assetHelper = asset.require('util/asset_helper') +local sunTransforms = asset.require('scene/solarsystem/sun/transforms') +local earthTransforms = asset.require('scene/solarsystem/planets/earth/transforms') + +local SdoTrail = { + Identifier = "SolarImagery_SDO_Trail", + Parent = earthTransforms.EarthInertial.Identifier, + Renderable = { + Type = "RenderableTrailOrbit", + Translation = { + Type = "SpiceTranslation", + Frame = "J2000", + Target = "-136395", + Observer = "EARTH", + }, + Color = { 1.0, 1.0, 1.0 }, + Period = 0.997319, + Resolution = 1000 + }, + GUI = { + Name = "Sdo Trail", + Path = "/Solar System/Solar Imagery" + } +} + +-- Translate in Earth's coordinate system from earth's position +local Sdo = { + Identifier = "Sdo", + Parent = earthTransforms.EarthInertial.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "-136395", + Observer = "EARTH", + Frame = "J2000" + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = "ECLIPJ2000", + DestinationFrame = "J2000", + } + }, + GUI = { + Name = "Sdo", + Path = "/Solar System/Solar Imagery" + } +} + +local StereoA = { + Identifier = "StereoA_Position", + Parent = sunTransforms.SolarSystemBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "-234", + Observer = "SSB", + Frame = "Galactic" + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = "ECLIPJ2000", + DestinationFrame = "GALACTIC", + }, + }, + GUI = { + Name = "Stereo A", + Path = "/Solar System/Solar Imagery" + } +} + +local StereoImagery = { + Identifier = "SolarImagery_STEREO-A_Image_EUV", + Parent = StereoA.Identifier, + Renderable = { + -- Resolution of imagery, will be moved to metadata later + Type = "RenderableSolarImagery", + RootPath = asset.resource("solarbrowsing/imagedata/stereo-a_euvi-171"), + TransferfunctionPath = asset.resource("solarbrowsing/colortables") + }, + GUI = { + Name = "EUV-I-A Imagery", + Path = "/Solar System/Solar Imagery" + } +} + +local SdoImagery = { + Identifier = "SolarImagery_SDO_Image_AIA", + Parent = Sdo.Identifier, + Renderable = { + -- Resolution of imagery, will be moved to metadata later + Type = "RenderableSolarImagery", + RootPath = asset.resource("solarbrowsing/imagedata/sdo_aia-171"), + TransferfunctionPath = asset.resource("solarbrowsing/colortables") + }, + GUI = { + Name = "SDO Imagery", + Path = "/Solar System/Solar Imagery" + } +} + +local SunProjection = { + Identifier = "SunProjection", + Parent = sunTransforms.SunIAU.Identifier, + Dependencies = { + "SolarImagery_SDO_Image_AIA" + }, + Renderable = { + -- This is a really bad name + Type = "RenderableSolarImageryProjection", + DependentNodes = { + "SolarImagery_SDO_Image_AIA", + "SolarImagery_STEREO-A_Image_EUV" + } + }, + GUI = { + Name = "Sun Projection", + Path = "/Solar System/Imagery" + } +} + +-- stereo_kernels_bsp = asset.resource('kernels/STEREO-A_merged.bsp') + + +asset.onInitialize(function () + -- openspace.spice.loadKernel(stereo_kernels_bsp) + + openspace.addSceneGraphNode(SdoTrail) + openspace.addSceneGraphNode(Sdo) + openspace.addSceneGraphNode(SdoImagery) + openspace.addSceneGraphNode(StereoA) + openspace.addSceneGraphNode(StereoImagery) + openspace.addSceneGraphNode(SunProjection) +end +) + +asset.onDeinitialize(function () + openspace.removeSceneGraphNode(SunProjection) + openspace.removeSceneGraphNode(SdoTrail) + openspace.removeSceneGraphNode(SdoImagery) + openspace.removeSceneGraphNode(Sdo) + openspace.removeSceneGraphNode(StereoImagery) + openspace.removeSceneGraphNode(StereoA) +end +) \ No newline at end of file diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-131.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-131.txt new file mode 100644 index 0000000000..c13a34eccf --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-131.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 0 1 1 255 +mappingkey 0.00784313771874 0 2 2 255 +mappingkey 0.0117647061124 0 4 4 255 +mappingkey 0.0156862754375 0 5 5 255 +mappingkey 0.0196078438312 0 7 7 255 +mappingkey 0.0235294122249 0 8 8 255 +mappingkey 0.0274509806186 0 10 10 255 +mappingkey 0.0313725508749 0 11 11 255 +mappingkey 0.0352941192687 0 13 13 255 +mappingkey 0.0392156876624 0 14 14 255 +mappingkey 0.0431372560561 0 15 15 255 +mappingkey 0.0470588244498 0 17 17 255 +mappingkey 0.0509803928435 0 18 18 255 +mappingkey 0.0549019612372 0 20 20 255 +mappingkey 0.0588235296309 0 21 21 255 +mappingkey 0.0627451017499 0 23 23 255 +mappingkey 0.0666666701436 0 24 24 255 +mappingkey 0.0705882385373 0 26 26 255 +mappingkey 0.074509806931 0 27 27 255 +mappingkey 0.0784313753247 0 28 28 255 +mappingkey 0.0823529437184 0 30 30 255 +mappingkey 0.0862745121121 0 31 31 255 +mappingkey 0.0901960805058 0 33 33 255 +mappingkey 0.0941176488996 0 34 34 255 +mappingkey 0.0980392172933 0 36 36 255 +mappingkey 0.101960785687 0 37 37 255 +mappingkey 0.105882354081 0 39 39 255 +mappingkey 0.109803922474 0 40 40 255 +mappingkey 0.113725490868 0 42 42 255 +mappingkey 0.117647059262 0 43 43 255 +mappingkey 0.121568627656 0 44 44 255 +mappingkey 0.1254902035 0 46 46 255 +mappingkey 0.129411771894 0 47 47 255 +mappingkey 0.133333340287 0 49 49 255 +mappingkey 0.137254908681 0 50 50 255 +mappingkey 0.141176477075 0 52 52 255 +mappingkey 0.145098045468 0 53 53 255 +mappingkey 0.149019613862 0 55 55 255 +mappingkey 0.152941182256 0 56 56 255 +mappingkey 0.156862750649 0 57 57 255 +mappingkey 0.160784319043 0 59 59 255 +mappingkey 0.164705887437 0 60 60 255 +mappingkey 0.168627455831 0 62 62 255 +mappingkey 0.172549024224 0 63 63 255 +mappingkey 0.176470592618 0 65 65 255 +mappingkey 0.180392161012 0 66 66 255 +mappingkey 0.184313729405 0 68 68 255 +mappingkey 0.188235297799 0 69 69 255 +mappingkey 0.192156866193 0 70 70 255 +mappingkey 0.196078434587 0 72 72 255 +mappingkey 0.20000000298 0 73 73 255 +mappingkey 0.203921571374 0 75 75 255 +mappingkey 0.207843139768 0 76 76 255 +mappingkey 0.211764708161 0 78 78 255 +mappingkey 0.215686276555 0 79 79 255 +mappingkey 0.219607844949 0 81 81 255 +mappingkey 0.223529413342 0 82 82 255 +mappingkey 0.227450981736 0 84 84 255 +mappingkey 0.23137255013 0 85 85 255 +mappingkey 0.235294118524 0 86 86 255 +mappingkey 0.239215686917 0 88 88 255 +mappingkey 0.243137255311 0 89 89 255 +mappingkey 0.247058823705 0 91 91 255 +mappingkey 0.250980407 0 92 92 255 +mappingkey 0.254901975393 0 94 94 255 +mappingkey 0.258823543787 0 95 95 255 +mappingkey 0.262745112181 0 97 97 255 +mappingkey 0.266666680574 0 98 98 255 +mappingkey 0.270588248968 0 99 99 255 +mappingkey 0.274509817362 0 101 101 255 +mappingkey 0.278431385756 0 102 102 255 +mappingkey 0.282352954149 0 104 104 255 +mappingkey 0.286274522543 0 105 105 255 +mappingkey 0.290196090937 0 107 107 255 +mappingkey 0.29411765933 0 108 108 255 +mappingkey 0.298039227724 0 110 110 255 +mappingkey 0.301960796118 0 111 111 255 +mappingkey 0.305882364511 0 113 113 255 +mappingkey 0.309803932905 0 114 114 255 +mappingkey 0.313725501299 0 115 115 255 +mappingkey 0.317647069693 0 117 117 255 +mappingkey 0.321568638086 0 118 118 255 +mappingkey 0.32549020648 0 120 120 255 +mappingkey 0.329411774874 0 121 121 255 +mappingkey 0.333333343267 0 123 123 255 +mappingkey 0.337254911661 0 124 124 255 +mappingkey 0.341176480055 0 126 126 255 +mappingkey 0.345098048449 0 127 127 255 +mappingkey 0.349019616842 0 128 128 255 +mappingkey 0.352941185236 0 130 130 255 +mappingkey 0.35686275363 0 131 131 255 +mappingkey 0.360784322023 0 133 133 255 +mappingkey 0.364705890417 0 134 134 255 +mappingkey 0.368627458811 0 136 136 255 +mappingkey 0.372549027205 0 137 137 255 +mappingkey 0.376470595598 0 139 139 255 +mappingkey 0.380392163992 0 140 140 255 +mappingkey 0.384313732386 0 141 141 255 +mappingkey 0.388235300779 0 143 143 255 +mappingkey 0.392156869173 0 144 144 255 +mappingkey 0.396078437567 0 146 146 255 +mappingkey 0.40000000596 0 147 147 255 +mappingkey 0.403921574354 0 149 149 255 +mappingkey 0.407843142748 0 150 150 255 +mappingkey 0.411764711142 0 152 152 255 +mappingkey 0.415686279535 0 153 153 255 +mappingkey 0.419607847929 0 155 155 255 +mappingkey 0.423529416323 0 156 156 255 +mappingkey 0.427450984716 0 157 157 255 +mappingkey 0.43137255311 0 159 159 255 +mappingkey 0.435294121504 0 160 160 255 +mappingkey 0.439215689898 0 162 162 255 +mappingkey 0.443137258291 0 163 163 255 +mappingkey 0.447058826685 0 165 165 255 +mappingkey 0.450980395079 0 166 166 255 +mappingkey 0.454901963472 0 168 168 255 +mappingkey 0.458823531866 0 169 169 255 +mappingkey 0.46274510026 0 170 170 255 +mappingkey 0.466666668653 0 172 172 255 +mappingkey 0.470588237047 0 173 173 255 +mappingkey 0.474509805441 1 175 175 255 +mappingkey 0.478431373835 3 176 176 255 +mappingkey 0.482352942228 5 178 178 255 +mappingkey 0.486274510622 7 179 179 255 +mappingkey 0.490196079016 9 181 181 255 +mappingkey 0.494117647409 11 182 182 255 +mappingkey 0.498039215803 13 184 184 255 +mappingkey 0.501960813999 15 185 185 255 +mappingkey 0.505882382393 17 186 186 255 +mappingkey 0.509803950787 18 188 188 255 +mappingkey 0.51372551918 20 189 189 255 +mappingkey 0.517647087574 22 191 191 255 +mappingkey 0.521568655968 24 192 192 255 +mappingkey 0.525490224361 26 194 194 255 +mappingkey 0.529411792755 28 195 195 255 +mappingkey 0.533333361149 30 197 197 255 +mappingkey 0.537254929543 32 198 198 255 +mappingkey 0.541176497936 34 199 199 255 +mappingkey 0.54509806633 35 201 201 255 +mappingkey 0.549019634724 37 202 202 255 +mappingkey 0.552941203117 39 204 204 255 +mappingkey 0.556862771511 41 205 205 255 +mappingkey 0.560784339905 43 207 207 255 +mappingkey 0.564705908298 45 208 208 255 +mappingkey 0.568627476692 47 210 210 255 +mappingkey 0.572549045086 49 211 211 255 +mappingkey 0.57647061348 51 212 212 255 +mappingkey 0.580392181873 52 214 214 255 +mappingkey 0.584313750267 54 215 215 255 +mappingkey 0.588235318661 56 217 217 255 +mappingkey 0.592156887054 58 218 218 255 +mappingkey 0.596078455448 60 220 220 255 +mappingkey 0.600000023842 62 221 221 255 +mappingkey 0.603921592236 64 223 223 255 +mappingkey 0.607843160629 66 224 224 255 +mappingkey 0.611764729023 68 226 226 255 +mappingkey 0.615686297417 69 227 227 255 +mappingkey 0.61960786581 71 228 228 255 +mappingkey 0.623529434204 73 230 230 255 +mappingkey 0.627451002598 75 231 231 255 +mappingkey 0.631372570992 77 233 233 255 +mappingkey 0.635294139385 79 234 234 255 +mappingkey 0.639215707779 81 236 236 255 +mappingkey 0.643137276173 83 237 237 255 +mappingkey 0.647058844566 85 239 239 255 +mappingkey 0.65098041296 86 240 240 255 +mappingkey 0.654901981354 88 241 241 255 +mappingkey 0.658823549747 90 243 243 255 +mappingkey 0.662745118141 92 244 244 255 +mappingkey 0.666666686535 94 246 246 255 +mappingkey 0.670588254929 96 247 247 255 +mappingkey 0.674509823322 98 249 249 255 +mappingkey 0.678431391716 100 250 250 255 +mappingkey 0.68235296011 102 252 252 255 +mappingkey 0.686274528503 103 253 253 255 +mappingkey 0.690196096897 105 255 255 255 +mappingkey 0.694117665291 107 255 255 255 +mappingkey 0.698039233685 109 255 255 255 +mappingkey 0.701960802078 111 255 255 255 +mappingkey 0.705882370472 113 255 255 255 +mappingkey 0.709803938866 115 255 255 255 +mappingkey 0.713725507259 117 255 255 255 +mappingkey 0.717647075653 119 255 255 255 +mappingkey 0.721568644047 120 255 255 255 +mappingkey 0.72549021244 122 255 255 255 +mappingkey 0.729411780834 124 255 255 255 +mappingkey 0.733333349228 126 255 255 255 +mappingkey 0.737254917622 128 255 255 255 +mappingkey 0.741176486015 130 255 255 255 +mappingkey 0.745098054409 132 255 255 255 +mappingkey 0.749019622803 134 255 255 255 +mappingkey 0.752941191196 136 255 255 255 +mappingkey 0.75686275959 137 255 255 255 +mappingkey 0.760784327984 139 255 255 255 +mappingkey 0.764705896378 141 255 255 255 +mappingkey 0.768627464771 143 255 255 255 +mappingkey 0.772549033165 145 255 255 255 +mappingkey 0.776470601559 147 255 255 255 +mappingkey 0.780392169952 149 255 255 255 +mappingkey 0.784313738346 151 255 255 255 +mappingkey 0.78823530674 153 255 255 255 +mappingkey 0.792156875134 154 255 255 255 +mappingkey 0.796078443527 156 255 255 255 +mappingkey 0.800000011921 158 255 255 255 +mappingkey 0.803921580315 160 255 255 255 +mappingkey 0.807843148708 162 255 255 255 +mappingkey 0.811764717102 164 255 255 255 +mappingkey 0.815686285496 166 255 255 255 +mappingkey 0.819607853889 168 255 255 255 +mappingkey 0.823529422283 170 255 255 255 +mappingkey 0.827450990677 171 255 255 255 +mappingkey 0.831372559071 173 255 255 255 +mappingkey 0.835294127464 175 255 255 255 +mappingkey 0.839215695858 177 255 255 255 +mappingkey 0.843137264252 179 255 255 255 +mappingkey 0.847058832645 181 255 255 255 +mappingkey 0.850980401039 183 255 255 255 +mappingkey 0.854901969433 185 255 255 255 +mappingkey 0.858823537827 187 255 255 255 +mappingkey 0.86274510622 188 255 255 255 +mappingkey 0.866666674614 190 255 255 255 +mappingkey 0.870588243008 192 255 255 255 +mappingkey 0.874509811401 194 255 255 255 +mappingkey 0.878431379795 196 255 255 255 +mappingkey 0.882352948189 198 255 255 255 +mappingkey 0.886274516582 200 255 255 255 +mappingkey 0.890196084976 202 255 255 255 +mappingkey 0.89411765337 204 255 255 255 +mappingkey 0.898039221764 205 255 255 255 +mappingkey 0.901960790157 207 255 255 255 +mappingkey 0.905882358551 209 255 255 255 +mappingkey 0.909803926945 211 255 255 255 +mappingkey 0.913725495338 213 255 255 255 +mappingkey 0.917647063732 215 255 255 255 +mappingkey 0.921568632126 217 255 255 255 +mappingkey 0.92549020052 219 255 255 255 +mappingkey 0.929411768913 221 255 255 255 +mappingkey 0.933333337307 222 255 255 255 +mappingkey 0.937254905701 224 255 255 255 +mappingkey 0.941176474094 226 255 255 255 +mappingkey 0.945098042488 228 255 255 255 +mappingkey 0.949019610882 230 255 255 255 +mappingkey 0.952941179276 232 255 255 255 +mappingkey 0.956862747669 234 255 255 255 +mappingkey 0.960784316063 236 255 255 255 +mappingkey 0.964705884457 238 255 255 255 +mappingkey 0.96862745285 239 255 255 255 +mappingkey 0.972549021244 241 255 255 255 +mappingkey 0.976470589638 243 255 255 255 +mappingkey 0.980392158031 245 255 255 255 +mappingkey 0.984313726425 247 255 255 255 +mappingkey 0.988235294819 249 255 255 255 +mappingkey 0.992156863213 251 255 255 255 +mappingkey 0.996078431606 253 255 255 255 +mappingkey 1.0 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1311.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1311.txt new file mode 100644 index 0000000000..f5ebfb26e4 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1311.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 0 1 1 255 +mappingkey 0.00784314 0 2 2 255 +mappingkey 0.0117647 0 4 4 255 +mappingkey 0.0156863 0 5 5 255 +mappingkey 0.0196078 0 7 7 255 +mappingkey 0.0235294 0 8 8 255 +mappingkey 0.027451 0 10 10 255 +mappingkey 0.0313726 0 11 11 255 +mappingkey 0.0352941 0 13 13 255 +mappingkey 0.0392157 0 14 14 255 +mappingkey 0.0431373 0 15 15 255 +mappingkey 0.0470588 0 17 17 255 +mappingkey 0.0509804 0 18 18 255 +mappingkey 0.054902 0 20 20 255 +mappingkey 0.0588235 0 21 21 255 +mappingkey 0.0627451 0 23 23 255 +mappingkey 0.0666667 0 24 24 255 +mappingkey 0.0705882 0 26 26 255 +mappingkey 0.0745098 0 27 27 255 +mappingkey 0.0784314 0 28 28 255 +mappingkey 0.0823529 0 30 30 255 +mappingkey 0.0862745 0 31 31 255 +mappingkey 0.0901961 0 33 33 255 +mappingkey 0.0941176 0 34 34 255 +mappingkey 0.0980392 0 36 36 255 +mappingkey 0.101961 0 37 37 255 +mappingkey 0.105882 0 39 39 255 +mappingkey 0.109804 0 40 40 255 +mappingkey 0.113725 0 42 42 255 +mappingkey 0.117647 0 43 43 255 +mappingkey 0.121569 0 44 44 255 +mappingkey 0.12549 0 46 46 255 +mappingkey 0.129412 0 47 47 255 +mappingkey 0.133333 0 49 49 255 +mappingkey 0.137255 0 50 50 255 +mappingkey 0.141176 0 52 52 255 +mappingkey 0.145098 0 53 53 255 +mappingkey 0.14902 0 55 55 255 +mappingkey 0.152941 0 56 56 255 +mappingkey 0.156863 0 57 57 255 +mappingkey 0.160784 0 59 59 255 +mappingkey 0.164706 0 60 60 255 +mappingkey 0.168627 0 62 62 255 +mappingkey 0.172549 0 63 63 255 +mappingkey 0.176471 0 65 65 255 +mappingkey 0.180392 0 66 66 255 +mappingkey 0.184314 0 68 68 255 +mappingkey 0.188235 0 69 69 255 +mappingkey 0.192157 0 70 70 255 +mappingkey 0.196078 0 72 72 255 +mappingkey 0.2 0 73 73 255 +mappingkey 0.203922 0 75 75 255 +mappingkey 0.207843 0 76 76 255 +mappingkey 0.211765 0 78 78 255 +mappingkey 0.215686 0 79 79 255 +mappingkey 0.219608 0 81 81 255 +mappingkey 0.223529 0 82 82 255 +mappingkey 0.227451 0 84 84 255 +mappingkey 0.231373 0 85 85 255 +mappingkey 0.235294 0 86 86 255 +mappingkey 0.239216 0 88 88 255 +mappingkey 0.243137 0 89 89 255 +mappingkey 0.247059 0 91 91 255 +mappingkey 0.25098 0 92 92 255 +mappingkey 0.254902 0 94 94 255 +mappingkey 0.258824 0 95 95 255 +mappingkey 0.262745 0 97 97 255 +mappingkey 0.266667 0 98 98 255 +mappingkey 0.270588 0 99 99 255 +mappingkey 0.27451 0 101 101 255 +mappingkey 0.278431 0 102 102 255 +mappingkey 0.282353 0 104 104 255 +mappingkey 0.286275 0 105 105 255 +mappingkey 0.290196 0 107 107 255 +mappingkey 0.294118 0 108 108 255 +mappingkey 0.298039 0 110 110 255 +mappingkey 0.301961 0 111 111 255 +mappingkey 0.305882 0 113 113 255 +mappingkey 0.309804 0 114 114 255 +mappingkey 0.313726 0 115 115 255 +mappingkey 0.317647 0 117 117 255 +mappingkey 0.321569 0 118 118 255 +mappingkey 0.32549 0 120 120 255 +mappingkey 0.329412 0 121 121 255 +mappingkey 0.333333 0 123 123 255 +mappingkey 0.337255 0 124 124 255 +mappingkey 0.341176 0 126 126 255 +mappingkey 0.345098 0 127 127 255 +mappingkey 0.34902 0 128 128 255 +mappingkey 0.352941 0 130 130 255 +mappingkey 0.356863 0 131 131 255 +mappingkey 0.360784 0 133 133 255 +mappingkey 0.364706 0 134 134 255 +mappingkey 0.368627 0 136 136 255 +mappingkey 0.372549 0 137 137 255 +mappingkey 0.376471 0 139 139 255 +mappingkey 0.380392 0 140 140 255 +mappingkey 0.384314 0 141 141 255 +mappingkey 0.388235 0 143 143 255 +mappingkey 0.392157 0 144 144 255 +mappingkey 0.396078 0 146 146 255 +mappingkey 0.4 0 147 147 255 +mappingkey 0.403922 0 149 149 255 +mappingkey 0.407843 0 150 150 255 +mappingkey 0.411765 0 152 152 255 +mappingkey 0.415686 0 153 153 255 +mappingkey 0.419608 0 155 155 255 +mappingkey 0.423529 0 156 156 255 +mappingkey 0.427451 0 157 157 255 +mappingkey 0.431373 0 159 159 255 +mappingkey 0.435294 0 160 160 255 +mappingkey 0.439216 0 162 162 255 +mappingkey 0.443137 0 163 163 255 +mappingkey 0.447059 0 165 165 255 +mappingkey 0.45098 0 166 166 255 +mappingkey 0.454902 0 168 168 255 +mappingkey 0.458824 0 169 169 255 +mappingkey 0.462745 0 170 170 255 +mappingkey 0.466667 0 172 172 255 +mappingkey 0.470588 0 173 173 255 +mappingkey 0.47451 1 175 175 255 +mappingkey 0.478431 3 176 176 255 +mappingkey 0.482353 5 178 178 255 +mappingkey 0.486275 7 179 179 255 +mappingkey 0.490196 9 181 181 255 +mappingkey 0.494118 11 182 182 255 +mappingkey 0.498039 13 184 184 255 +mappingkey 0.501961 15 185 185 255 +mappingkey 0.505882 17 186 186 255 +mappingkey 0.509804 18 188 188 255 +mappingkey 0.513726 20 189 189 255 +mappingkey 0.517647 22 191 191 255 +mappingkey 0.521569 24 192 192 255 +mappingkey 0.52549 26 194 194 255 +mappingkey 0.529412 28 195 195 255 +mappingkey 0.533333 30 197 197 255 +mappingkey 0.537255 32 198 198 255 +mappingkey 0.541176 34 199 199 255 +mappingkey 0.545098 35 201 201 255 +mappingkey 0.54902 37 202 202 255 +mappingkey 0.552941 39 204 204 255 +mappingkey 0.556863 41 205 205 255 +mappingkey 0.560784 43 207 207 255 +mappingkey 0.564706 45 208 208 255 +mappingkey 0.568627 47 210 210 255 +mappingkey 0.572549 49 211 211 255 +mappingkey 0.576471 51 212 212 255 +mappingkey 0.580392 52 214 214 255 +mappingkey 0.584314 54 215 215 255 +mappingkey 0.588235 56 217 217 255 +mappingkey 0.592157 58 218 218 255 +mappingkey 0.596078 60 220 220 255 +mappingkey 0.6 62 221 221 255 +mappingkey 0.603922 64 223 223 255 +mappingkey 0.607843 66 224 224 255 +mappingkey 0.611765 68 226 226 255 +mappingkey 0.615686 69 227 227 255 +mappingkey 0.619608 71 228 228 255 +mappingkey 0.623529 73 230 230 255 +mappingkey 0.627451 75 231 231 255 +mappingkey 0.631373 77 233 233 255 +mappingkey 0.635294 79 234 234 255 +mappingkey 0.639216 81 236 236 255 +mappingkey 0.643137 83 237 237 255 +mappingkey 0.647059 85 239 239 255 +mappingkey 0.65098 86 240 240 255 +mappingkey 0.654902 88 241 241 255 +mappingkey 0.658824 90 243 243 255 +mappingkey 0.662745 92 244 244 255 +mappingkey 0.666667 94 246 246 255 +mappingkey 0.670588 96 247 247 255 +mappingkey 0.67451 98 249 249 255 +mappingkey 0.678431 100 250 250 255 +mappingkey 0.682353 102 252 252 255 +mappingkey 0.686275 103 253 253 255 +mappingkey 0.690196 105 255 255 255 +mappingkey 0.694118 107 255 255 255 +mappingkey 0.698039 109 255 255 255 +mappingkey 0.701961 111 255 255 255 +mappingkey 0.705882 113 255 255 255 +mappingkey 0.709804 115 255 255 255 +mappingkey 0.713726 117 255 255 255 +mappingkey 0.717647 119 255 255 255 +mappingkey 0.721569 120 255 255 255 +mappingkey 0.72549 122 255 255 255 +mappingkey 0.729412 124 255 255 255 +mappingkey 0.733333 126 255 255 255 +mappingkey 0.737255 128 255 255 255 +mappingkey 0.741176 130 255 255 255 +mappingkey 0.745098 132 255 255 255 +mappingkey 0.74902 134 255 255 255 +mappingkey 0.752941 136 255 255 255 +mappingkey 0.756863 137 255 255 255 +mappingkey 0.760784 139 255 255 255 +mappingkey 0.764706 141 255 255 255 +mappingkey 0.768627 143 255 255 255 +mappingkey 0.772549 145 255 255 255 +mappingkey 0.776471 147 255 255 255 +mappingkey 0.780392 149 255 255 255 +mappingkey 0.784314 151 255 255 255 +mappingkey 0.788235 153 255 255 255 +mappingkey 0.792157 154 255 255 255 +mappingkey 0.796078 156 255 255 255 +mappingkey 0.8 158 255 255 255 +mappingkey 0.803922 160 255 255 255 +mappingkey 0.807843 162 255 255 255 +mappingkey 0.811765 164 255 255 255 +mappingkey 0.815686 166 255 255 255 +mappingkey 0.819608 168 255 255 255 +mappingkey 0.823529 170 255 255 255 +mappingkey 0.827451 171 255 255 255 +mappingkey 0.831373 173 255 255 255 +mappingkey 0.835294 175 255 255 255 +mappingkey 0.839216 177 255 255 255 +mappingkey 0.843137 179 255 255 255 +mappingkey 0.847059 181 255 255 255 +mappingkey 0.85098 183 255 255 255 +mappingkey 0.854902 185 255 255 255 +mappingkey 0.858824 187 255 255 255 +mappingkey 0.862745 188 255 255 255 +mappingkey 0.866667 190 255 255 255 +mappingkey 0.870588 192 255 255 255 +mappingkey 0.87451 194 255 255 255 +mappingkey 0.878431 196 255 255 255 +mappingkey 0.882353 198 255 255 255 +mappingkey 0.886275 200 255 255 255 +mappingkey 0.890196 202 255 255 255 +mappingkey 0.894118 204 255 255 255 +mappingkey 0.898039 205 255 255 255 +mappingkey 0.901961 207 255 255 255 +mappingkey 0.905882 209 255 255 255 +mappingkey 0.909804 211 255 255 255 +mappingkey 0.913725 213 255 255 255 +mappingkey 0.917647 215 255 255 255 +mappingkey 0.921569 217 255 255 255 +mappingkey 0.92549 219 255 255 255 +mappingkey 0.929412 221 255 255 255 +mappingkey 0.933333 222 255 255 255 +mappingkey 0.937255 224 255 255 255 +mappingkey 0.941176 226 255 255 255 +mappingkey 0.945098 228 255 255 255 +mappingkey 0.94902 230 255 255 255 +mappingkey 0.952941 232 255 255 255 +mappingkey 0.956863 234 255 255 255 +mappingkey 0.960784 236 255 255 255 +mappingkey 0.964706 238 255 255 255 +mappingkey 0.968627 239 255 255 255 +mappingkey 0.972549 241 255 255 255 +mappingkey 0.976471 243 255 255 255 +mappingkey 0.980392 245 255 255 255 +mappingkey 0.984314 247 255 255 255 +mappingkey 0.988235 249 255 255 255 +mappingkey 0.992157 251 255 255 255 +mappingkey 0.996078 253 255 255 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1600.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1600.txt new file mode 100644 index 0000000000..144b3d85b2 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1600.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 10 10 0 255 +mappingkey 0.00784314 14 14 0 255 +mappingkey 0.0117647 18 18 0 255 +mappingkey 0.0156863 20 20 0 255 +mappingkey 0.0196078 23 23 0 255 +mappingkey 0.0235294 26 26 0 255 +mappingkey 0.027451 28 28 0 255 +mappingkey 0.0313726 30 30 0 255 +mappingkey 0.0352941 31 31 0 255 +mappingkey 0.0392157 33 33 0 255 +mappingkey 0.0431373 34 34 0 255 +mappingkey 0.0470588 36 36 0 255 +mappingkey 0.0509804 38 38 0 255 +mappingkey 0.054902 39 39 0 255 +mappingkey 0.0588235 40 40 0 255 +mappingkey 0.0627451 42 42 1 255 +mappingkey 0.0666667 43 43 1 255 +mappingkey 0.0705882 45 45 1 255 +mappingkey 0.0745098 46 46 1 255 +mappingkey 0.0784314 47 47 1 255 +mappingkey 0.0823529 49 49 1 255 +mappingkey 0.0862745 49 49 1 255 +mappingkey 0.0901961 51 51 2 255 +mappingkey 0.0941176 52 52 2 255 +mappingkey 0.0980392 53 53 2 255 +mappingkey 0.101961 54 54 2 255 +mappingkey 0.105882 55 55 2 255 +mappingkey 0.109804 57 57 3 255 +mappingkey 0.113725 57 57 3 255 +mappingkey 0.117647 59 59 3 255 +mappingkey 0.121569 59 59 3 255 +mappingkey 0.12549 61 61 4 255 +mappingkey 0.129412 62 62 4 255 +mappingkey 0.133333 63 63 4 255 +mappingkey 0.137255 64 64 4 255 +mappingkey 0.141176 65 65 5 255 +mappingkey 0.145098 66 66 5 255 +mappingkey 0.14902 67 67 5 255 +mappingkey 0.152941 67 67 5 255 +mappingkey 0.156863 68 68 6 255 +mappingkey 0.160784 70 70 6 255 +mappingkey 0.164706 70 70 6 255 +mappingkey 0.168627 71 71 7 255 +mappingkey 0.172549 72 72 7 255 +mappingkey 0.176471 73 73 7 255 +mappingkey 0.180392 74 74 8 255 +mappingkey 0.184314 75 75 8 255 +mappingkey 0.188235 76 76 9 255 +mappingkey 0.192157 77 77 9 255 +mappingkey 0.196078 77 77 9 255 +mappingkey 0.2 79 79 10 255 +mappingkey 0.203922 80 80 10 255 +mappingkey 0.207843 81 81 11 255 +mappingkey 0.211765 81 81 11 255 +mappingkey 0.215686 82 82 11 255 +mappingkey 0.219608 83 83 12 255 +mappingkey 0.223529 84 84 12 255 +mappingkey 0.227451 85 85 13 255 +mappingkey 0.231373 85 85 13 255 +mappingkey 0.235294 86 86 14 255 +mappingkey 0.239216 87 87 14 255 +mappingkey 0.243137 88 88 15 255 +mappingkey 0.247059 89 89 15 255 +mappingkey 0.25098 90 90 16 255 +mappingkey 0.254902 90 90 16 255 +mappingkey 0.258824 91 91 17 255 +mappingkey 0.262745 92 92 17 255 +mappingkey 0.266667 93 93 18 255 +mappingkey 0.270588 94 94 18 255 +mappingkey 0.27451 95 95 19 255 +mappingkey 0.278431 95 95 19 255 +mappingkey 0.282353 96 96 20 255 +mappingkey 0.286275 97 97 20 255 +mappingkey 0.290196 98 98 21 255 +mappingkey 0.294118 99 99 22 255 +mappingkey 0.298039 100 100 22 255 +mappingkey 0.301961 101 101 23 255 +mappingkey 0.305882 101 101 23 255 +mappingkey 0.309804 102 102 24 255 +mappingkey 0.313726 103 103 25 255 +mappingkey 0.317647 103 103 25 255 +mappingkey 0.321569 104 104 26 255 +mappingkey 0.32549 105 105 27 255 +mappingkey 0.329412 106 106 27 255 +mappingkey 0.333333 107 107 28 255 +mappingkey 0.337255 108 108 29 255 +mappingkey 0.341176 108 108 29 255 +mappingkey 0.345098 109 109 30 255 +mappingkey 0.34902 110 110 31 255 +mappingkey 0.352941 111 111 31 255 +mappingkey 0.356863 112 112 32 255 +mappingkey 0.360784 113 113 33 255 +mappingkey 0.364706 113 113 33 255 +mappingkey 0.368627 114 114 34 255 +mappingkey 0.372549 115 115 35 255 +mappingkey 0.376471 116 116 36 255 +mappingkey 0.380392 116 116 36 255 +mappingkey 0.384314 117 117 37 255 +mappingkey 0.388235 118 118 38 255 +mappingkey 0.392157 119 119 39 255 +mappingkey 0.396078 120 120 40 255 +mappingkey 0.4 120 120 40 255 +mappingkey 0.403922 121 121 41 255 +mappingkey 0.407843 122 122 42 255 +mappingkey 0.411765 123 123 43 255 +mappingkey 0.415686 124 124 44 255 +mappingkey 0.419608 124 124 44 255 +mappingkey 0.423529 125 125 45 255 +mappingkey 0.427451 126 126 46 255 +mappingkey 0.431373 127 127 47 255 +mappingkey 0.435294 128 128 48 255 +mappingkey 0.439216 128 128 49 255 +mappingkey 0.443137 129 129 50 255 +mappingkey 0.447059 130 130 50 255 +mappingkey 0.45098 131 131 51 255 +mappingkey 0.454902 131 131 52 255 +mappingkey 0.458824 132 132 53 255 +mappingkey 0.462745 133 133 54 255 +mappingkey 0.466667 134 134 55 255 +mappingkey 0.470588 134 134 56 255 +mappingkey 0.47451 135 135 57 255 +mappingkey 0.478431 136 136 58 255 +mappingkey 0.482353 137 137 59 255 +mappingkey 0.486275 138 138 60 255 +mappingkey 0.490196 139 139 61 255 +mappingkey 0.494118 140 140 62 255 +mappingkey 0.498039 140 140 63 255 +mappingkey 0.501961 141 141 64 255 +mappingkey 0.505882 142 142 65 255 +mappingkey 0.509804 143 143 66 255 +mappingkey 0.513726 143 143 67 255 +mappingkey 0.517647 144 144 68 255 +mappingkey 0.521569 145 145 69 255 +mappingkey 0.52549 146 146 70 255 +mappingkey 0.529412 147 147 71 255 +mappingkey 0.533333 148 148 72 255 +mappingkey 0.537255 148 148 73 255 +mappingkey 0.541176 149 149 74 255 +mappingkey 0.545098 150 150 75 255 +mappingkey 0.54902 150 150 76 255 +mappingkey 0.552941 151 151 77 255 +mappingkey 0.556863 153 153 79 255 +mappingkey 0.560784 153 153 80 255 +mappingkey 0.564706 154 154 81 255 +mappingkey 0.568627 155 155 82 255 +mappingkey 0.572549 155 155 83 255 +mappingkey 0.576471 156 156 84 255 +mappingkey 0.580392 157 157 85 255 +mappingkey 0.584314 158 158 87 255 +mappingkey 0.588235 159 159 88 255 +mappingkey 0.592157 160 160 89 255 +mappingkey 0.596078 160 160 90 255 +mappingkey 0.6 161 161 91 255 +mappingkey 0.603922 163 163 93 255 +mappingkey 0.607843 163 163 94 255 +mappingkey 0.611765 164 164 95 255 +mappingkey 0.615686 165 165 96 255 +mappingkey 0.619608 165 165 97 255 +mappingkey 0.623529 167 167 99 255 +mappingkey 0.627451 167 167 100 255 +mappingkey 0.631373 168 168 101 255 +mappingkey 0.635294 169 169 102 255 +mappingkey 0.639216 170 170 104 255 +mappingkey 0.643137 171 171 105 255 +mappingkey 0.647059 172 172 106 255 +mappingkey 0.65098 172 172 108 255 +mappingkey 0.654902 173 173 109 255 +mappingkey 0.658824 174 174 110 255 +mappingkey 0.662745 175 175 112 255 +mappingkey 0.666667 176 176 113 255 +mappingkey 0.670588 176 176 114 255 +mappingkey 0.67451 178 178 116 255 +mappingkey 0.678431 179 179 117 255 +mappingkey 0.682353 179 179 118 255 +mappingkey 0.686275 180 180 120 255 +mappingkey 0.690196 181 181 121 255 +mappingkey 0.694118 182 182 122 255 +mappingkey 0.698039 183 183 124 255 +mappingkey 0.701961 183 183 125 255 +mappingkey 0.705882 185 185 127 255 +mappingkey 0.709804 185 185 128 255 +mappingkey 0.713726 186 186 129 255 +mappingkey 0.717647 187 187 131 255 +mappingkey 0.721569 188 188 132 255 +mappingkey 0.72549 189 189 134 255 +mappingkey 0.729412 189 189 135 255 +mappingkey 0.733333 191 191 137 255 +mappingkey 0.737255 191 191 138 255 +mappingkey 0.741176 192 192 140 255 +mappingkey 0.745098 193 193 141 255 +mappingkey 0.74902 194 194 143 255 +mappingkey 0.752941 195 195 144 255 +mappingkey 0.756863 196 196 146 255 +mappingkey 0.760784 197 197 147 255 +mappingkey 0.764706 197 197 149 255 +mappingkey 0.768627 198 198 150 255 +mappingkey 0.772549 200 200 152 255 +mappingkey 0.776471 200 200 153 255 +mappingkey 0.780392 201 201 155 255 +mappingkey 0.784314 202 202 156 255 +mappingkey 0.788235 203 203 158 255 +mappingkey 0.792157 204 204 160 255 +mappingkey 0.796078 205 205 161 255 +mappingkey 0.8 206 206 163 255 +mappingkey 0.803922 206 206 164 255 +mappingkey 0.807843 208 208 166 255 +mappingkey 0.811765 208 208 168 255 +mappingkey 0.815686 209 209 169 255 +mappingkey 0.819608 210 210 171 255 +mappingkey 0.823529 211 211 172 255 +mappingkey 0.827451 212 212 174 255 +mappingkey 0.831373 213 213 176 255 +mappingkey 0.835294 214 214 177 255 +mappingkey 0.839216 215 215 179 255 +mappingkey 0.843137 216 216 181 255 +mappingkey 0.847059 216 216 182 255 +mappingkey 0.85098 218 218 184 255 +mappingkey 0.854902 218 218 186 255 +mappingkey 0.858824 220 220 188 255 +mappingkey 0.862745 220 220 189 255 +mappingkey 0.866667 221 221 191 255 +mappingkey 0.870588 222 222 193 255 +mappingkey 0.87451 223 223 195 255 +mappingkey 0.878431 224 224 196 255 +mappingkey 0.882353 225 225 198 255 +mappingkey 0.886275 226 226 200 255 +mappingkey 0.890196 227 227 202 255 +mappingkey 0.894118 228 228 203 255 +mappingkey 0.898039 229 229 205 255 +mappingkey 0.901961 230 230 207 255 +mappingkey 0.905882 231 231 209 255 +mappingkey 0.909804 232 232 211 255 +mappingkey 0.913725 232 232 212 255 +mappingkey 0.917647 234 234 214 255 +mappingkey 0.921569 234 234 216 255 +mappingkey 0.92549 236 236 218 255 +mappingkey 0.929412 236 236 220 255 +mappingkey 0.933333 238 238 222 255 +mappingkey 0.937255 238 238 224 255 +mappingkey 0.941176 239 239 225 255 +mappingkey 0.945098 240 240 227 255 +mappingkey 0.94902 241 241 229 255 +mappingkey 0.952941 242 242 231 255 +mappingkey 0.956863 243 243 233 255 +mappingkey 0.960784 244 244 235 255 +mappingkey 0.964706 245 245 237 255 +mappingkey 0.968627 246 246 239 255 +mappingkey 0.972549 247 247 241 255 +mappingkey 0.976471 248 248 243 255 +mappingkey 0.980392 249 249 245 255 +mappingkey 0.984314 250 250 247 255 +mappingkey 0.988235 251 251 249 255 +mappingkey 0.992157 252 252 251 255 +mappingkey 0.996078 253 253 253 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1700.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1700.txt new file mode 100644 index 0000000000..ac624083b2 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-1700.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 15 1 1 255 +mappingkey 0.00784314 22 2 2 255 +mappingkey 0.0117647 27 3 3 255 +mappingkey 0.0156863 31 4 4 255 +mappingkey 0.0196078 35 5 5 255 +mappingkey 0.0235294 39 6 6 255 +mappingkey 0.027451 42 7 7 255 +mappingkey 0.0313726 45 8 8 255 +mappingkey 0.0352941 47 9 9 255 +mappingkey 0.0392157 50 10 10 255 +mappingkey 0.0431373 52 11 11 255 +mappingkey 0.0470588 55 12 12 255 +mappingkey 0.0509804 57 13 13 255 +mappingkey 0.054902 59 14 14 255 +mappingkey 0.0588235 61 15 15 255 +mappingkey 0.0627451 63 16 16 255 +mappingkey 0.0666667 65 17 17 255 +mappingkey 0.0705882 67 18 18 255 +mappingkey 0.0745098 69 19 19 255 +mappingkey 0.0784314 71 20 20 255 +mappingkey 0.0823529 73 21 21 255 +mappingkey 0.0862745 74 22 22 255 +mappingkey 0.0901961 76 23 23 255 +mappingkey 0.0941176 78 24 24 255 +mappingkey 0.0980392 79 25 25 255 +mappingkey 0.101961 81 26 26 255 +mappingkey 0.105882 82 27 27 255 +mappingkey 0.109804 84 28 28 255 +mappingkey 0.113725 85 29 29 255 +mappingkey 0.117647 87 30 30 255 +mappingkey 0.121569 88 31 31 255 +mappingkey 0.12549 90 32 32 255 +mappingkey 0.129412 91 33 33 255 +mappingkey 0.133333 93 34 34 255 +mappingkey 0.137255 94 35 35 255 +mappingkey 0.141176 95 36 36 255 +mappingkey 0.145098 97 37 37 255 +mappingkey 0.14902 98 38 38 255 +mappingkey 0.152941 99 39 39 255 +mappingkey 0.156863 100 40 40 255 +mappingkey 0.160784 102 41 41 255 +mappingkey 0.164706 103 42 42 255 +mappingkey 0.168627 104 43 43 255 +mappingkey 0.172549 105 44 44 255 +mappingkey 0.176471 107 45 45 255 +mappingkey 0.180392 108 46 46 255 +mappingkey 0.184314 109 47 47 255 +mappingkey 0.188235 110 48 48 255 +mappingkey 0.192157 111 49 49 255 +mappingkey 0.196078 112 50 50 255 +mappingkey 0.2 114 51 51 255 +mappingkey 0.203922 115 52 52 255 +mappingkey 0.207843 116 53 53 255 +mappingkey 0.211765 117 54 54 255 +mappingkey 0.215686 118 55 55 255 +mappingkey 0.219608 119 56 56 255 +mappingkey 0.223529 120 57 57 255 +mappingkey 0.227451 121 58 58 255 +mappingkey 0.231373 122 59 59 255 +mappingkey 0.235294 123 60 60 255 +mappingkey 0.239216 124 61 61 255 +mappingkey 0.243137 125 62 62 255 +mappingkey 0.247059 126 63 63 255 +mappingkey 0.25098 127 64 64 255 +mappingkey 0.254902 128 65 65 255 +mappingkey 0.258824 129 66 66 255 +mappingkey 0.262745 130 67 67 255 +mappingkey 0.266667 131 68 68 255 +mappingkey 0.270588 132 69 69 255 +mappingkey 0.27451 133 70 70 255 +mappingkey 0.278431 134 71 71 255 +mappingkey 0.282353 135 72 72 255 +mappingkey 0.286275 136 73 73 255 +mappingkey 0.290196 137 74 74 255 +mappingkey 0.294118 138 75 75 255 +mappingkey 0.298039 139 76 76 255 +mappingkey 0.301961 140 77 77 255 +mappingkey 0.305882 141 78 78 255 +mappingkey 0.309804 141 79 79 255 +mappingkey 0.313726 142 80 80 255 +mappingkey 0.317647 143 81 81 255 +mappingkey 0.321569 144 82 82 255 +mappingkey 0.32549 145 83 83 255 +mappingkey 0.329412 146 84 84 255 +mappingkey 0.333333 147 85 85 255 +mappingkey 0.337255 148 86 86 255 +mappingkey 0.341176 148 87 87 255 +mappingkey 0.345098 149 88 88 255 +mappingkey 0.34902 150 89 89 255 +mappingkey 0.352941 151 90 90 255 +mappingkey 0.356863 152 91 91 255 +mappingkey 0.360784 153 92 92 255 +mappingkey 0.364706 153 93 93 255 +mappingkey 0.368627 154 94 94 255 +mappingkey 0.372549 155 95 95 255 +mappingkey 0.376471 156 96 96 255 +mappingkey 0.380392 157 97 97 255 +mappingkey 0.384314 158 98 98 255 +mappingkey 0.388235 158 99 99 255 +mappingkey 0.392157 159 100 100 255 +mappingkey 0.396078 160 101 101 255 +mappingkey 0.4 161 102 102 255 +mappingkey 0.403922 162 103 103 255 +mappingkey 0.407843 162 104 104 255 +mappingkey 0.411765 163 105 105 255 +mappingkey 0.415686 164 106 106 255 +mappingkey 0.419608 165 107 107 255 +mappingkey 0.423529 165 108 108 255 +mappingkey 0.427451 166 109 109 255 +mappingkey 0.431373 167 110 110 255 +mappingkey 0.435294 168 111 111 255 +mappingkey 0.439216 168 112 112 255 +mappingkey 0.443137 169 113 113 255 +mappingkey 0.447059 170 114 114 255 +mappingkey 0.45098 171 115 115 255 +mappingkey 0.454902 171 116 116 255 +mappingkey 0.458824 172 117 117 255 +mappingkey 0.462745 173 118 118 255 +mappingkey 0.466667 174 119 119 255 +mappingkey 0.470588 174 120 120 255 +mappingkey 0.47451 175 121 121 255 +mappingkey 0.478431 176 122 122 255 +mappingkey 0.482353 177 123 123 255 +mappingkey 0.486275 177 124 124 255 +mappingkey 0.490196 178 125 125 255 +mappingkey 0.494118 179 126 126 255 +mappingkey 0.498039 179 127 127 255 +mappingkey 0.501961 180 128 128 255 +mappingkey 0.505882 181 129 129 255 +mappingkey 0.509804 182 130 130 255 +mappingkey 0.513726 182 131 131 255 +mappingkey 0.517647 183 132 132 255 +mappingkey 0.521569 184 133 133 255 +mappingkey 0.52549 184 134 134 255 +mappingkey 0.529412 185 135 135 255 +mappingkey 0.533333 186 136 136 255 +mappingkey 0.537255 186 137 137 255 +mappingkey 0.541176 187 138 138 255 +mappingkey 0.545098 188 139 139 255 +mappingkey 0.54902 188 140 140 255 +mappingkey 0.552941 189 141 141 255 +mappingkey 0.556863 190 142 142 255 +mappingkey 0.560784 190 143 143 255 +mappingkey 0.564706 191 144 144 255 +mappingkey 0.568627 192 145 145 255 +mappingkey 0.572549 192 146 146 255 +mappingkey 0.576471 193 147 147 255 +mappingkey 0.580392 194 148 148 255 +mappingkey 0.584314 194 149 149 255 +mappingkey 0.588235 195 150 150 255 +mappingkey 0.592157 196 151 151 255 +mappingkey 0.596078 196 152 152 255 +mappingkey 0.6 197 153 153 255 +mappingkey 0.603922 198 154 154 255 +mappingkey 0.607843 198 155 155 255 +mappingkey 0.611765 199 156 156 255 +mappingkey 0.615686 200 157 157 255 +mappingkey 0.619608 200 158 158 255 +mappingkey 0.623529 201 159 159 255 +mappingkey 0.627451 201 160 160 255 +mappingkey 0.631373 202 161 161 255 +mappingkey 0.635294 203 162 162 255 +mappingkey 0.639216 203 163 163 255 +mappingkey 0.643137 204 164 164 255 +mappingkey 0.647059 205 165 165 255 +mappingkey 0.65098 205 166 166 255 +mappingkey 0.654902 206 167 167 255 +mappingkey 0.658824 206 168 168 255 +mappingkey 0.662745 207 169 169 255 +mappingkey 0.666667 208 170 170 255 +mappingkey 0.670588 208 171 171 255 +mappingkey 0.67451 209 172 172 255 +mappingkey 0.678431 210 173 173 255 +mappingkey 0.682353 210 174 174 255 +mappingkey 0.686275 211 175 175 255 +mappingkey 0.690196 211 176 176 255 +mappingkey 0.694118 212 177 177 255 +mappingkey 0.698039 213 178 178 255 +mappingkey 0.701961 213 179 179 255 +mappingkey 0.705882 214 180 180 255 +mappingkey 0.709804 214 181 181 255 +mappingkey 0.713726 215 182 182 255 +mappingkey 0.717647 216 183 183 255 +mappingkey 0.721569 216 184 184 255 +mappingkey 0.72549 217 185 185 255 +mappingkey 0.729412 217 186 186 255 +mappingkey 0.733333 218 187 187 255 +mappingkey 0.737255 218 188 188 255 +mappingkey 0.741176 219 189 189 255 +mappingkey 0.745098 220 190 190 255 +mappingkey 0.74902 220 191 191 255 +mappingkey 0.752941 221 192 192 255 +mappingkey 0.756863 221 193 193 255 +mappingkey 0.760784 222 194 194 255 +mappingkey 0.764706 222 195 195 255 +mappingkey 0.768627 223 196 196 255 +mappingkey 0.772549 224 197 197 255 +mappingkey 0.776471 224 198 198 255 +mappingkey 0.780392 225 199 199 255 +mappingkey 0.784314 225 200 200 255 +mappingkey 0.788235 226 201 201 255 +mappingkey 0.792157 226 202 202 255 +mappingkey 0.796078 227 203 203 255 +mappingkey 0.8 228 204 204 255 +mappingkey 0.803922 228 205 205 255 +mappingkey 0.807843 229 206 206 255 +mappingkey 0.811765 229 207 207 255 +mappingkey 0.815686 230 208 208 255 +mappingkey 0.819608 230 209 209 255 +mappingkey 0.823529 231 210 210 255 +mappingkey 0.827451 231 211 211 255 +mappingkey 0.831373 232 212 212 255 +mappingkey 0.835294 233 213 213 255 +mappingkey 0.839216 233 214 214 255 +mappingkey 0.843137 234 215 215 255 +mappingkey 0.847059 234 216 216 255 +mappingkey 0.85098 235 217 217 255 +mappingkey 0.854902 235 218 218 255 +mappingkey 0.858824 236 219 219 255 +mappingkey 0.862745 236 220 220 255 +mappingkey 0.866667 237 221 221 255 +mappingkey 0.870588 237 222 222 255 +mappingkey 0.87451 238 223 223 255 +mappingkey 0.878431 238 224 224 255 +mappingkey 0.882353 239 225 225 255 +mappingkey 0.886275 240 226 226 255 +mappingkey 0.890196 240 227 227 255 +mappingkey 0.894118 241 228 228 255 +mappingkey 0.898039 241 229 229 255 +mappingkey 0.901961 242 230 230 255 +mappingkey 0.905882 242 231 231 255 +mappingkey 0.909804 243 232 232 255 +mappingkey 0.913725 243 233 233 255 +mappingkey 0.917647 244 234 234 255 +mappingkey 0.921569 244 235 235 255 +mappingkey 0.92549 245 236 236 255 +mappingkey 0.929412 245 237 237 255 +mappingkey 0.933333 246 238 238 255 +mappingkey 0.937255 246 239 239 255 +mappingkey 0.941176 247 240 240 255 +mappingkey 0.945098 247 241 241 255 +mappingkey 0.94902 248 242 242 255 +mappingkey 0.952941 248 243 243 255 +mappingkey 0.956863 249 244 244 255 +mappingkey 0.960784 249 245 245 255 +mappingkey 0.964706 250 246 246 255 +mappingkey 0.968627 250 247 247 255 +mappingkey 0.972549 251 248 248 255 +mappingkey 0.976471 251 249 249 255 +mappingkey 0.980392 252 250 250 255 +mappingkey 0.984314 252 251 251 255 +mappingkey 0.988235 253 252 252 255 +mappingkey 0.992157 253 253 253 255 +mappingkey 0.996078 254 254 254 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-171.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-171.txt new file mode 100644 index 0000000000..5b9fc8300a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-171.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 1 1 0 255 +mappingkey 0.00784313771874 2 2 0 255 +mappingkey 0.0117647061124 4 3 0 255 +mappingkey 0.0156862754375 5 4 0 255 +mappingkey 0.0196078438312 7 5 0 255 +mappingkey 0.0235294122249 8 6 0 255 +mappingkey 0.0274509806186 10 7 0 255 +mappingkey 0.0313725508749 11 8 0 255 +mappingkey 0.0352941192687 13 9 0 255 +mappingkey 0.0392156876624 14 10 0 255 +mappingkey 0.0431372560561 15 11 0 255 +mappingkey 0.0470588244498 17 12 0 255 +mappingkey 0.0509803928435 18 13 0 255 +mappingkey 0.0549019612372 20 14 0 255 +mappingkey 0.0588235296309 21 15 0 255 +mappingkey 0.0627451017499 23 16 0 255 +mappingkey 0.0666666701436 24 17 0 255 +mappingkey 0.0705882385373 26 18 0 255 +mappingkey 0.074509806931 27 19 0 255 +mappingkey 0.0784313753247 28 20 0 255 +mappingkey 0.0823529437184 30 21 0 255 +mappingkey 0.0862745121121 31 22 0 255 +mappingkey 0.0901960805058 33 23 0 255 +mappingkey 0.0941176488996 34 24 0 255 +mappingkey 0.0980392172933 36 25 0 255 +mappingkey 0.101960785687 37 26 0 255 +mappingkey 0.105882354081 39 27 0 255 +mappingkey 0.109803922474 40 28 0 255 +mappingkey 0.113725490868 42 29 0 255 +mappingkey 0.117647059262 43 30 0 255 +mappingkey 0.121568627656 44 31 0 255 +mappingkey 0.1254902035 46 32 0 255 +mappingkey 0.129411771894 47 33 0 255 +mappingkey 0.133333340287 49 34 0 255 +mappingkey 0.137254908681 50 35 0 255 +mappingkey 0.141176477075 52 36 0 255 +mappingkey 0.145098045468 53 37 0 255 +mappingkey 0.149019613862 55 38 0 255 +mappingkey 0.152941182256 56 39 0 255 +mappingkey 0.156862750649 57 40 0 255 +mappingkey 0.160784319043 59 41 0 255 +mappingkey 0.164705887437 60 42 0 255 +mappingkey 0.168627455831 62 43 0 255 +mappingkey 0.172549024224 63 44 0 255 +mappingkey 0.176470592618 65 45 0 255 +mappingkey 0.180392161012 66 46 0 255 +mappingkey 0.184313729405 68 47 0 255 +mappingkey 0.188235297799 69 48 0 255 +mappingkey 0.192156866193 70 49 0 255 +mappingkey 0.196078434587 72 50 0 255 +mappingkey 0.20000000298 73 51 0 255 +mappingkey 0.203921571374 75 52 0 255 +mappingkey 0.207843139768 76 53 0 255 +mappingkey 0.211764708161 78 54 0 255 +mappingkey 0.215686276555 79 55 0 255 +mappingkey 0.219607844949 81 56 0 255 +mappingkey 0.223529413342 82 57 0 255 +mappingkey 0.227450981736 84 58 0 255 +mappingkey 0.23137255013 85 59 0 255 +mappingkey 0.235294118524 86 60 0 255 +mappingkey 0.239215686917 88 61 0 255 +mappingkey 0.243137255311 89 62 0 255 +mappingkey 0.247058823705 91 63 0 255 +mappingkey 0.250980407 92 64 0 255 +mappingkey 0.254901975393 94 65 0 255 +mappingkey 0.258823543787 95 66 0 255 +mappingkey 0.262745112181 97 67 0 255 +mappingkey 0.266666680574 98 68 0 255 +mappingkey 0.270588248968 99 69 0 255 +mappingkey 0.274509817362 101 70 0 255 +mappingkey 0.278431385756 102 71 0 255 +mappingkey 0.282352954149 104 72 0 255 +mappingkey 0.286274522543 105 73 0 255 +mappingkey 0.290196090937 107 74 0 255 +mappingkey 0.29411765933 108 75 0 255 +mappingkey 0.298039227724 110 76 0 255 +mappingkey 0.301960796118 111 77 0 255 +mappingkey 0.305882364511 113 78 0 255 +mappingkey 0.309803932905 114 79 0 255 +mappingkey 0.313725501299 115 80 0 255 +mappingkey 0.317647069693 117 81 0 255 +mappingkey 0.321568638086 118 82 0 255 +mappingkey 0.32549020648 120 83 0 255 +mappingkey 0.329411774874 121 84 0 255 +mappingkey 0.333333343267 123 85 0 255 +mappingkey 0.337254911661 124 86 0 255 +mappingkey 0.341176480055 126 87 0 255 +mappingkey 0.345098048449 127 88 0 255 +mappingkey 0.349019616842 128 89 0 255 +mappingkey 0.352941185236 130 90 0 255 +mappingkey 0.35686275363 131 91 0 255 +mappingkey 0.360784322023 133 92 0 255 +mappingkey 0.364705890417 134 93 0 255 +mappingkey 0.368627458811 136 94 0 255 +mappingkey 0.372549027205 137 95 0 255 +mappingkey 0.376470595598 139 96 0 255 +mappingkey 0.380392163992 140 97 0 255 +mappingkey 0.384313732386 141 98 0 255 +mappingkey 0.388235300779 143 99 0 255 +mappingkey 0.392156869173 144 100 0 255 +mappingkey 0.396078437567 146 101 0 255 +mappingkey 0.40000000596 147 102 0 255 +mappingkey 0.403921574354 149 103 0 255 +mappingkey 0.407843142748 150 104 0 255 +mappingkey 0.411764711142 152 105 0 255 +mappingkey 0.415686279535 153 106 0 255 +mappingkey 0.419607847929 155 107 0 255 +mappingkey 0.423529416323 156 108 0 255 +mappingkey 0.427450984716 157 109 0 255 +mappingkey 0.43137255311 159 110 0 255 +mappingkey 0.435294121504 160 111 0 255 +mappingkey 0.439215689898 162 112 0 255 +mappingkey 0.443137258291 163 113 0 255 +mappingkey 0.447058826685 165 114 0 255 +mappingkey 0.450980395079 166 115 0 255 +mappingkey 0.454901963472 168 116 0 255 +mappingkey 0.458823531866 169 117 0 255 +mappingkey 0.46274510026 170 118 0 255 +mappingkey 0.466666668653 172 119 0 255 +mappingkey 0.470588237047 173 120 0 255 +mappingkey 0.474509805441 175 121 0 255 +mappingkey 0.478431373835 176 122 0 255 +mappingkey 0.482352942228 178 123 0 255 +mappingkey 0.486274510622 179 124 0 255 +mappingkey 0.490196079016 181 125 0 255 +mappingkey 0.494117647409 182 126 0 255 +mappingkey 0.498039215803 184 127 0 255 +mappingkey 0.501960813999 185 128 0 255 +mappingkey 0.505882382393 186 129 0 255 +mappingkey 0.509803950787 188 130 0 255 +mappingkey 0.51372551918 189 131 0 255 +mappingkey 0.517647087574 191 132 0 255 +mappingkey 0.521568655968 192 133 0 255 +mappingkey 0.525490224361 194 134 0 255 +mappingkey 0.529411792755 195 135 0 255 +mappingkey 0.533333361149 197 136 0 255 +mappingkey 0.537254929543 198 137 0 255 +mappingkey 0.541176497936 199 138 0 255 +mappingkey 0.54509806633 201 139 0 255 +mappingkey 0.549019634724 202 140 0 255 +mappingkey 0.552941203117 204 141 0 255 +mappingkey 0.556862771511 205 142 0 255 +mappingkey 0.560784339905 207 143 0 255 +mappingkey 0.564705908298 208 144 0 255 +mappingkey 0.568627476692 210 145 0 255 +mappingkey 0.572549045086 211 146 0 255 +mappingkey 0.57647061348 212 147 0 255 +mappingkey 0.580392181873 214 148 0 255 +mappingkey 0.584313750267 215 149 0 255 +mappingkey 0.588235318661 217 150 0 255 +mappingkey 0.592156887054 218 151 0 255 +mappingkey 0.596078455448 220 152 0 255 +mappingkey 0.600000023842 221 153 0 255 +mappingkey 0.603921592236 223 154 0 255 +mappingkey 0.607843160629 224 155 0 255 +mappingkey 0.611764729023 226 156 0 255 +mappingkey 0.615686297417 227 157 0 255 +mappingkey 0.61960786581 228 158 0 255 +mappingkey 0.623529434204 230 159 0 255 +mappingkey 0.627451002598 231 160 0 255 +mappingkey 0.631372570992 233 161 0 255 +mappingkey 0.635294139385 234 162 0 255 +mappingkey 0.639215707779 236 163 0 255 +mappingkey 0.643137276173 237 164 0 255 +mappingkey 0.647058844566 239 165 0 255 +mappingkey 0.65098041296 240 166 0 255 +mappingkey 0.654901981354 241 167 0 255 +mappingkey 0.658823549747 243 168 0 255 +mappingkey 0.662745118141 244 169 0 255 +mappingkey 0.666666686535 246 170 0 255 +mappingkey 0.670588254929 247 171 0 255 +mappingkey 0.674509823322 249 172 0 255 +mappingkey 0.678431391716 250 173 0 255 +mappingkey 0.68235296011 252 174 0 255 +mappingkey 0.686274528503 253 175 0 255 +mappingkey 0.690196096897 255 176 0 255 +mappingkey 0.694117665291 255 177 0 255 +mappingkey 0.698039233685 255 178 0 255 +mappingkey 0.701960802078 255 179 0 255 +mappingkey 0.705882370472 255 180 0 255 +mappingkey 0.709803938866 255 181 0 255 +mappingkey 0.713725507259 255 182 0 255 +mappingkey 0.717647075653 255 183 0 255 +mappingkey 0.721568644047 255 184 0 255 +mappingkey 0.72549021244 255 185 0 255 +mappingkey 0.729411780834 255 186 0 255 +mappingkey 0.733333349228 255 187 0 255 +mappingkey 0.737254917622 255 188 0 255 +mappingkey 0.741176486015 255 189 0 255 +mappingkey 0.745098054409 255 190 0 255 +mappingkey 0.749019622803 255 191 3 255 +mappingkey 0.752941191196 255 192 7 255 +mappingkey 0.75686275959 255 193 11 255 +mappingkey 0.760784327984 255 194 15 255 +mappingkey 0.764705896378 255 195 19 255 +mappingkey 0.768627464771 255 196 23 255 +mappingkey 0.772549033165 255 197 27 255 +mappingkey 0.776470601559 255 198 31 255 +mappingkey 0.780392169952 255 199 35 255 +mappingkey 0.784313738346 255 200 39 255 +mappingkey 0.78823530674 255 201 43 255 +mappingkey 0.792156875134 255 202 47 255 +mappingkey 0.796078443527 255 203 51 255 +mappingkey 0.800000011921 255 204 54 255 +mappingkey 0.803921580315 255 205 58 255 +mappingkey 0.807843148708 255 206 62 255 +mappingkey 0.811764717102 255 207 66 255 +mappingkey 0.815686285496 255 208 70 255 +mappingkey 0.819607853889 255 209 74 255 +mappingkey 0.823529422283 255 210 78 255 +mappingkey 0.827450990677 255 211 82 255 +mappingkey 0.831372559071 255 212 86 255 +mappingkey 0.835294127464 255 213 90 255 +mappingkey 0.839215695858 255 214 94 255 +mappingkey 0.843137264252 255 215 98 255 +mappingkey 0.847058832645 255 216 102 255 +mappingkey 0.850980401039 255 217 105 255 +mappingkey 0.854901969433 255 218 109 255 +mappingkey 0.858823537827 255 219 113 255 +mappingkey 0.86274510622 255 220 117 255 +mappingkey 0.866666674614 255 221 121 255 +mappingkey 0.870588243008 255 222 125 255 +mappingkey 0.874509811401 255 223 129 255 +mappingkey 0.878431379795 255 224 133 255 +mappingkey 0.882352948189 255 225 137 255 +mappingkey 0.886274516582 255 226 141 255 +mappingkey 0.890196084976 255 227 145 255 +mappingkey 0.89411765337 255 228 149 255 +mappingkey 0.898039221764 255 229 153 255 +mappingkey 0.901960790157 255 230 156 255 +mappingkey 0.905882358551 255 231 160 255 +mappingkey 0.909803926945 255 232 164 255 +mappingkey 0.913725495338 255 233 168 255 +mappingkey 0.917647063732 255 234 172 255 +mappingkey 0.921568632126 255 235 176 255 +mappingkey 0.92549020052 255 236 180 255 +mappingkey 0.929411768913 255 237 184 255 +mappingkey 0.933333337307 255 238 188 255 +mappingkey 0.937254905701 255 239 192 255 +mappingkey 0.941176474094 255 240 196 255 +mappingkey 0.945098042488 255 241 200 255 +mappingkey 0.949019610882 255 242 204 255 +mappingkey 0.952941179276 255 243 207 255 +mappingkey 0.956862747669 255 244 211 255 +mappingkey 0.960784316063 255 245 215 255 +mappingkey 0.964705884457 255 246 219 255 +mappingkey 0.96862745285 255 247 223 255 +mappingkey 0.972549021244 255 248 227 255 +mappingkey 0.976470589638 255 249 231 255 +mappingkey 0.980392158031 255 250 235 255 +mappingkey 0.984313726425 255 251 239 255 +mappingkey 0.988235294819 255 252 243 255 +mappingkey 0.992156863213 255 253 247 255 +mappingkey 0.996078431606 255 254 251 255 +mappingkey 1.0 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-193.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-193.txt new file mode 100644 index 0000000000..7ac31f83a8 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-193.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 15 1 0 255 +mappingkey 0.00784314 22 2 0 255 +mappingkey 0.0117647 27 3 0 255 +mappingkey 0.0156863 31 4 0 255 +mappingkey 0.0196078 35 5 0 255 +mappingkey 0.0235294 39 6 0 255 +mappingkey 0.027451 42 7 0 255 +mappingkey 0.0313726 45 8 0 255 +mappingkey 0.0352941 47 9 0 255 +mappingkey 0.0392157 50 10 0 255 +mappingkey 0.0431373 52 11 0 255 +mappingkey 0.0470588 55 12 0 255 +mappingkey 0.0509804 57 13 0 255 +mappingkey 0.054902 59 14 0 255 +mappingkey 0.0588235 61 15 0 255 +mappingkey 0.0627451 63 16 1 255 +mappingkey 0.0666667 65 17 1 255 +mappingkey 0.0705882 67 18 1 255 +mappingkey 0.0745098 69 19 1 255 +mappingkey 0.0784314 71 20 1 255 +mappingkey 0.0823529 73 21 1 255 +mappingkey 0.0862745 74 22 1 255 +mappingkey 0.0901961 76 23 2 255 +mappingkey 0.0941176 78 24 2 255 +mappingkey 0.0980392 79 25 2 255 +mappingkey 0.101961 81 26 2 255 +mappingkey 0.105882 82 27 2 255 +mappingkey 0.109804 84 28 3 255 +mappingkey 0.113725 85 29 3 255 +mappingkey 0.117647 87 30 3 255 +mappingkey 0.121569 88 31 3 255 +mappingkey 0.12549 90 32 4 255 +mappingkey 0.129412 91 33 4 255 +mappingkey 0.133333 93 34 4 255 +mappingkey 0.137255 94 35 4 255 +mappingkey 0.141176 95 36 5 255 +mappingkey 0.145098 97 37 5 255 +mappingkey 0.14902 98 38 5 255 +mappingkey 0.152941 99 39 5 255 +mappingkey 0.156863 100 40 6 255 +mappingkey 0.160784 102 41 6 255 +mappingkey 0.164706 103 42 6 255 +mappingkey 0.168627 104 43 7 255 +mappingkey 0.172549 105 44 7 255 +mappingkey 0.176471 107 45 7 255 +mappingkey 0.180392 108 46 8 255 +mappingkey 0.184314 109 47 8 255 +mappingkey 0.188235 110 48 9 255 +mappingkey 0.192157 111 49 9 255 +mappingkey 0.196078 112 50 9 255 +mappingkey 0.2 114 51 10 255 +mappingkey 0.203922 115 52 10 255 +mappingkey 0.207843 116 53 11 255 +mappingkey 0.211765 117 54 11 255 +mappingkey 0.215686 118 55 11 255 +mappingkey 0.219608 119 56 12 255 +mappingkey 0.223529 120 57 12 255 +mappingkey 0.227451 121 58 13 255 +mappingkey 0.231373 122 59 13 255 +mappingkey 0.235294 123 60 14 255 +mappingkey 0.239216 124 61 14 255 +mappingkey 0.243137 125 62 15 255 +mappingkey 0.247059 126 63 15 255 +mappingkey 0.25098 127 64 16 255 +mappingkey 0.254902 128 65 16 255 +mappingkey 0.258824 129 66 17 255 +mappingkey 0.262745 130 67 17 255 +mappingkey 0.266667 131 68 18 255 +mappingkey 0.270588 132 69 18 255 +mappingkey 0.27451 133 70 19 255 +mappingkey 0.278431 134 71 19 255 +mappingkey 0.282353 135 72 20 255 +mappingkey 0.286275 136 73 20 255 +mappingkey 0.290196 137 74 21 255 +mappingkey 0.294118 138 75 22 255 +mappingkey 0.298039 139 76 22 255 +mappingkey 0.301961 140 77 23 255 +mappingkey 0.305882 141 78 23 255 +mappingkey 0.309804 141 79 24 255 +mappingkey 0.313726 142 80 25 255 +mappingkey 0.317647 143 81 25 255 +mappingkey 0.321569 144 82 26 255 +mappingkey 0.32549 145 83 27 255 +mappingkey 0.329412 146 84 27 255 +mappingkey 0.333333 147 85 28 255 +mappingkey 0.337255 148 86 29 255 +mappingkey 0.341176 148 87 29 255 +mappingkey 0.345098 149 88 30 255 +mappingkey 0.34902 150 89 31 255 +mappingkey 0.352941 151 90 31 255 +mappingkey 0.356863 152 91 32 255 +mappingkey 0.360784 153 92 33 255 +mappingkey 0.364706 153 93 33 255 +mappingkey 0.368627 154 94 34 255 +mappingkey 0.372549 155 95 35 255 +mappingkey 0.376471 156 96 36 255 +mappingkey 0.380392 157 97 36 255 +mappingkey 0.384314 158 98 37 255 +mappingkey 0.388235 158 99 38 255 +mappingkey 0.392157 159 100 39 255 +mappingkey 0.396078 160 101 40 255 +mappingkey 0.4 161 102 40 255 +mappingkey 0.403922 162 103 41 255 +mappingkey 0.407843 162 104 42 255 +mappingkey 0.411765 163 105 43 255 +mappingkey 0.415686 164 106 44 255 +mappingkey 0.419608 165 107 44 255 +mappingkey 0.423529 165 108 45 255 +mappingkey 0.427451 166 109 46 255 +mappingkey 0.431373 167 110 47 255 +mappingkey 0.435294 168 111 48 255 +mappingkey 0.439216 168 112 49 255 +mappingkey 0.443137 169 113 50 255 +mappingkey 0.447059 170 114 50 255 +mappingkey 0.45098 171 115 51 255 +mappingkey 0.454902 171 116 52 255 +mappingkey 0.458824 172 117 53 255 +mappingkey 0.462745 173 118 54 255 +mappingkey 0.466667 174 119 55 255 +mappingkey 0.470588 174 120 56 255 +mappingkey 0.47451 175 121 57 255 +mappingkey 0.478431 176 122 58 255 +mappingkey 0.482353 177 123 59 255 +mappingkey 0.486275 177 124 60 255 +mappingkey 0.490196 178 125 61 255 +mappingkey 0.494118 179 126 62 255 +mappingkey 0.498039 179 127 63 255 +mappingkey 0.501961 180 128 64 255 +mappingkey 0.505882 181 129 65 255 +mappingkey 0.509804 182 130 66 255 +mappingkey 0.513726 182 131 67 255 +mappingkey 0.517647 183 132 68 255 +mappingkey 0.521569 184 133 69 255 +mappingkey 0.52549 184 134 70 255 +mappingkey 0.529412 185 135 71 255 +mappingkey 0.533333 186 136 72 255 +mappingkey 0.537255 186 137 73 255 +mappingkey 0.541176 187 138 74 255 +mappingkey 0.545098 188 139 75 255 +mappingkey 0.54902 188 140 76 255 +mappingkey 0.552941 189 141 77 255 +mappingkey 0.556863 190 142 79 255 +mappingkey 0.560784 190 143 80 255 +mappingkey 0.564706 191 144 81 255 +mappingkey 0.568627 192 145 82 255 +mappingkey 0.572549 192 146 83 255 +mappingkey 0.576471 193 147 84 255 +mappingkey 0.580392 194 148 85 255 +mappingkey 0.584314 194 149 87 255 +mappingkey 0.588235 195 150 88 255 +mappingkey 0.592157 196 151 89 255 +mappingkey 0.596078 196 152 90 255 +mappingkey 0.6 197 153 91 255 +mappingkey 0.603922 198 154 93 255 +mappingkey 0.607843 198 155 94 255 +mappingkey 0.611765 199 156 95 255 +mappingkey 0.615686 200 157 96 255 +mappingkey 0.619608 200 158 97 255 +mappingkey 0.623529 201 159 99 255 +mappingkey 0.627451 201 160 100 255 +mappingkey 0.631373 202 161 101 255 +mappingkey 0.635294 203 162 102 255 +mappingkey 0.639216 203 163 104 255 +mappingkey 0.643137 204 164 105 255 +mappingkey 0.647059 205 165 106 255 +mappingkey 0.65098 205 166 108 255 +mappingkey 0.654902 206 167 109 255 +mappingkey 0.658824 206 168 110 255 +mappingkey 0.662745 207 169 112 255 +mappingkey 0.666667 208 170 113 255 +mappingkey 0.670588 208 171 114 255 +mappingkey 0.67451 209 172 116 255 +mappingkey 0.678431 210 173 117 255 +mappingkey 0.682353 210 174 118 255 +mappingkey 0.686275 211 175 120 255 +mappingkey 0.690196 211 176 121 255 +mappingkey 0.694118 212 177 122 255 +mappingkey 0.698039 213 178 124 255 +mappingkey 0.701961 213 179 125 255 +mappingkey 0.705882 214 180 127 255 +mappingkey 0.709804 214 181 128 255 +mappingkey 0.713726 215 182 129 255 +mappingkey 0.717647 216 183 131 255 +mappingkey 0.721569 216 184 132 255 +mappingkey 0.72549 217 185 134 255 +mappingkey 0.729412 217 186 135 255 +mappingkey 0.733333 218 187 137 255 +mappingkey 0.737255 218 188 138 255 +mappingkey 0.741176 219 189 140 255 +mappingkey 0.745098 220 190 141 255 +mappingkey 0.74902 220 191 143 255 +mappingkey 0.752941 221 192 144 255 +mappingkey 0.756863 221 193 146 255 +mappingkey 0.760784 222 194 147 255 +mappingkey 0.764706 222 195 149 255 +mappingkey 0.768627 223 196 150 255 +mappingkey 0.772549 224 197 152 255 +mappingkey 0.776471 224 198 153 255 +mappingkey 0.780392 225 199 155 255 +mappingkey 0.784314 225 200 156 255 +mappingkey 0.788235 226 201 158 255 +mappingkey 0.792157 226 202 160 255 +mappingkey 0.796078 227 203 161 255 +mappingkey 0.8 228 204 163 255 +mappingkey 0.803922 228 205 164 255 +mappingkey 0.807843 229 206 166 255 +mappingkey 0.811765 229 207 168 255 +mappingkey 0.815686 230 208 169 255 +mappingkey 0.819608 230 209 171 255 +mappingkey 0.823529 231 210 172 255 +mappingkey 0.827451 231 211 174 255 +mappingkey 0.831373 232 212 176 255 +mappingkey 0.835294 233 213 177 255 +mappingkey 0.839216 233 214 179 255 +mappingkey 0.843137 234 215 181 255 +mappingkey 0.847059 234 216 182 255 +mappingkey 0.85098 235 217 184 255 +mappingkey 0.854902 235 218 186 255 +mappingkey 0.858824 236 219 188 255 +mappingkey 0.862745 236 220 189 255 +mappingkey 0.866667 237 221 191 255 +mappingkey 0.870588 237 222 193 255 +mappingkey 0.87451 238 223 195 255 +mappingkey 0.878431 238 224 196 255 +mappingkey 0.882353 239 225 198 255 +mappingkey 0.886275 240 226 200 255 +mappingkey 0.890196 240 227 202 255 +mappingkey 0.894118 241 228 203 255 +mappingkey 0.898039 241 229 205 255 +mappingkey 0.901961 242 230 207 255 +mappingkey 0.905882 242 231 209 255 +mappingkey 0.909804 243 232 211 255 +mappingkey 0.913725 243 233 212 255 +mappingkey 0.917647 244 234 214 255 +mappingkey 0.921569 244 235 216 255 +mappingkey 0.92549 245 236 218 255 +mappingkey 0.929412 245 237 220 255 +mappingkey 0.933333 246 238 222 255 +mappingkey 0.937255 246 239 224 255 +mappingkey 0.941176 247 240 225 255 +mappingkey 0.945098 247 241 227 255 +mappingkey 0.94902 248 242 229 255 +mappingkey 0.952941 248 243 231 255 +mappingkey 0.956863 249 244 233 255 +mappingkey 0.960784 249 245 235 255 +mappingkey 0.964706 250 246 237 255 +mappingkey 0.968627 250 247 239 255 +mappingkey 0.972549 251 248 241 255 +mappingkey 0.976471 251 249 243 255 +mappingkey 0.980392 252 250 245 255 +mappingkey 0.984314 252 251 247 255 +mappingkey 0.988235 253 252 249 255 +mappingkey 0.992157 253 253 251 255 +mappingkey 0.996078 254 254 253 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-211.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-211.txt new file mode 100644 index 0000000000..3d12f93bce --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-211.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 15 1 10 255 +mappingkey 0.00784314 22 2 14 255 +mappingkey 0.0117647 27 3 18 255 +mappingkey 0.0156863 31 4 20 255 +mappingkey 0.0196078 35 5 23 255 +mappingkey 0.0235294 39 6 26 255 +mappingkey 0.027451 42 7 28 255 +mappingkey 0.0313726 45 8 30 255 +mappingkey 0.0352941 47 9 31 255 +mappingkey 0.0392157 50 10 33 255 +mappingkey 0.0431373 52 11 34 255 +mappingkey 0.0470588 55 12 36 255 +mappingkey 0.0509804 57 13 38 255 +mappingkey 0.054902 59 14 39 255 +mappingkey 0.0588235 61 15 40 255 +mappingkey 0.0627451 63 16 42 255 +mappingkey 0.0666667 65 17 43 255 +mappingkey 0.0705882 67 18 45 255 +mappingkey 0.0745098 69 19 46 255 +mappingkey 0.0784314 71 20 47 255 +mappingkey 0.0823529 73 21 49 255 +mappingkey 0.0862745 74 22 49 255 +mappingkey 0.0901961 76 23 51 255 +mappingkey 0.0941176 78 24 52 255 +mappingkey 0.0980392 79 25 53 255 +mappingkey 0.101961 81 26 54 255 +mappingkey 0.105882 82 27 55 255 +mappingkey 0.109804 84 28 57 255 +mappingkey 0.113725 85 29 57 255 +mappingkey 0.117647 87 30 59 255 +mappingkey 0.121569 88 31 59 255 +mappingkey 0.12549 90 32 61 255 +mappingkey 0.129412 91 33 62 255 +mappingkey 0.133333 93 34 63 255 +mappingkey 0.137255 94 35 64 255 +mappingkey 0.141176 95 36 65 255 +mappingkey 0.145098 97 37 66 255 +mappingkey 0.14902 98 38 67 255 +mappingkey 0.152941 99 39 67 255 +mappingkey 0.156863 100 40 68 255 +mappingkey 0.160784 102 41 70 255 +mappingkey 0.164706 103 42 70 255 +mappingkey 0.168627 104 43 71 255 +mappingkey 0.172549 105 44 72 255 +mappingkey 0.176471 107 45 73 255 +mappingkey 0.180392 108 46 74 255 +mappingkey 0.184314 109 47 75 255 +mappingkey 0.188235 110 48 76 255 +mappingkey 0.192157 111 49 77 255 +mappingkey 0.196078 112 50 77 255 +mappingkey 0.2 114 51 79 255 +mappingkey 0.203922 115 52 80 255 +mappingkey 0.207843 116 53 81 255 +mappingkey 0.211765 117 54 81 255 +mappingkey 0.215686 118 55 82 255 +mappingkey 0.219608 119 56 83 255 +mappingkey 0.223529 120 57 84 255 +mappingkey 0.227451 121 58 85 255 +mappingkey 0.231373 122 59 85 255 +mappingkey 0.235294 123 60 86 255 +mappingkey 0.239216 124 61 87 255 +mappingkey 0.243137 125 62 88 255 +mappingkey 0.247059 126 63 89 255 +mappingkey 0.25098 127 64 90 255 +mappingkey 0.254902 128 65 90 255 +mappingkey 0.258824 129 66 91 255 +mappingkey 0.262745 130 67 92 255 +mappingkey 0.266667 131 68 93 255 +mappingkey 0.270588 132 69 94 255 +mappingkey 0.27451 133 70 95 255 +mappingkey 0.278431 134 71 95 255 +mappingkey 0.282353 135 72 96 255 +mappingkey 0.286275 136 73 97 255 +mappingkey 0.290196 137 74 98 255 +mappingkey 0.294118 138 75 99 255 +mappingkey 0.298039 139 76 100 255 +mappingkey 0.301961 140 77 101 255 +mappingkey 0.305882 141 78 101 255 +mappingkey 0.309804 141 79 102 255 +mappingkey 0.313726 142 80 103 255 +mappingkey 0.317647 143 81 103 255 +mappingkey 0.321569 144 82 104 255 +mappingkey 0.32549 145 83 105 255 +mappingkey 0.329412 146 84 106 255 +mappingkey 0.333333 147 85 107 255 +mappingkey 0.337255 148 86 108 255 +mappingkey 0.341176 148 87 108 255 +mappingkey 0.345098 149 88 109 255 +mappingkey 0.34902 150 89 110 255 +mappingkey 0.352941 151 90 111 255 +mappingkey 0.356863 152 91 112 255 +mappingkey 0.360784 153 92 113 255 +mappingkey 0.364706 153 93 113 255 +mappingkey 0.368627 154 94 114 255 +mappingkey 0.372549 155 95 115 255 +mappingkey 0.376471 156 96 116 255 +mappingkey 0.380392 157 97 116 255 +mappingkey 0.384314 158 98 117 255 +mappingkey 0.388235 158 99 118 255 +mappingkey 0.392157 159 100 119 255 +mappingkey 0.396078 160 101 120 255 +mappingkey 0.4 161 102 120 255 +mappingkey 0.403922 162 103 121 255 +mappingkey 0.407843 162 104 122 255 +mappingkey 0.411765 163 105 123 255 +mappingkey 0.415686 164 106 124 255 +mappingkey 0.419608 165 107 124 255 +mappingkey 0.423529 165 108 125 255 +mappingkey 0.427451 166 109 126 255 +mappingkey 0.431373 167 110 127 255 +mappingkey 0.435294 168 111 128 255 +mappingkey 0.439216 168 112 128 255 +mappingkey 0.443137 169 113 129 255 +mappingkey 0.447059 170 114 130 255 +mappingkey 0.45098 171 115 131 255 +mappingkey 0.454902 171 116 131 255 +mappingkey 0.458824 172 117 132 255 +mappingkey 0.462745 173 118 133 255 +mappingkey 0.466667 174 119 134 255 +mappingkey 0.470588 174 120 134 255 +mappingkey 0.47451 175 121 135 255 +mappingkey 0.478431 176 122 136 255 +mappingkey 0.482353 177 123 137 255 +mappingkey 0.486275 177 124 138 255 +mappingkey 0.490196 178 125 139 255 +mappingkey 0.494118 179 126 140 255 +mappingkey 0.498039 179 127 140 255 +mappingkey 0.501961 180 128 141 255 +mappingkey 0.505882 181 129 142 255 +mappingkey 0.509804 182 130 143 255 +mappingkey 0.513726 182 131 143 255 +mappingkey 0.517647 183 132 144 255 +mappingkey 0.521569 184 133 145 255 +mappingkey 0.52549 184 134 146 255 +mappingkey 0.529412 185 135 147 255 +mappingkey 0.533333 186 136 148 255 +mappingkey 0.537255 186 137 148 255 +mappingkey 0.541176 187 138 149 255 +mappingkey 0.545098 188 139 150 255 +mappingkey 0.54902 188 140 150 255 +mappingkey 0.552941 189 141 151 255 +mappingkey 0.556863 190 142 153 255 +mappingkey 0.560784 190 143 153 255 +mappingkey 0.564706 191 144 154 255 +mappingkey 0.568627 192 145 155 255 +mappingkey 0.572549 192 146 155 255 +mappingkey 0.576471 193 147 156 255 +mappingkey 0.580392 194 148 157 255 +mappingkey 0.584314 194 149 158 255 +mappingkey 0.588235 195 150 159 255 +mappingkey 0.592157 196 151 160 255 +mappingkey 0.596078 196 152 160 255 +mappingkey 0.6 197 153 161 255 +mappingkey 0.603922 198 154 163 255 +mappingkey 0.607843 198 155 163 255 +mappingkey 0.611765 199 156 164 255 +mappingkey 0.615686 200 157 165 255 +mappingkey 0.619608 200 158 165 255 +mappingkey 0.623529 201 159 167 255 +mappingkey 0.627451 201 160 167 255 +mappingkey 0.631373 202 161 168 255 +mappingkey 0.635294 203 162 169 255 +mappingkey 0.639216 203 163 170 255 +mappingkey 0.643137 204 164 171 255 +mappingkey 0.647059 205 165 172 255 +mappingkey 0.65098 205 166 172 255 +mappingkey 0.654902 206 167 173 255 +mappingkey 0.658824 206 168 174 255 +mappingkey 0.662745 207 169 175 255 +mappingkey 0.666667 208 170 176 255 +mappingkey 0.670588 208 171 176 255 +mappingkey 0.67451 209 172 178 255 +mappingkey 0.678431 210 173 179 255 +mappingkey 0.682353 210 174 179 255 +mappingkey 0.686275 211 175 180 255 +mappingkey 0.690196 211 176 181 255 +mappingkey 0.694118 212 177 182 255 +mappingkey 0.698039 213 178 183 255 +mappingkey 0.701961 213 179 183 255 +mappingkey 0.705882 214 180 185 255 +mappingkey 0.709804 214 181 185 255 +mappingkey 0.713726 215 182 186 255 +mappingkey 0.717647 216 183 187 255 +mappingkey 0.721569 216 184 188 255 +mappingkey 0.72549 217 185 189 255 +mappingkey 0.729412 217 186 189 255 +mappingkey 0.733333 218 187 191 255 +mappingkey 0.737255 218 188 191 255 +mappingkey 0.741176 219 189 192 255 +mappingkey 0.745098 220 190 193 255 +mappingkey 0.74902 220 191 194 255 +mappingkey 0.752941 221 192 195 255 +mappingkey 0.756863 221 193 196 255 +mappingkey 0.760784 222 194 197 255 +mappingkey 0.764706 222 195 197 255 +mappingkey 0.768627 223 196 198 255 +mappingkey 0.772549 224 197 200 255 +mappingkey 0.776471 224 198 200 255 +mappingkey 0.780392 225 199 201 255 +mappingkey 0.784314 225 200 202 255 +mappingkey 0.788235 226 201 203 255 +mappingkey 0.792157 226 202 204 255 +mappingkey 0.796078 227 203 205 255 +mappingkey 0.8 228 204 206 255 +mappingkey 0.803922 228 205 206 255 +mappingkey 0.807843 229 206 208 255 +mappingkey 0.811765 229 207 208 255 +mappingkey 0.815686 230 208 209 255 +mappingkey 0.819608 230 209 210 255 +mappingkey 0.823529 231 210 211 255 +mappingkey 0.827451 231 211 212 255 +mappingkey 0.831373 232 212 213 255 +mappingkey 0.835294 233 213 214 255 +mappingkey 0.839216 233 214 215 255 +mappingkey 0.843137 234 215 216 255 +mappingkey 0.847059 234 216 216 255 +mappingkey 0.85098 235 217 218 255 +mappingkey 0.854902 235 218 218 255 +mappingkey 0.858824 236 219 220 255 +mappingkey 0.862745 236 220 220 255 +mappingkey 0.866667 237 221 221 255 +mappingkey 0.870588 237 222 222 255 +mappingkey 0.87451 238 223 223 255 +mappingkey 0.878431 238 224 224 255 +mappingkey 0.882353 239 225 225 255 +mappingkey 0.886275 240 226 226 255 +mappingkey 0.890196 240 227 227 255 +mappingkey 0.894118 241 228 228 255 +mappingkey 0.898039 241 229 229 255 +mappingkey 0.901961 242 230 230 255 +mappingkey 0.905882 242 231 231 255 +mappingkey 0.909804 243 232 232 255 +mappingkey 0.913725 243 233 232 255 +mappingkey 0.917647 244 234 234 255 +mappingkey 0.921569 244 235 234 255 +mappingkey 0.92549 245 236 236 255 +mappingkey 0.929412 245 237 236 255 +mappingkey 0.933333 246 238 238 255 +mappingkey 0.937255 246 239 238 255 +mappingkey 0.941176 247 240 239 255 +mappingkey 0.945098 247 241 240 255 +mappingkey 0.94902 248 242 241 255 +mappingkey 0.952941 248 243 242 255 +mappingkey 0.956863 249 244 243 255 +mappingkey 0.960784 249 245 244 255 +mappingkey 0.964706 250 246 245 255 +mappingkey 0.968627 250 247 246 255 +mappingkey 0.972549 251 248 247 255 +mappingkey 0.976471 251 249 248 255 +mappingkey 0.980392 252 250 249 255 +mappingkey 0.984314 252 251 250 255 +mappingkey 0.988235 253 252 251 255 +mappingkey 0.992157 253 253 252 255 +mappingkey 0.996078 254 254 253 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-304.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-304.txt new file mode 100644 index 0000000000..b623ed8995 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-304.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0 0 0 0 255 +mappingkey 0.00392157 0 0 0 255 +mappingkey 0.00784314 0 0 0 255 +mappingkey 0.0117647 0 0 0 255 +mappingkey 0.0156863 0 0 0 255 +mappingkey 0.0196078 0 0 0 255 +mappingkey 0.0235294 0 0 0 255 +mappingkey 0.027451 0 0 0 255 +mappingkey 0.0313726 0 0 0 255 +mappingkey 0.0352941 0 0 0 255 +mappingkey 0.0392157 0 0 0 255 +mappingkey 0.0431373 0 0 0 255 +mappingkey 0.0470588 0 0 0 255 +mappingkey 0.0509804 0 0 0 255 +mappingkey 0.054902 0 0 0 255 +mappingkey 0.0588235 0 0 0 255 +mappingkey 0.0627451 0 0 0 255 +mappingkey 0.0666667 0 0 0 255 +mappingkey 0.0705882 0 0 0 255 +mappingkey 0.0745098 0 0 0 255 +mappingkey 0.0784314 0 0 0 255 +mappingkey 0.0823529 1 0 0 255 +mappingkey 0.0862745 5 0 0 255 +mappingkey 0.0901961 7 0 0 255 +mappingkey 0.0941176 8 0 0 255 +mappingkey 0.0980392 11 0 0 255 +mappingkey 0.101961 15 0 0 255 +mappingkey 0.105882 17 0 0 255 +mappingkey 0.109804 21 0 0 255 +mappingkey 0.113725 23 0 0 255 +mappingkey 0.117647 27 0 0 255 +mappingkey 0.121569 27 0 0 255 +mappingkey 0.12549 30 0 0 255 +mappingkey 0.129412 33 0 0 255 +mappingkey 0.133333 36 0 0 255 +mappingkey 0.137255 37 0 0 255 +mappingkey 0.141176 40 0 0 255 +mappingkey 0.145098 44 0 0 255 +mappingkey 0.14902 46 0 0 255 +mappingkey 0.152941 47 0 0 255 +mappingkey 0.156863 49 0 0 255 +mappingkey 0.160784 52 0 0 255 +mappingkey 0.164706 53 0 0 255 +mappingkey 0.168627 56 0 0 255 +mappingkey 0.172549 60 0 0 255 +mappingkey 0.176471 62 0 0 255 +mappingkey 0.180392 63 0 0 255 +mappingkey 0.184314 65 0 0 255 +mappingkey 0.188235 68 0 0 255 +mappingkey 0.192157 69 0 0 255 +mappingkey 0.196078 70 0 0 255 +mappingkey 0.2 73 0 0 255 +mappingkey 0.203922 76 0 0 255 +mappingkey 0.207843 78 0 0 255 +mappingkey 0.211765 79 0 0 255 +mappingkey 0.215686 84 0 0 255 +mappingkey 0.219608 84 0 0 255 +mappingkey 0.223529 85 0 0 255 +mappingkey 0.227451 86 0 0 255 +mappingkey 0.231373 89 0 0 255 +mappingkey 0.235294 92 0 0 255 +mappingkey 0.239216 94 0 0 255 +mappingkey 0.243137 95 0 0 255 +mappingkey 0.247059 97 0 0 255 +mappingkey 0.25098 99 0 0 255 +mappingkey 0.254902 101 0 0 255 +mappingkey 0.258824 101 0 0 255 +mappingkey 0.262745 104 0 0 255 +mappingkey 0.266667 105 0 0 255 +mappingkey 0.270588 108 0 0 255 +mappingkey 0.27451 110 0 0 255 +mappingkey 0.278431 111 0 0 255 +mappingkey 0.282353 113 0 0 255 +mappingkey 0.286275 115 0 0 255 +mappingkey 0.290196 118 0 0 255 +mappingkey 0.294118 120 0 0 255 +mappingkey 0.298039 120 0 0 255 +mappingkey 0.301961 121 0 0 255 +mappingkey 0.305882 124 0 0 255 +mappingkey 0.309804 126 0 0 255 +mappingkey 0.313726 127 0 0 255 +mappingkey 0.317647 128 0 0 255 +mappingkey 0.321569 133 0 0 255 +mappingkey 0.32549 134 0 0 255 +mappingkey 0.329412 136 0 0 255 +mappingkey 0.333333 137 0 0 255 +mappingkey 0.337255 140 0 0 255 +mappingkey 0.341176 140 0 0 255 +mappingkey 0.345098 141 0 0 255 +mappingkey 0.34902 143 0 0 255 +mappingkey 0.352941 144 0 0 255 +mappingkey 0.356863 149 0 0 255 +mappingkey 0.360784 150 0 0 255 +mappingkey 0.364706 152 0 0 255 +mappingkey 0.368627 153 0 0 255 +mappingkey 0.372549 153 0 0 255 +mappingkey 0.376471 156 0 0 255 +mappingkey 0.380392 157 0 0 255 +mappingkey 0.384314 157 0 0 255 +mappingkey 0.388235 159 0 0 255 +mappingkey 0.392157 160 0 0 255 +mappingkey 0.396078 165 0 0 255 +mappingkey 0.4 166 0 0 255 +mappingkey 0.403922 168 0 0 255 +mappingkey 0.407843 169 0 0 255 +mappingkey 0.411765 169 0 0 255 +mappingkey 0.415686 172 0 0 255 +mappingkey 0.419608 173 0 0 255 +mappingkey 0.423529 175 1 0 255 +mappingkey 0.427451 175 1 0 255 +mappingkey 0.431373 178 5 0 255 +mappingkey 0.435294 181 9 0 255 +mappingkey 0.439216 181 9 0 255 +mappingkey 0.443137 182 11 0 255 +mappingkey 0.447059 184 13 0 255 +mappingkey 0.45098 185 15 0 255 +mappingkey 0.454902 188 18 0 255 +mappingkey 0.458824 189 20 0 255 +mappingkey 0.462745 192 24 0 255 +mappingkey 0.466667 192 24 0 255 +mappingkey 0.470588 194 26 0 255 +mappingkey 0.47451 194 26 0 255 +mappingkey 0.478431 197 30 0 255 +mappingkey 0.482353 198 32 0 255 +mappingkey 0.486275 199 34 0 255 +mappingkey 0.490196 199 34 0 255 +mappingkey 0.494118 201 35 0 255 +mappingkey 0.498039 204 39 0 255 +mappingkey 0.501961 207 43 0 255 +mappingkey 0.505882 208 45 0 255 +mappingkey 0.509804 208 45 0 255 +mappingkey 0.513726 210 47 0 255 +mappingkey 0.517647 212 51 0 255 +mappingkey 0.521569 212 51 0 255 +mappingkey 0.52549 214 52 0 255 +mappingkey 0.529412 214 52 0 255 +mappingkey 0.533333 215 54 0 255 +mappingkey 0.537255 217 56 0 255 +mappingkey 0.541176 221 62 0 255 +mappingkey 0.545098 223 64 0 255 +mappingkey 0.54902 223 64 0 255 +mappingkey 0.552941 224 66 0 255 +mappingkey 0.556863 226 68 0 255 +mappingkey 0.560784 228 71 0 255 +mappingkey 0.564706 230 73 0 255 +mappingkey 0.568627 230 73 0 255 +mappingkey 0.572549 231 75 0 255 +mappingkey 0.576471 231 75 0 255 +mappingkey 0.580392 233 77 0 255 +mappingkey 0.584314 233 77 0 255 +mappingkey 0.588235 237 83 0 255 +mappingkey 0.592157 239 85 0 255 +mappingkey 0.596078 240 86 0 255 +mappingkey 0.6 241 88 0 255 +mappingkey 0.603922 241 88 0 255 +mappingkey 0.607843 244 92 0 255 +mappingkey 0.611765 246 94 0 255 +mappingkey 0.615686 247 96 0 255 +mappingkey 0.619608 247 96 0 255 +mappingkey 0.623529 249 98 0 255 +mappingkey 0.627451 249 98 0 255 +mappingkey 0.631373 253 103 0 255 +mappingkey 0.635294 253 103 0 255 +mappingkey 0.639216 255 105 0 255 +mappingkey 0.643137 255 107 0 255 +mappingkey 0.647059 255 109 0 255 +mappingkey 0.65098 255 109 0 255 +mappingkey 0.654902 255 113 0 255 +mappingkey 0.658824 255 115 0 255 +mappingkey 0.662745 255 115 0 255 +mappingkey 0.666667 255 117 0 255 +mappingkey 0.670588 255 120 0 255 +mappingkey 0.67451 255 124 0 255 +mappingkey 0.678431 255 124 0 255 +mappingkey 0.682353 255 124 0 255 +mappingkey 0.686275 255 126 0 255 +mappingkey 0.690196 255 128 0 255 +mappingkey 0.694118 255 128 0 255 +mappingkey 0.698039 255 130 0 255 +mappingkey 0.701961 255 134 3 255 +mappingkey 0.705882 255 134 3 255 +mappingkey 0.709804 255 136 7 255 +mappingkey 0.713726 255 139 15 255 +mappingkey 0.717647 255 141 19 255 +mappingkey 0.721569 255 141 19 255 +mappingkey 0.72549 255 145 27 255 +mappingkey 0.729412 255 147 31 255 +mappingkey 0.733333 255 147 31 255 +mappingkey 0.737255 255 147 31 255 +mappingkey 0.741176 255 149 35 255 +mappingkey 0.745098 255 151 39 255 +mappingkey 0.74902 255 151 39 255 +mappingkey 0.752941 255 154 47 255 +mappingkey 0.756863 255 158 54 255 +mappingkey 0.760784 255 158 54 255 +mappingkey 0.764706 255 160 58 255 +mappingkey 0.768627 255 162 62 255 +mappingkey 0.772549 255 162 62 255 +mappingkey 0.776471 255 166 70 255 +mappingkey 0.780392 255 168 74 255 +mappingkey 0.784314 255 170 78 255 +mappingkey 0.788235 255 170 78 255 +mappingkey 0.792157 255 171 82 255 +mappingkey 0.796078 255 171 82 255 +mappingkey 0.8 255 171 82 255 +mappingkey 0.803922 255 175 90 255 +mappingkey 0.807843 255 179 98 255 +mappingkey 0.811765 255 179 98 255 +mappingkey 0.815686 255 181 102 255 +mappingkey 0.819608 255 183 105 255 +mappingkey 0.823529 255 183 105 255 +mappingkey 0.827451 255 187 113 255 +mappingkey 0.831373 255 188 117 255 +mappingkey 0.835294 255 188 117 255 +mappingkey 0.839216 255 190 121 255 +mappingkey 0.843137 255 192 125 255 +mappingkey 0.847059 255 192 125 255 +mappingkey 0.85098 255 198 137 255 +mappingkey 0.854902 255 198 137 255 +mappingkey 0.858824 255 198 137 255 +mappingkey 0.862745 255 200 141 255 +mappingkey 0.866667 255 202 145 255 +mappingkey 0.870588 255 202 145 255 +mappingkey 0.87451 255 204 149 255 +mappingkey 0.878431 255 207 156 255 +mappingkey 0.882353 255 207 156 255 +mappingkey 0.886275 255 209 160 255 +mappingkey 0.890196 255 211 164 255 +mappingkey 0.894118 255 211 164 255 +mappingkey 0.898039 255 213 168 255 +mappingkey 0.901961 255 219 180 255 +mappingkey 0.905882 255 219 180 255 +mappingkey 0.909804 255 221 184 255 +mappingkey 0.913725 255 221 184 255 +mappingkey 0.917647 255 221 184 255 +mappingkey 0.921569 255 222 188 255 +mappingkey 0.92549 255 224 192 255 +mappingkey 0.929412 255 224 192 255 +mappingkey 0.933333 255 228 200 255 +mappingkey 0.937255 255 230 204 255 +mappingkey 0.941176 255 230 204 255 +mappingkey 0.945098 255 232 207 255 +mappingkey 0.94902 255 236 215 255 +mappingkey 0.952941 255 236 215 255 +mappingkey 0.956863 255 239 223 255 +mappingkey 0.960784 255 241 227 255 +mappingkey 0.964706 255 241 227 255 +mappingkey 0.968627 255 243 231 255 +mappingkey 0.972549 255 243 231 255 +mappingkey 0.976471 255 243 231 255 +mappingkey 0.980392 255 245 235 255 +mappingkey 0.984314 255 245 235 255 +mappingkey 0.988235 255 249 243 255 +mappingkey 0.992157 255 251 247 255 +mappingkey 0.996078 255 251 247 255 +mappingkey 1 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-335.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-335.txt new file mode 100644 index 0000000000..cc0127700e --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-335.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 0 1 15 255 +mappingkey 0.00784313771874 0 2 22 255 +mappingkey 0.0117647061124 0 3 27 255 +mappingkey 0.0156862754375 0 4 31 255 +mappingkey 0.0196078438312 0 5 35 255 +mappingkey 0.0235294122249 0 6 39 255 +mappingkey 0.0274509806186 0 7 42 255 +mappingkey 0.0313725508749 0 8 45 255 +mappingkey 0.0352941192687 0 9 47 255 +mappingkey 0.0392156876624 0 10 50 255 +mappingkey 0.0431372560561 0 11 52 255 +mappingkey 0.0470588244498 0 12 55 255 +mappingkey 0.0509803928435 0 13 57 255 +mappingkey 0.0549019612372 0 14 59 255 +mappingkey 0.0588235296309 0 15 61 255 +mappingkey 0.0627451017499 1 16 63 255 +mappingkey 0.0666666701436 1 17 65 255 +mappingkey 0.0705882385373 1 18 67 255 +mappingkey 0.074509806931 1 19 69 255 +mappingkey 0.0784313753247 1 20 71 255 +mappingkey 0.0823529437184 1 21 73 255 +mappingkey 0.0862745121121 1 22 74 255 +mappingkey 0.0901960805058 2 23 76 255 +mappingkey 0.0941176488996 2 24 78 255 +mappingkey 0.0980392172933 2 25 79 255 +mappingkey 0.101960785687 2 26 81 255 +mappingkey 0.105882354081 2 27 82 255 +mappingkey 0.109803922474 3 28 84 255 +mappingkey 0.113725490868 3 29 85 255 +mappingkey 0.117647059262 3 30 87 255 +mappingkey 0.121568627656 3 31 88 255 +mappingkey 0.1254902035 4 32 90 255 +mappingkey 0.129411771894 4 33 91 255 +mappingkey 0.133333340287 4 34 93 255 +mappingkey 0.137254908681 4 35 94 255 +mappingkey 0.141176477075 5 36 95 255 +mappingkey 0.145098045468 5 37 97 255 +mappingkey 0.149019613862 5 38 98 255 +mappingkey 0.152941182256 5 39 99 255 +mappingkey 0.156862750649 6 40 100 255 +mappingkey 0.160784319043 6 41 102 255 +mappingkey 0.164705887437 6 42 103 255 +mappingkey 0.168627455831 7 43 104 255 +mappingkey 0.172549024224 7 44 105 255 +mappingkey 0.176470592618 7 45 107 255 +mappingkey 0.180392161012 8 46 108 255 +mappingkey 0.184313729405 8 47 109 255 +mappingkey 0.188235297799 9 48 110 255 +mappingkey 0.192156866193 9 49 111 255 +mappingkey 0.196078434587 9 50 112 255 +mappingkey 0.20000000298 10 51 114 255 +mappingkey 0.203921571374 10 52 115 255 +mappingkey 0.207843139768 11 53 116 255 +mappingkey 0.211764708161 11 54 117 255 +mappingkey 0.215686276555 11 55 118 255 +mappingkey 0.219607844949 12 56 119 255 +mappingkey 0.223529413342 12 57 120 255 +mappingkey 0.227450981736 13 58 121 255 +mappingkey 0.23137255013 13 59 122 255 +mappingkey 0.235294118524 14 60 123 255 +mappingkey 0.239215686917 14 61 124 255 +mappingkey 0.243137255311 15 62 125 255 +mappingkey 0.247058823705 15 63 126 255 +mappingkey 0.250980407 16 64 127 255 +mappingkey 0.254901975393 16 65 128 255 +mappingkey 0.258823543787 17 66 129 255 +mappingkey 0.262745112181 17 67 130 255 +mappingkey 0.266666680574 18 68 131 255 +mappingkey 0.270588248968 18 69 132 255 +mappingkey 0.274509817362 19 70 133 255 +mappingkey 0.278431385756 19 71 134 255 +mappingkey 0.282352954149 20 72 135 255 +mappingkey 0.286274522543 20 73 136 255 +mappingkey 0.290196090937 21 74 137 255 +mappingkey 0.29411765933 22 75 138 255 +mappingkey 0.298039227724 22 76 139 255 +mappingkey 0.301960796118 23 77 140 255 +mappingkey 0.305882364511 23 78 141 255 +mappingkey 0.309803932905 24 79 141 255 +mappingkey 0.313725501299 25 80 142 255 +mappingkey 0.317647069693 25 81 143 255 +mappingkey 0.321568638086 26 82 144 255 +mappingkey 0.32549020648 27 83 145 255 +mappingkey 0.329411774874 27 84 146 255 +mappingkey 0.333333343267 28 85 147 255 +mappingkey 0.337254911661 29 86 148 255 +mappingkey 0.341176480055 29 87 148 255 +mappingkey 0.345098048449 30 88 149 255 +mappingkey 0.349019616842 31 89 150 255 +mappingkey 0.352941185236 31 90 151 255 +mappingkey 0.35686275363 32 91 152 255 +mappingkey 0.360784322023 33 92 153 255 +mappingkey 0.364705890417 33 93 153 255 +mappingkey 0.368627458811 34 94 154 255 +mappingkey 0.372549027205 35 95 155 255 +mappingkey 0.376470595598 36 96 156 255 +mappingkey 0.380392163992 36 97 157 255 +mappingkey 0.384313732386 37 98 158 255 +mappingkey 0.388235300779 38 99 158 255 +mappingkey 0.392156869173 39 100 159 255 +mappingkey 0.396078437567 40 101 160 255 +mappingkey 0.40000000596 40 102 161 255 +mappingkey 0.403921574354 41 103 162 255 +mappingkey 0.407843142748 42 104 162 255 +mappingkey 0.411764711142 43 105 163 255 +mappingkey 0.415686279535 44 106 164 255 +mappingkey 0.419607847929 44 107 165 255 +mappingkey 0.423529416323 45 108 165 255 +mappingkey 0.427450984716 46 109 166 255 +mappingkey 0.43137255311 47 110 167 255 +mappingkey 0.435294121504 48 111 168 255 +mappingkey 0.439215689898 49 112 168 255 +mappingkey 0.443137258291 50 113 169 255 +mappingkey 0.447058826685 50 114 170 255 +mappingkey 0.450980395079 51 115 171 255 +mappingkey 0.454901963472 52 116 171 255 +mappingkey 0.458823531866 53 117 172 255 +mappingkey 0.46274510026 54 118 173 255 +mappingkey 0.466666668653 55 119 174 255 +mappingkey 0.470588237047 56 120 174 255 +mappingkey 0.474509805441 57 121 175 255 +mappingkey 0.478431373835 58 122 176 255 +mappingkey 0.482352942228 59 123 177 255 +mappingkey 0.486274510622 60 124 177 255 +mappingkey 0.490196079016 61 125 178 255 +mappingkey 0.494117647409 62 126 179 255 +mappingkey 0.498039215803 63 127 179 255 +mappingkey 0.501960813999 64 128 180 255 +mappingkey 0.505882382393 65 129 181 255 +mappingkey 0.509803950787 66 130 182 255 +mappingkey 0.51372551918 67 131 182 255 +mappingkey 0.517647087574 68 132 183 255 +mappingkey 0.521568655968 69 133 184 255 +mappingkey 0.525490224361 70 134 184 255 +mappingkey 0.529411792755 71 135 185 255 +mappingkey 0.533333361149 72 136 186 255 +mappingkey 0.537254929543 73 137 186 255 +mappingkey 0.541176497936 74 138 187 255 +mappingkey 0.54509806633 75 139 188 255 +mappingkey 0.549019634724 76 140 188 255 +mappingkey 0.552941203117 77 141 189 255 +mappingkey 0.556862771511 79 142 190 255 +mappingkey 0.560784339905 80 143 190 255 +mappingkey 0.564705908298 81 144 191 255 +mappingkey 0.568627476692 82 145 192 255 +mappingkey 0.572549045086 83 146 192 255 +mappingkey 0.57647061348 84 147 193 255 +mappingkey 0.580392181873 85 148 194 255 +mappingkey 0.584313750267 87 149 194 255 +mappingkey 0.588235318661 88 150 195 255 +mappingkey 0.592156887054 89 151 196 255 +mappingkey 0.596078455448 90 152 196 255 +mappingkey 0.600000023842 91 153 197 255 +mappingkey 0.603921592236 93 154 198 255 +mappingkey 0.607843160629 94 155 198 255 +mappingkey 0.611764729023 95 156 199 255 +mappingkey 0.615686297417 96 157 200 255 +mappingkey 0.61960786581 97 158 200 255 +mappingkey 0.623529434204 99 159 201 255 +mappingkey 0.627451002598 100 160 201 255 +mappingkey 0.631372570992 101 161 202 255 +mappingkey 0.635294139385 102 162 203 255 +mappingkey 0.639215707779 104 163 203 255 +mappingkey 0.643137276173 105 164 204 255 +mappingkey 0.647058844566 106 165 205 255 +mappingkey 0.65098041296 108 166 205 255 +mappingkey 0.654901981354 109 167 206 255 +mappingkey 0.658823549747 110 168 206 255 +mappingkey 0.662745118141 112 169 207 255 +mappingkey 0.666666686535 113 170 208 255 +mappingkey 0.670588254929 114 171 208 255 +mappingkey 0.674509823322 116 172 209 255 +mappingkey 0.678431391716 117 173 210 255 +mappingkey 0.68235296011 118 174 210 255 +mappingkey 0.686274528503 120 175 211 255 +mappingkey 0.690196096897 121 176 211 255 +mappingkey 0.694117665291 122 177 212 255 +mappingkey 0.698039233685 124 178 213 255 +mappingkey 0.701960802078 125 179 213 255 +mappingkey 0.705882370472 127 180 214 255 +mappingkey 0.709803938866 128 181 214 255 +mappingkey 0.713725507259 129 182 215 255 +mappingkey 0.717647075653 131 183 216 255 +mappingkey 0.721568644047 132 184 216 255 +mappingkey 0.72549021244 134 185 217 255 +mappingkey 0.729411780834 135 186 217 255 +mappingkey 0.733333349228 137 187 218 255 +mappingkey 0.737254917622 138 188 218 255 +mappingkey 0.741176486015 140 189 219 255 +mappingkey 0.745098054409 141 190 220 255 +mappingkey 0.749019622803 143 191 220 255 +mappingkey 0.752941191196 144 192 221 255 +mappingkey 0.75686275959 146 193 221 255 +mappingkey 0.760784327984 147 194 222 255 +mappingkey 0.764705896378 149 195 222 255 +mappingkey 0.768627464771 150 196 223 255 +mappingkey 0.772549033165 152 197 224 255 +mappingkey 0.776470601559 153 198 224 255 +mappingkey 0.780392169952 155 199 225 255 +mappingkey 0.784313738346 156 200 225 255 +mappingkey 0.78823530674 158 201 226 255 +mappingkey 0.792156875134 160 202 226 255 +mappingkey 0.796078443527 161 203 227 255 +mappingkey 0.800000011921 163 204 228 255 +mappingkey 0.803921580315 164 205 228 255 +mappingkey 0.807843148708 166 206 229 255 +mappingkey 0.811764717102 168 207 229 255 +mappingkey 0.815686285496 169 208 230 255 +mappingkey 0.819607853889 171 209 230 255 +mappingkey 0.823529422283 172 210 231 255 +mappingkey 0.827450990677 174 211 231 255 +mappingkey 0.831372559071 176 212 232 255 +mappingkey 0.835294127464 177 213 233 255 +mappingkey 0.839215695858 179 214 233 255 +mappingkey 0.843137264252 181 215 234 255 +mappingkey 0.847058832645 182 216 234 255 +mappingkey 0.850980401039 184 217 235 255 +mappingkey 0.854901969433 186 218 235 255 +mappingkey 0.858823537827 188 219 236 255 +mappingkey 0.86274510622 189 220 236 255 +mappingkey 0.866666674614 191 221 237 255 +mappingkey 0.870588243008 193 222 237 255 +mappingkey 0.874509811401 195 223 238 255 +mappingkey 0.878431379795 196 224 238 255 +mappingkey 0.882352948189 198 225 239 255 +mappingkey 0.886274516582 200 226 240 255 +mappingkey 0.890196084976 202 227 240 255 +mappingkey 0.89411765337 203 228 241 255 +mappingkey 0.898039221764 205 229 241 255 +mappingkey 0.901960790157 207 230 242 255 +mappingkey 0.905882358551 209 231 242 255 +mappingkey 0.909803926945 211 232 243 255 +mappingkey 0.913725495338 212 233 243 255 +mappingkey 0.917647063732 214 234 244 255 +mappingkey 0.921568632126 216 235 244 255 +mappingkey 0.92549020052 218 236 245 255 +mappingkey 0.929411768913 220 237 245 255 +mappingkey 0.933333337307 222 238 246 255 +mappingkey 0.937254905701 224 239 246 255 +mappingkey 0.941176474094 225 240 247 255 +mappingkey 0.945098042488 227 241 247 255 +mappingkey 0.949019610882 229 242 248 255 +mappingkey 0.952941179276 231 243 248 255 +mappingkey 0.956862747669 233 244 249 255 +mappingkey 0.960784316063 235 245 249 255 +mappingkey 0.964705884457 237 246 250 255 +mappingkey 0.96862745285 239 247 250 255 +mappingkey 0.972549021244 241 248 251 255 +mappingkey 0.976470589638 243 249 251 255 +mappingkey 0.980392158031 245 250 252 255 +mappingkey 0.984313726425 247 251 252 255 +mappingkey 0.988235294819 249 252 253 255 +mappingkey 0.992156863213 251 253 253 255 +mappingkey 0.996078431606 253 254 254 255 +mappingkey 1.0 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-4500.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-4500.txt new file mode 100644 index 0000000000..04b61dfaa4 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-4500.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 1 1 0 255 +mappingkey 0.00784313771874 2 2 0 255 +mappingkey 0.0117647061124 3 3 0 255 +mappingkey 0.0156862754375 4 4 0 255 +mappingkey 0.0196078438312 5 5 0 255 +mappingkey 0.0235294122249 6 6 0 255 +mappingkey 0.0274509806186 7 7 0 255 +mappingkey 0.0313725508749 8 8 0 255 +mappingkey 0.0352941192687 9 9 0 255 +mappingkey 0.0392156876624 10 10 0 255 +mappingkey 0.0431372560561 11 11 0 255 +mappingkey 0.0470588244498 12 12 0 255 +mappingkey 0.0509803928435 13 13 0 255 +mappingkey 0.0549019612372 14 14 0 255 +mappingkey 0.0588235296309 15 15 0 255 +mappingkey 0.0627451017499 16 16 0 255 +mappingkey 0.0666666701436 17 17 0 255 +mappingkey 0.0705882385373 18 18 0 255 +mappingkey 0.074509806931 19 19 0 255 +mappingkey 0.0784313753247 20 20 0 255 +mappingkey 0.0823529437184 21 21 0 255 +mappingkey 0.0862745121121 22 22 0 255 +mappingkey 0.0901960805058 23 23 0 255 +mappingkey 0.0941176488996 24 24 0 255 +mappingkey 0.0980392172933 25 25 0 255 +mappingkey 0.101960785687 26 26 0 255 +mappingkey 0.105882354081 27 27 0 255 +mappingkey 0.109803922474 28 28 0 255 +mappingkey 0.113725490868 29 29 0 255 +mappingkey 0.117647059262 30 30 0 255 +mappingkey 0.121568627656 31 31 0 255 +mappingkey 0.1254902035 32 32 0 255 +mappingkey 0.129411771894 33 33 0 255 +mappingkey 0.133333340287 34 34 0 255 +mappingkey 0.137254908681 35 35 0 255 +mappingkey 0.141176477075 36 36 0 255 +mappingkey 0.145098045468 37 37 0 255 +mappingkey 0.149019613862 38 38 0 255 +mappingkey 0.152941182256 39 39 0 255 +mappingkey 0.156862750649 40 40 0 255 +mappingkey 0.160784319043 41 41 0 255 +mappingkey 0.164705887437 42 42 0 255 +mappingkey 0.168627455831 43 43 0 255 +mappingkey 0.172549024224 44 44 0 255 +mappingkey 0.176470592618 45 45 0 255 +mappingkey 0.180392161012 46 46 0 255 +mappingkey 0.184313729405 47 47 0 255 +mappingkey 0.188235297799 48 48 0 255 +mappingkey 0.192156866193 49 49 0 255 +mappingkey 0.196078434587 50 50 0 255 +mappingkey 0.20000000298 51 51 0 255 +mappingkey 0.203921571374 52 52 0 255 +mappingkey 0.207843139768 53 53 0 255 +mappingkey 0.211764708161 54 54 0 255 +mappingkey 0.215686276555 55 55 0 255 +mappingkey 0.219607844949 56 56 0 255 +mappingkey 0.223529413342 57 57 0 255 +mappingkey 0.227450981736 58 58 0 255 +mappingkey 0.23137255013 59 59 0 255 +mappingkey 0.235294118524 60 60 0 255 +mappingkey 0.239215686917 61 61 0 255 +mappingkey 0.243137255311 62 62 0 255 +mappingkey 0.247058823705 63 63 0 255 +mappingkey 0.250980407 64 64 0 255 +mappingkey 0.254901975393 65 65 0 255 +mappingkey 0.258823543787 66 66 0 255 +mappingkey 0.262745112181 67 67 0 255 +mappingkey 0.266666680574 68 68 0 255 +mappingkey 0.270588248968 69 69 0 255 +mappingkey 0.274509817362 70 70 0 255 +mappingkey 0.278431385756 71 71 0 255 +mappingkey 0.282352954149 72 72 0 255 +mappingkey 0.286274522543 73 73 0 255 +mappingkey 0.290196090937 74 74 0 255 +mappingkey 0.29411765933 75 75 0 255 +mappingkey 0.298039227724 76 76 0 255 +mappingkey 0.301960796118 77 77 0 255 +mappingkey 0.305882364511 78 78 0 255 +mappingkey 0.309803932905 79 79 0 255 +mappingkey 0.313725501299 80 80 0 255 +mappingkey 0.317647069693 81 81 0 255 +mappingkey 0.321568638086 82 82 0 255 +mappingkey 0.32549020648 83 83 0 255 +mappingkey 0.329411774874 84 84 0 255 +mappingkey 0.333333343267 85 85 0 255 +mappingkey 0.337254911661 86 86 0 255 +mappingkey 0.341176480055 87 87 0 255 +mappingkey 0.345098048449 88 88 0 255 +mappingkey 0.349019616842 89 89 0 255 +mappingkey 0.352941185236 90 90 0 255 +mappingkey 0.35686275363 91 91 0 255 +mappingkey 0.360784322023 92 92 0 255 +mappingkey 0.364705890417 93 93 0 255 +mappingkey 0.368627458811 94 94 0 255 +mappingkey 0.372549027205 95 95 0 255 +mappingkey 0.376470595598 96 96 0 255 +mappingkey 0.380392163992 97 97 0 255 +mappingkey 0.384313732386 98 98 0 255 +mappingkey 0.388235300779 99 99 0 255 +mappingkey 0.392156869173 100 100 0 255 +mappingkey 0.396078437567 101 101 0 255 +mappingkey 0.40000000596 102 102 0 255 +mappingkey 0.403921574354 103 103 0 255 +mappingkey 0.407843142748 104 104 0 255 +mappingkey 0.411764711142 105 105 0 255 +mappingkey 0.415686279535 106 106 0 255 +mappingkey 0.419607847929 107 107 0 255 +mappingkey 0.423529416323 108 108 0 255 +mappingkey 0.427450984716 109 109 0 255 +mappingkey 0.43137255311 110 110 0 255 +mappingkey 0.435294121504 111 111 0 255 +mappingkey 0.439215689898 112 112 0 255 +mappingkey 0.443137258291 113 113 0 255 +mappingkey 0.447058826685 114 114 0 255 +mappingkey 0.450980395079 115 115 0 255 +mappingkey 0.454901963472 116 116 0 255 +mappingkey 0.458823531866 117 117 0 255 +mappingkey 0.46274510026 118 118 0 255 +mappingkey 0.466666668653 119 119 0 255 +mappingkey 0.470588237047 120 120 0 255 +mappingkey 0.474509805441 121 121 0 255 +mappingkey 0.478431373835 122 122 0 255 +mappingkey 0.482352942228 123 123 0 255 +mappingkey 0.486274510622 124 124 0 255 +mappingkey 0.490196079016 125 125 0 255 +mappingkey 0.494117647409 126 126 0 255 +mappingkey 0.498039215803 127 127 0 255 +mappingkey 0.501960813999 128 128 0 255 +mappingkey 0.505882382393 129 129 0 255 +mappingkey 0.509803950787 130 130 0 255 +mappingkey 0.51372551918 131 131 0 255 +mappingkey 0.517647087574 132 132 0 255 +mappingkey 0.521568655968 133 133 0 255 +mappingkey 0.525490224361 134 134 0 255 +mappingkey 0.529411792755 135 135 0 255 +mappingkey 0.533333361149 136 136 0 255 +mappingkey 0.537254929543 137 137 0 255 +mappingkey 0.541176497936 138 138 0 255 +mappingkey 0.54509806633 139 139 0 255 +mappingkey 0.549019634724 140 140 0 255 +mappingkey 0.552941203117 141 141 0 255 +mappingkey 0.556862771511 142 142 0 255 +mappingkey 0.560784339905 143 143 0 255 +mappingkey 0.564705908298 144 144 0 255 +mappingkey 0.568627476692 145 145 0 255 +mappingkey 0.572549045086 146 146 0 255 +mappingkey 0.57647061348 147 147 0 255 +mappingkey 0.580392181873 148 148 0 255 +mappingkey 0.584313750267 149 149 0 255 +mappingkey 0.588235318661 150 150 0 255 +mappingkey 0.592156887054 151 151 0 255 +mappingkey 0.596078455448 152 152 0 255 +mappingkey 0.600000023842 153 153 0 255 +mappingkey 0.603921592236 154 154 0 255 +mappingkey 0.607843160629 155 155 0 255 +mappingkey 0.611764729023 156 156 0 255 +mappingkey 0.615686297417 157 157 0 255 +mappingkey 0.61960786581 158 158 0 255 +mappingkey 0.623529434204 159 159 0 255 +mappingkey 0.627451002598 160 160 0 255 +mappingkey 0.631372570992 161 161 0 255 +mappingkey 0.635294139385 162 162 0 255 +mappingkey 0.639215707779 163 163 0 255 +mappingkey 0.643137276173 164 164 0 255 +mappingkey 0.647058844566 165 165 0 255 +mappingkey 0.65098041296 166 166 0 255 +mappingkey 0.654901981354 167 167 0 255 +mappingkey 0.658823549747 168 168 0 255 +mappingkey 0.662745118141 169 169 0 255 +mappingkey 0.666666686535 170 170 0 255 +mappingkey 0.670588254929 171 171 0 255 +mappingkey 0.674509823322 172 172 0 255 +mappingkey 0.678431391716 173 173 0 255 +mappingkey 0.68235296011 174 174 0 255 +mappingkey 0.686274528503 175 175 0 255 +mappingkey 0.690196096897 176 176 0 255 +mappingkey 0.694117665291 177 177 0 255 +mappingkey 0.698039233685 178 178 0 255 +mappingkey 0.701960802078 179 179 0 255 +mappingkey 0.705882370472 180 180 0 255 +mappingkey 0.709803938866 181 181 0 255 +mappingkey 0.713725507259 182 182 0 255 +mappingkey 0.717647075653 183 183 0 255 +mappingkey 0.721568644047 184 184 0 255 +mappingkey 0.72549021244 185 185 0 255 +mappingkey 0.729411780834 186 186 0 255 +mappingkey 0.733333349228 187 187 0 255 +mappingkey 0.737254917622 188 188 0 255 +mappingkey 0.741176486015 189 189 0 255 +mappingkey 0.745098054409 190 190 0 255 +mappingkey 0.749019622803 191 191 1 255 +mappingkey 0.752941191196 192 192 3 255 +mappingkey 0.75686275959 193 193 5 255 +mappingkey 0.760784327984 194 194 7 255 +mappingkey 0.764705896378 195 195 9 255 +mappingkey 0.768627464771 196 196 11 255 +mappingkey 0.772549033165 197 197 13 255 +mappingkey 0.776470601559 198 198 15 255 +mappingkey 0.780392169952 199 199 17 255 +mappingkey 0.784313738346 200 200 19 255 +mappingkey 0.78823530674 201 201 21 255 +mappingkey 0.792156875134 202 202 23 255 +mappingkey 0.796078443527 203 203 25 255 +mappingkey 0.800000011921 204 204 27 255 +mappingkey 0.803921580315 205 205 29 255 +mappingkey 0.807843148708 206 206 31 255 +mappingkey 0.811764717102 207 207 33 255 +mappingkey 0.815686285496 208 208 35 255 +mappingkey 0.819607853889 209 209 37 255 +mappingkey 0.823529422283 210 210 39 255 +mappingkey 0.827450990677 211 211 41 255 +mappingkey 0.831372559071 212 212 43 255 +mappingkey 0.835294127464 213 213 45 255 +mappingkey 0.839215695858 214 214 47 255 +mappingkey 0.843137264252 215 215 49 255 +mappingkey 0.847058832645 216 216 51 255 +mappingkey 0.850980401039 217 217 52 255 +mappingkey 0.854901969433 218 218 54 255 +mappingkey 0.858823537827 219 219 56 255 +mappingkey 0.86274510622 220 220 58 255 +mappingkey 0.866666674614 221 221 60 255 +mappingkey 0.870588243008 222 222 62 255 +mappingkey 0.874509811401 223 223 64 255 +mappingkey 0.878431379795 224 224 66 255 +mappingkey 0.882352948189 225 225 68 255 +mappingkey 0.886274516582 226 226 70 255 +mappingkey 0.890196084976 227 227 72 255 +mappingkey 0.89411765337 228 228 74 255 +mappingkey 0.898039221764 229 229 76 255 +mappingkey 0.901960790157 230 230 78 255 +mappingkey 0.905882358551 231 231 80 255 +mappingkey 0.909803926945 232 232 82 255 +mappingkey 0.913725495338 233 233 84 255 +mappingkey 0.917647063732 234 234 86 255 +mappingkey 0.921568632126 235 235 88 255 +mappingkey 0.92549020052 236 236 90 255 +mappingkey 0.929411768913 237 237 92 255 +mappingkey 0.933333337307 238 238 94 255 +mappingkey 0.937254905701 239 239 96 255 +mappingkey 0.941176474094 240 240 98 255 +mappingkey 0.945098042488 241 241 100 255 +mappingkey 0.949019610882 242 242 102 255 +mappingkey 0.952941179276 243 243 103 255 +mappingkey 0.956862747669 244 244 105 255 +mappingkey 0.960784316063 245 245 107 255 +mappingkey 0.964705884457 246 246 109 255 +mappingkey 0.96862745285 247 247 111 255 +mappingkey 0.972549021244 248 248 113 255 +mappingkey 0.976470589638 249 249 115 255 +mappingkey 0.980392158031 250 250 117 255 +mappingkey 0.984313726425 251 251 119 255 +mappingkey 0.988235294819 252 252 121 255 +mappingkey 0.992156863213 253 253 123 255 +mappingkey 0.996078431606 254 254 125 255 +mappingkey 1.0 255 255 127 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-94.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-94.txt new file mode 100644 index 0000000000..92491cab31 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/AIA-94.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 0 0 0 255 +mappingkey 0.00784313771874 0 0 0 255 +mappingkey 0.0117647061124 0 0 0 255 +mappingkey 0.0156862754375 0 0 0 255 +mappingkey 0.0196078438312 0 0 0 255 +mappingkey 0.0235294122249 0 0 0 255 +mappingkey 0.0274509806186 0 0 0 255 +mappingkey 0.0313725508749 0 0 0 255 +mappingkey 0.0352941192687 0 0 0 255 +mappingkey 0.0392156876624 0 0 0 255 +mappingkey 0.0431372560561 0 0 0 255 +mappingkey 0.0470588244498 0 0 0 255 +mappingkey 0.0509803928435 0 0 0 255 +mappingkey 0.0549019612372 0 0 0 255 +mappingkey 0.0588235296309 0 0 0 255 +mappingkey 0.0627451017499 0 0 0 255 +mappingkey 0.0666666701436 0 0 0 255 +mappingkey 0.0705882385373 0 0 0 255 +mappingkey 0.074509806931 0 0 0 255 +mappingkey 0.0784313753247 0 0 0 255 +mappingkey 0.0823529437184 0 1 0 255 +mappingkey 0.0862745121121 0 4 0 255 +mappingkey 0.0901960805058 0 5 0 255 +mappingkey 0.0941176488996 0 6 0 255 +mappingkey 0.0980392172933 0 8 0 255 +mappingkey 0.101960785687 0 11 0 255 +mappingkey 0.105882354081 0 12 0 255 +mappingkey 0.109803922474 0 15 0 255 +mappingkey 0.113725490868 0 16 0 255 +mappingkey 0.117647059262 0 19 0 255 +mappingkey 0.121568627656 0 19 0 255 +mappingkey 0.1254902035 0 21 0 255 +mappingkey 0.129411771894 0 23 0 255 +mappingkey 0.133333340287 0 25 0 255 +mappingkey 0.137254908681 0 26 0 255 +mappingkey 0.141176477075 0 28 0 255 +mappingkey 0.145098045468 0 31 0 255 +mappingkey 0.149019613862 0 32 0 255 +mappingkey 0.152941182256 0 33 0 255 +mappingkey 0.156862750649 0 34 0 255 +mappingkey 0.160784319043 0 36 0 255 +mappingkey 0.164705887437 0 37 0 255 +mappingkey 0.168627455831 0 39 0 255 +mappingkey 0.172549024224 0 42 0 255 +mappingkey 0.176470592618 0 43 0 255 +mappingkey 0.180392161012 0 44 0 255 +mappingkey 0.184313729405 0 45 0 255 +mappingkey 0.188235297799 0 47 0 255 +mappingkey 0.192156866193 0 48 0 255 +mappingkey 0.196078434587 0 49 0 255 +mappingkey 0.20000000298 0 51 0 255 +mappingkey 0.203921571374 0 53 0 255 +mappingkey 0.207843139768 0 54 0 255 +mappingkey 0.211764708161 0 55 0 255 +mappingkey 0.215686276555 0 58 0 255 +mappingkey 0.219607844949 0 58 0 255 +mappingkey 0.223529413342 0 59 0 255 +mappingkey 0.227450981736 0 60 0 255 +mappingkey 0.23137255013 0 62 0 255 +mappingkey 0.235294118524 0 64 0 255 +mappingkey 0.239215686917 0 65 0 255 +mappingkey 0.243137255311 0 66 0 255 +mappingkey 0.247058823705 0 67 0 255 +mappingkey 0.250980407 0 69 0 255 +mappingkey 0.254901975393 0 70 0 255 +mappingkey 0.258823543787 0 70 0 255 +mappingkey 0.262745112181 0 72 0 255 +mappingkey 0.266666680574 0 73 0 255 +mappingkey 0.270588248968 0 75 0 255 +mappingkey 0.274509817362 0 76 0 255 +mappingkey 0.278431385756 0 77 0 255 +mappingkey 0.282352954149 0 78 0 255 +mappingkey 0.286274522543 0 80 0 255 +mappingkey 0.290196090937 0 82 0 255 +mappingkey 0.29411765933 0 83 0 255 +mappingkey 0.298039227724 0 83 0 255 +mappingkey 0.301960796118 0 84 0 255 +mappingkey 0.305882364511 0 86 0 255 +mappingkey 0.309803932905 0 87 0 255 +mappingkey 0.313725501299 0 88 0 255 +mappingkey 0.317647069693 0 89 0 255 +mappingkey 0.321568638086 0 92 0 255 +mappingkey 0.32549020648 0 93 0 255 +mappingkey 0.329411774874 0 94 0 255 +mappingkey 0.333333343267 0 95 0 255 +mappingkey 0.337254911661 0 97 0 255 +mappingkey 0.341176480055 0 97 0 255 +mappingkey 0.345098048449 1 98 0 255 +mappingkey 0.349019616842 3 99 0 255 +mappingkey 0.352941185236 4 100 0 255 +mappingkey 0.35686275363 9 103 0 255 +mappingkey 0.360784322023 11 104 0 255 +mappingkey 0.364705890417 12 105 0 255 +mappingkey 0.368627458811 14 106 0 255 +mappingkey 0.372549027205 14 106 0 255 +mappingkey 0.376470595598 17 108 0 255 +mappingkey 0.380392163992 19 109 0 255 +mappingkey 0.384313732386 19 109 0 255 +mappingkey 0.388235300779 20 110 0 255 +mappingkey 0.392156869173 22 111 0 255 +mappingkey 0.396078437567 27 114 0 255 +mappingkey 0.40000000596 29 115 0 255 +mappingkey 0.403921574354 30 116 0 255 +mappingkey 0.407843142748 32 117 0 255 +mappingkey 0.411764711142 32 117 0 255 +mappingkey 0.415686279535 35 119 0 255 +mappingkey 0.419607847929 37 120 0 255 +mappingkey 0.423529416323 38 121 0 255 +mappingkey 0.427450984716 38 121 0 255 +mappingkey 0.43137255311 41 123 0 255 +mappingkey 0.435294121504 45 125 0 255 +mappingkey 0.439215689898 45 125 0 255 +mappingkey 0.443137258291 46 126 0 255 +mappingkey 0.447058826685 48 127 0 255 +mappingkey 0.450980395079 50 128 0 255 +mappingkey 0.454901963472 53 130 0 255 +mappingkey 0.458823531866 54 131 0 255 +mappingkey 0.46274510026 58 133 0 255 +mappingkey 0.466666668653 58 133 0 255 +mappingkey 0.470588237047 59 134 0 255 +mappingkey 0.474509805441 59 134 0 255 +mappingkey 0.478431373835 62 136 0 255 +mappingkey 0.482352942228 64 137 0 255 +mappingkey 0.486274510622 66 138 0 255 +mappingkey 0.490196079016 66 138 0 255 +mappingkey 0.494117647409 67 139 0 255 +mappingkey 0.498039215803 71 141 0 255 +mappingkey 0.501960813999 74 143 0 255 +mappingkey 0.505882382393 75 144 0 255 +mappingkey 0.509803950787 75 144 0 255 +mappingkey 0.51372551918 77 145 0 255 +mappingkey 0.517647087574 80 147 0 255 +mappingkey 0.521568655968 80 147 0 255 +mappingkey 0.525490224361 82 148 0 255 +mappingkey 0.529411792755 82 148 0 255 +mappingkey 0.533333361149 83 149 0 255 +mappingkey 0.537254929543 85 150 0 255 +mappingkey 0.541176497936 90 153 0 255 +mappingkey 0.54509806633 91 154 0 255 +mappingkey 0.549019634724 91 154 0 255 +mappingkey 0.552941203117 93 155 0 255 +mappingkey 0.556862771511 95 156 0 255 +mappingkey 0.560784339905 98 158 0 255 +mappingkey 0.564705908298 100 159 0 255 +mappingkey 0.568627476692 100 159 0 255 +mappingkey 0.572549045086 101 160 0 255 +mappingkey 0.57647061348 101 160 0 255 +mappingkey 0.580392181873 103 161 0 255 +mappingkey 0.584313750267 103 161 0 255 +mappingkey 0.588235318661 108 164 0 255 +mappingkey 0.592156887054 109 165 0 255 +mappingkey 0.596078455448 111 166 0 255 +mappingkey 0.600000023842 112 167 0 255 +mappingkey 0.603921592236 112 167 0 255 +mappingkey 0.607843160629 116 169 0 255 +mappingkey 0.611764729023 117 170 0 255 +mappingkey 0.615686297417 119 171 0 255 +mappingkey 0.61960786581 119 171 0 255 +mappingkey 0.623529434204 121 172 0 255 +mappingkey 0.627451002598 121 172 0 255 +mappingkey 0.631372570992 125 175 0 255 +mappingkey 0.635294139385 125 175 0 255 +mappingkey 0.639215707779 127 176 0 255 +mappingkey 0.643137276173 129 177 0 255 +mappingkey 0.647058844566 130 178 0 255 +mappingkey 0.65098041296 130 178 0 255 +mappingkey 0.654901981354 133 180 0 255 +mappingkey 0.658823549747 135 181 0 255 +mappingkey 0.662745118141 135 181 0 255 +mappingkey 0.666666686535 137 182 3 255 +mappingkey 0.670588254929 140 184 10 255 +mappingkey 0.674509823322 143 186 17 255 +mappingkey 0.678431391716 143 186 17 255 +mappingkey 0.68235296011 143 186 17 255 +mappingkey 0.686274528503 145 187 20 255 +mappingkey 0.690196096897 146 188 24 255 +mappingkey 0.694117665291 146 188 24 255 +mappingkey 0.698039233685 148 189 27 255 +mappingkey 0.701960802078 151 191 34 255 +mappingkey 0.705882370472 151 191 34 255 +mappingkey 0.709803938866 153 192 37 255 +mappingkey 0.713725507259 156 194 44 255 +mappingkey 0.717647075653 158 195 48 255 +mappingkey 0.721568644047 158 195 48 255 +mappingkey 0.72549021244 161 197 55 255 +mappingkey 0.729411780834 163 198 58 255 +mappingkey 0.733333349228 163 198 58 255 +mappingkey 0.737254917622 163 198 58 255 +mappingkey 0.741176486015 164 199 62 255 +mappingkey 0.745098054409 166 200 65 255 +mappingkey 0.749019622803 166 200 65 255 +mappingkey 0.752941191196 169 202 72 255 +mappingkey 0.75686275959 172 204 79 255 +mappingkey 0.760784327984 172 204 79 255 +mappingkey 0.764705896378 174 205 82 255 +mappingkey 0.768627464771 175 206 86 255 +mappingkey 0.772549033165 175 206 86 255 +mappingkey 0.776470601559 179 208 93 255 +mappingkey 0.780392169952 180 209 96 255 +mappingkey 0.784313738346 182 210 99 255 +mappingkey 0.78823530674 182 210 99 255 +mappingkey 0.792156875134 183 211 103 255 +mappingkey 0.796078443527 183 211 103 255 +mappingkey 0.800000011921 183 211 103 255 +mappingkey 0.803921580315 187 213 110 255 +mappingkey 0.807843148708 190 215 117 255 +mappingkey 0.811764717102 190 215 117 255 +mappingkey 0.815686285496 192 216 120 255 +mappingkey 0.819607853889 193 217 124 255 +mappingkey 0.823529422283 193 217 124 255 +mappingkey 0.827450990677 196 219 130 255 +mappingkey 0.831372559071 198 220 134 255 +mappingkey 0.835294127464 198 220 134 255 +mappingkey 0.839215695858 200 221 137 255 +mappingkey 0.843137264252 201 222 141 255 +mappingkey 0.847058832645 201 222 141 255 +mappingkey 0.850980401039 206 225 151 255 +mappingkey 0.854901969433 206 225 151 255 +mappingkey 0.858823537827 206 225 151 255 +mappingkey 0.86274510622 208 226 155 255 +mappingkey 0.866666674614 209 227 158 255 +mappingkey 0.870588243008 209 227 158 255 +mappingkey 0.874509811401 211 228 161 255 +mappingkey 0.878431379795 214 230 168 255 +mappingkey 0.882352948189 214 230 168 255 +mappingkey 0.886274516582 216 231 172 255 +mappingkey 0.890196084976 217 232 175 255 +mappingkey 0.89411765337 217 232 175 255 +mappingkey 0.898039221764 219 233 179 255 +mappingkey 0.901960790157 224 236 189 255 +mappingkey 0.905882358551 224 236 189 255 +mappingkey 0.909803926945 225 237 192 255 +mappingkey 0.913725495338 225 237 192 255 +mappingkey 0.917647063732 225 237 192 255 +mappingkey 0.921568632126 227 238 196 255 +mappingkey 0.92549020052 229 239 199 255 +mappingkey 0.929411768913 229 239 199 255 +mappingkey 0.933333337307 232 241 206 255 +mappingkey 0.937254905701 234 242 210 255 +mappingkey 0.941176474094 234 242 210 255 +mappingkey 0.945098042488 235 243 213 255 +mappingkey 0.949019610882 238 245 220 255 +mappingkey 0.952941179276 238 245 220 255 +mappingkey 0.956862747669 242 247 227 255 +mappingkey 0.960784316063 243 248 230 255 +mappingkey 0.964705884457 243 248 230 255 +mappingkey 0.96862745285 245 249 234 255 +mappingkey 0.972549021244 245 249 234 255 +mappingkey 0.976470589638 245 249 234 255 +mappingkey 0.980392158031 246 250 237 255 +mappingkey 0.984313726425 246 250 237 255 +mappingkey 0.988235294819 250 252 244 255 +mappingkey 0.992156863213 251 253 248 255 +mappingkey 0.996078431606 251 253 248 255 +mappingkey 1.0 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/EUVI-A-171.txt b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/EUVI-A-171.txt new file mode 100644 index 0000000000..5b9fc8300a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/colortables/EUVI-A-171.txt @@ -0,0 +1,259 @@ +width 256 +lower 0.0 +upper 1.0 +mappingkey 0.0 0 0 0 255 +mappingkey 0.00392156885937 1 1 0 255 +mappingkey 0.00784313771874 2 2 0 255 +mappingkey 0.0117647061124 4 3 0 255 +mappingkey 0.0156862754375 5 4 0 255 +mappingkey 0.0196078438312 7 5 0 255 +mappingkey 0.0235294122249 8 6 0 255 +mappingkey 0.0274509806186 10 7 0 255 +mappingkey 0.0313725508749 11 8 0 255 +mappingkey 0.0352941192687 13 9 0 255 +mappingkey 0.0392156876624 14 10 0 255 +mappingkey 0.0431372560561 15 11 0 255 +mappingkey 0.0470588244498 17 12 0 255 +mappingkey 0.0509803928435 18 13 0 255 +mappingkey 0.0549019612372 20 14 0 255 +mappingkey 0.0588235296309 21 15 0 255 +mappingkey 0.0627451017499 23 16 0 255 +mappingkey 0.0666666701436 24 17 0 255 +mappingkey 0.0705882385373 26 18 0 255 +mappingkey 0.074509806931 27 19 0 255 +mappingkey 0.0784313753247 28 20 0 255 +mappingkey 0.0823529437184 30 21 0 255 +mappingkey 0.0862745121121 31 22 0 255 +mappingkey 0.0901960805058 33 23 0 255 +mappingkey 0.0941176488996 34 24 0 255 +mappingkey 0.0980392172933 36 25 0 255 +mappingkey 0.101960785687 37 26 0 255 +mappingkey 0.105882354081 39 27 0 255 +mappingkey 0.109803922474 40 28 0 255 +mappingkey 0.113725490868 42 29 0 255 +mappingkey 0.117647059262 43 30 0 255 +mappingkey 0.121568627656 44 31 0 255 +mappingkey 0.1254902035 46 32 0 255 +mappingkey 0.129411771894 47 33 0 255 +mappingkey 0.133333340287 49 34 0 255 +mappingkey 0.137254908681 50 35 0 255 +mappingkey 0.141176477075 52 36 0 255 +mappingkey 0.145098045468 53 37 0 255 +mappingkey 0.149019613862 55 38 0 255 +mappingkey 0.152941182256 56 39 0 255 +mappingkey 0.156862750649 57 40 0 255 +mappingkey 0.160784319043 59 41 0 255 +mappingkey 0.164705887437 60 42 0 255 +mappingkey 0.168627455831 62 43 0 255 +mappingkey 0.172549024224 63 44 0 255 +mappingkey 0.176470592618 65 45 0 255 +mappingkey 0.180392161012 66 46 0 255 +mappingkey 0.184313729405 68 47 0 255 +mappingkey 0.188235297799 69 48 0 255 +mappingkey 0.192156866193 70 49 0 255 +mappingkey 0.196078434587 72 50 0 255 +mappingkey 0.20000000298 73 51 0 255 +mappingkey 0.203921571374 75 52 0 255 +mappingkey 0.207843139768 76 53 0 255 +mappingkey 0.211764708161 78 54 0 255 +mappingkey 0.215686276555 79 55 0 255 +mappingkey 0.219607844949 81 56 0 255 +mappingkey 0.223529413342 82 57 0 255 +mappingkey 0.227450981736 84 58 0 255 +mappingkey 0.23137255013 85 59 0 255 +mappingkey 0.235294118524 86 60 0 255 +mappingkey 0.239215686917 88 61 0 255 +mappingkey 0.243137255311 89 62 0 255 +mappingkey 0.247058823705 91 63 0 255 +mappingkey 0.250980407 92 64 0 255 +mappingkey 0.254901975393 94 65 0 255 +mappingkey 0.258823543787 95 66 0 255 +mappingkey 0.262745112181 97 67 0 255 +mappingkey 0.266666680574 98 68 0 255 +mappingkey 0.270588248968 99 69 0 255 +mappingkey 0.274509817362 101 70 0 255 +mappingkey 0.278431385756 102 71 0 255 +mappingkey 0.282352954149 104 72 0 255 +mappingkey 0.286274522543 105 73 0 255 +mappingkey 0.290196090937 107 74 0 255 +mappingkey 0.29411765933 108 75 0 255 +mappingkey 0.298039227724 110 76 0 255 +mappingkey 0.301960796118 111 77 0 255 +mappingkey 0.305882364511 113 78 0 255 +mappingkey 0.309803932905 114 79 0 255 +mappingkey 0.313725501299 115 80 0 255 +mappingkey 0.317647069693 117 81 0 255 +mappingkey 0.321568638086 118 82 0 255 +mappingkey 0.32549020648 120 83 0 255 +mappingkey 0.329411774874 121 84 0 255 +mappingkey 0.333333343267 123 85 0 255 +mappingkey 0.337254911661 124 86 0 255 +mappingkey 0.341176480055 126 87 0 255 +mappingkey 0.345098048449 127 88 0 255 +mappingkey 0.349019616842 128 89 0 255 +mappingkey 0.352941185236 130 90 0 255 +mappingkey 0.35686275363 131 91 0 255 +mappingkey 0.360784322023 133 92 0 255 +mappingkey 0.364705890417 134 93 0 255 +mappingkey 0.368627458811 136 94 0 255 +mappingkey 0.372549027205 137 95 0 255 +mappingkey 0.376470595598 139 96 0 255 +mappingkey 0.380392163992 140 97 0 255 +mappingkey 0.384313732386 141 98 0 255 +mappingkey 0.388235300779 143 99 0 255 +mappingkey 0.392156869173 144 100 0 255 +mappingkey 0.396078437567 146 101 0 255 +mappingkey 0.40000000596 147 102 0 255 +mappingkey 0.403921574354 149 103 0 255 +mappingkey 0.407843142748 150 104 0 255 +mappingkey 0.411764711142 152 105 0 255 +mappingkey 0.415686279535 153 106 0 255 +mappingkey 0.419607847929 155 107 0 255 +mappingkey 0.423529416323 156 108 0 255 +mappingkey 0.427450984716 157 109 0 255 +mappingkey 0.43137255311 159 110 0 255 +mappingkey 0.435294121504 160 111 0 255 +mappingkey 0.439215689898 162 112 0 255 +mappingkey 0.443137258291 163 113 0 255 +mappingkey 0.447058826685 165 114 0 255 +mappingkey 0.450980395079 166 115 0 255 +mappingkey 0.454901963472 168 116 0 255 +mappingkey 0.458823531866 169 117 0 255 +mappingkey 0.46274510026 170 118 0 255 +mappingkey 0.466666668653 172 119 0 255 +mappingkey 0.470588237047 173 120 0 255 +mappingkey 0.474509805441 175 121 0 255 +mappingkey 0.478431373835 176 122 0 255 +mappingkey 0.482352942228 178 123 0 255 +mappingkey 0.486274510622 179 124 0 255 +mappingkey 0.490196079016 181 125 0 255 +mappingkey 0.494117647409 182 126 0 255 +mappingkey 0.498039215803 184 127 0 255 +mappingkey 0.501960813999 185 128 0 255 +mappingkey 0.505882382393 186 129 0 255 +mappingkey 0.509803950787 188 130 0 255 +mappingkey 0.51372551918 189 131 0 255 +mappingkey 0.517647087574 191 132 0 255 +mappingkey 0.521568655968 192 133 0 255 +mappingkey 0.525490224361 194 134 0 255 +mappingkey 0.529411792755 195 135 0 255 +mappingkey 0.533333361149 197 136 0 255 +mappingkey 0.537254929543 198 137 0 255 +mappingkey 0.541176497936 199 138 0 255 +mappingkey 0.54509806633 201 139 0 255 +mappingkey 0.549019634724 202 140 0 255 +mappingkey 0.552941203117 204 141 0 255 +mappingkey 0.556862771511 205 142 0 255 +mappingkey 0.560784339905 207 143 0 255 +mappingkey 0.564705908298 208 144 0 255 +mappingkey 0.568627476692 210 145 0 255 +mappingkey 0.572549045086 211 146 0 255 +mappingkey 0.57647061348 212 147 0 255 +mappingkey 0.580392181873 214 148 0 255 +mappingkey 0.584313750267 215 149 0 255 +mappingkey 0.588235318661 217 150 0 255 +mappingkey 0.592156887054 218 151 0 255 +mappingkey 0.596078455448 220 152 0 255 +mappingkey 0.600000023842 221 153 0 255 +mappingkey 0.603921592236 223 154 0 255 +mappingkey 0.607843160629 224 155 0 255 +mappingkey 0.611764729023 226 156 0 255 +mappingkey 0.615686297417 227 157 0 255 +mappingkey 0.61960786581 228 158 0 255 +mappingkey 0.623529434204 230 159 0 255 +mappingkey 0.627451002598 231 160 0 255 +mappingkey 0.631372570992 233 161 0 255 +mappingkey 0.635294139385 234 162 0 255 +mappingkey 0.639215707779 236 163 0 255 +mappingkey 0.643137276173 237 164 0 255 +mappingkey 0.647058844566 239 165 0 255 +mappingkey 0.65098041296 240 166 0 255 +mappingkey 0.654901981354 241 167 0 255 +mappingkey 0.658823549747 243 168 0 255 +mappingkey 0.662745118141 244 169 0 255 +mappingkey 0.666666686535 246 170 0 255 +mappingkey 0.670588254929 247 171 0 255 +mappingkey 0.674509823322 249 172 0 255 +mappingkey 0.678431391716 250 173 0 255 +mappingkey 0.68235296011 252 174 0 255 +mappingkey 0.686274528503 253 175 0 255 +mappingkey 0.690196096897 255 176 0 255 +mappingkey 0.694117665291 255 177 0 255 +mappingkey 0.698039233685 255 178 0 255 +mappingkey 0.701960802078 255 179 0 255 +mappingkey 0.705882370472 255 180 0 255 +mappingkey 0.709803938866 255 181 0 255 +mappingkey 0.713725507259 255 182 0 255 +mappingkey 0.717647075653 255 183 0 255 +mappingkey 0.721568644047 255 184 0 255 +mappingkey 0.72549021244 255 185 0 255 +mappingkey 0.729411780834 255 186 0 255 +mappingkey 0.733333349228 255 187 0 255 +mappingkey 0.737254917622 255 188 0 255 +mappingkey 0.741176486015 255 189 0 255 +mappingkey 0.745098054409 255 190 0 255 +mappingkey 0.749019622803 255 191 3 255 +mappingkey 0.752941191196 255 192 7 255 +mappingkey 0.75686275959 255 193 11 255 +mappingkey 0.760784327984 255 194 15 255 +mappingkey 0.764705896378 255 195 19 255 +mappingkey 0.768627464771 255 196 23 255 +mappingkey 0.772549033165 255 197 27 255 +mappingkey 0.776470601559 255 198 31 255 +mappingkey 0.780392169952 255 199 35 255 +mappingkey 0.784313738346 255 200 39 255 +mappingkey 0.78823530674 255 201 43 255 +mappingkey 0.792156875134 255 202 47 255 +mappingkey 0.796078443527 255 203 51 255 +mappingkey 0.800000011921 255 204 54 255 +mappingkey 0.803921580315 255 205 58 255 +mappingkey 0.807843148708 255 206 62 255 +mappingkey 0.811764717102 255 207 66 255 +mappingkey 0.815686285496 255 208 70 255 +mappingkey 0.819607853889 255 209 74 255 +mappingkey 0.823529422283 255 210 78 255 +mappingkey 0.827450990677 255 211 82 255 +mappingkey 0.831372559071 255 212 86 255 +mappingkey 0.835294127464 255 213 90 255 +mappingkey 0.839215695858 255 214 94 255 +mappingkey 0.843137264252 255 215 98 255 +mappingkey 0.847058832645 255 216 102 255 +mappingkey 0.850980401039 255 217 105 255 +mappingkey 0.854901969433 255 218 109 255 +mappingkey 0.858823537827 255 219 113 255 +mappingkey 0.86274510622 255 220 117 255 +mappingkey 0.866666674614 255 221 121 255 +mappingkey 0.870588243008 255 222 125 255 +mappingkey 0.874509811401 255 223 129 255 +mappingkey 0.878431379795 255 224 133 255 +mappingkey 0.882352948189 255 225 137 255 +mappingkey 0.886274516582 255 226 141 255 +mappingkey 0.890196084976 255 227 145 255 +mappingkey 0.89411765337 255 228 149 255 +mappingkey 0.898039221764 255 229 153 255 +mappingkey 0.901960790157 255 230 156 255 +mappingkey 0.905882358551 255 231 160 255 +mappingkey 0.909803926945 255 232 164 255 +mappingkey 0.913725495338 255 233 168 255 +mappingkey 0.917647063732 255 234 172 255 +mappingkey 0.921568632126 255 235 176 255 +mappingkey 0.92549020052 255 236 180 255 +mappingkey 0.929411768913 255 237 184 255 +mappingkey 0.933333337307 255 238 188 255 +mappingkey 0.937254905701 255 239 192 255 +mappingkey 0.941176474094 255 240 196 255 +mappingkey 0.945098042488 255 241 200 255 +mappingkey 0.949019610882 255 242 204 255 +mappingkey 0.952941179276 255 243 207 255 +mappingkey 0.956862747669 255 244 211 255 +mappingkey 0.960784316063 255 245 215 255 +mappingkey 0.964705884457 255 246 219 255 +mappingkey 0.96862745285 255 247 223 255 +mappingkey 0.972549021244 255 248 227 255 +mappingkey 0.976470589638 255 249 231 255 +mappingkey 0.980392158031 255 250 235 255 +mappingkey 0.984313726425 255 251 239 255 +mappingkey 0.988235294819 255 252 243 255 +mappingkey 0.992156863213 255 253 247 255 +mappingkey 0.996078431606 255 254 251 255 +mappingkey 1.0 255 255 255 255 diff --git a/data/assets/scene/solarsystem/missions/parkersolarprobe/transforms.asset b/data/assets/scene/solarsystem/missions/parkersolarprobe/transforms.asset new file mode 100644 index 0000000000..ebdacde22a --- /dev/null +++ b/data/assets/scene/solarsystem/missions/parkersolarprobe/transforms.asset @@ -0,0 +1,41 @@ +local assetHelper = asset.require('util/asset_helper') +local sunTransforms = asset.require('scene/solarsystem/sun/transforms') +local earthTransforms = asset.require('scene/solarsystem/planets/earth/transforms') + +local HNMKernel = asset.localResource("kernels/HNM.tf") +local GSMKernel = asset.localResource("kernels/GSM.ti") + +local HNMReferenceFrame = { + Identifier = "HNMReferenceFrame", + Parent = sunTransforms.SolarSystemBarycenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "HEEQ180", + DestinationFrame = "GALACTIC", + Kernels = HNMKernel + } + }, + GUI = { + Name = "HNM Reference Frame" + } +} + +local GSMReferenceFrame = { + Identifier = "GSMReferenceFrame", + Parent = earthTransforms.EarthBarycenter.Identifier, + Transform = { + Rotation = { + Type = "SpiceRotation", + SourceFrame = "GSM", + DestinationFrame = "GALACTIC", + Kernels = GSMKernel + } + }, + GUI = { + Name = "GSM Reference Frame" + } +} + +local objects = { HNMReferenceFrame, GSMReferenceFrame } +assetHelper.registerSceneGraphNodesAndExport(asset, objects) diff --git a/data/tasks/solarbrowsing/download_from_helioviewer.task b/data/tasks/solarbrowsing/download_from_helioviewer.task new file mode 100644 index 0000000000..1282cab23f --- /dev/null +++ b/data/tasks/solarbrowsing/download_from_helioviewer.task @@ -0,0 +1,24 @@ +-- Example task for downloading data from Helioviewer API +-- Valid sourceIds can be found at https://api.helioviewer.org/docs/v2/#appendix + +return {{ + Type = "HelioviewerDownloadTask", + SourceId = 10, + Name = "SDO", + Instrument = "AIA-171", + StartTime = "2018-10-15T00:00:00.000Z", + EndTime = "2018-11-16T00:00:00.000Z", + TimeStep = 60*60, -- Download an image every hour + OutputFolder = "${DATA}/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/imagedata/sdo_aia-171", + TimeKernel = "${DATA}/assets/spice/naif0012.tls" +}, { + Type = "HelioviewerDownloadTask", + SourceId = 20, + Name = "STEREO-A", + Instrument = "EUVI-A-171", + StartTime = "2018-10-15T00:00:00.000Z", + EndTime = "2018-11-16T00:00:00.000Z", + TimeStep = 60*60, -- Download an image every hour + OutputFolder = "${DATA}/assets/scene/solarsystem/missions/parkersolarprobe/solarbrowsing/imagedata/stereo-a_euvi-171", + TimeKernel = "${DATA}/assets/spice/naif0012.tls" +}} diff --git a/include/openspace/util/timeline.h b/include/openspace/util/timeline.h index a998153f8c..9e1993624e 100644 --- a/include/openspace/util/timeline.h +++ b/include/openspace/util/timeline.h @@ -72,7 +72,9 @@ public: void removeKeyframesBetween(double begin, double end, bool inclusiveBegin = false, bool inclusiveEnd = false); size_t nKeyframes() const; + Keyframe* firstKeyframeAfter(double timestamp, bool inclusive = false); const Keyframe* firstKeyframeAfter(double timestamp, bool inclusive = false) const; + Keyframe* lastKeyframeBefore(double timestamp, bool inclusive = false); const Keyframe* lastKeyframeBefore(double timestamp, bool inclusive = false) const; const std::deque>& keyframes() const; diff --git a/include/openspace/util/timeline.inl b/include/openspace/util/timeline.inl index 41fcd558a5..2c5a53a6fd 100644 --- a/include/openspace/util/timeline.inl +++ b/include/openspace/util/timeline.inl @@ -168,6 +168,34 @@ size_t Timeline::nKeyframes() const { return _keyframes.size(); } + +template +Keyframe* Timeline::firstKeyframeAfter(double timestamp, bool inclusive) +{ + typename std::deque>::iterator it; + if (inclusive) { + it = std::lower_bound( + _keyframes.begin(), + _keyframes.end(), + timestamp, + &compareKeyframeTimeWithTime + ); + } + else { + it = std::upper_bound( + _keyframes.begin(), + _keyframes.end(), + timestamp, + &compareTimeWithKeyframeTime + ); + } + + if (it == _keyframes.end()) { + return nullptr; + } + return &(*it); +} + template const Keyframe* Timeline::firstKeyframeAfter(double timestamp, bool inclusive) const { @@ -195,6 +223,34 @@ const Keyframe* Timeline::firstKeyframeAfter(double timestamp, bool inclus return &(*it); } +template +Keyframe* Timeline::lastKeyframeBefore(double timestamp, bool inclusive) +{ + typename std::deque>::iterator it; + if (inclusive) { + it = std::upper_bound( + _keyframes.begin(), + _keyframes.end(), + timestamp, + &compareTimeWithKeyframeTime + ); + } + else { + it = std::lower_bound( + _keyframes.begin(), + _keyframes.end(), + timestamp, + &compareKeyframeTimeWithTime + ); + } + + if (it == _keyframes.begin()) { + return nullptr; + } + it--; + return &(*it); +} + template const Keyframe* Timeline::lastKeyframeBefore(double timestamp, bool inclusive) const { diff --git a/modules/solarbrowsing/CMakeLists.txt b/modules/solarbrowsing/CMakeLists.txt new file mode 100644 index 0000000000..e2196edb33 --- /dev/null +++ b/modules/solarbrowsing/CMakeLists.txt @@ -0,0 +1,86 @@ +########################################################################################## +# # +# OpenSpace # +# # +# Copyright (c) 2014-2017 # +# # +# Permission is hereby granted, free of charge, to any person obtaining a copy of this # +# software and associated documentation files (the "Software"), to deal in the Software # +# without restriction, including without limitation the rights to use, copy, modify, # +# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to # +# permit persons to whom the Software is furnished to do so, subject to the following # +# conditions: # +# # +# The above copyright notice and this permission notice shall be included in all copies # +# or substantial portions of the Software. # +# # +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # +# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # +# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF # +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE # +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # +########################################################################################## + +include(${PROJECT_SOURCE_DIR}/support/cmake/module_definition.cmake) + +set(OPENJPEG_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/openjpeg/") +#set(H264_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ext/libde265/") +#add_subdirectory(${OPENJPEG_ROOT_DIR}) +#add_subdirectory(${H264_ROOT_DIR}) + +set(HEADER_FILES + # Other + ${CMAKE_CURRENT_SOURCE_DIR}/util/spacecraftimagerymanager.h + ${CMAKE_CURRENT_SOURCE_DIR}/util/j2kcodec.h + + ${CMAKE_CURRENT_SOURCE_DIR}/util/structs.h + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderablesolarimagery.h + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderablesolarimageryprojection.h + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/spacecraftcameraplane.h + ${CMAKE_CURRENT_SOURCE_DIR}/tasks/helioviewerdownloadtask.h + ${CMAKE_CURRENT_SOURCE_DIR}/util/pixelbufferobject.h +) + +source_group("Header Files" FILES ${HEADER_FILES}) + +set(SOURCE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/util/spacecraftimagerymanager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/util/j2kcodec.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderablesolarimagery.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/renderablesolarimageryprojection.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/rendering/spacecraftcameraplane.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tasks/helioviewerdownloadtask.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/util/pixelbufferobject.cpp +) +source_group("Source Files" FILES ${SOURCE_FILES}) + +create_new_module("SolarBrowsing" solarbrowsing_module ${HEADER_FILES} ${SOURCE_FILES}) + +# include_external_library(openspace-module-solarbrowsing PRIVATE openjp2 ${OPENJPEG_ROOT_DIR}) +add_subdirectory(${OPENJPEG_ROOT_DIR} SYSTEM) +set_target_properties(openjp2 PROPERTIES FOLDER "External") +target_link_libraries(openspace-module-solarbrowsing PRIVATE openjp2) +# target_include + + + +target_include_directories(openspace-module-solarbrowsing SYSTEM PUBLIC ${HEADER_FILES}) + +target_include_directories( + openspace-module-solarbrowsing PUBLIC + # Openjpeg stuff + ${OPENJPEG_BINARY_DIR}/src/lib/openjp2 + ${OPENJPEG_BINARY_DIR}/src/bin/common + ${OPENJPEG_ROOT_DIR}/src/lib/openjp2 + ${OPENJPEG_ROOT_DIR}/src/bin/jp2 + ${OPENJPEG_ROOT_DIR}/src/bin/common + ${Z_INCLUDE_DIRNAME} + ${PNG_INCLUDE_DIRNAME} + ${TIFF_INCLUDE_DIRNAME} + ${CMAKE_SOURCE_DIR}/include + ${TIFF_INCLUDE_DIRNAME} +) + +# Force static linking to prevent __imp* linker errors +target_compile_definitions(openspace-module-solarbrowsing PUBLIC "OPJ_STATIC") \ No newline at end of file diff --git a/modules/solarbrowsing/ext/openjpeg b/modules/solarbrowsing/ext/openjpeg new file mode 160000 index 0000000000..1ad9bec2c1 --- /dev/null +++ b/modules/solarbrowsing/ext/openjpeg @@ -0,0 +1 @@ +Subproject commit 1ad9bec2c12ee445ce23e660f5e4fe870b9d5e09 diff --git a/modules/solarbrowsing/include.cmake b/modules/solarbrowsing/include.cmake new file mode 100644 index 0000000000..6506e38fd2 --- /dev/null +++ b/modules/solarbrowsing/include.cmake @@ -0,0 +1,4 @@ +set (OPENSPACE_DEPENDENCIES + space + base +) diff --git a/modules/solarbrowsing/rendering/renderablesolarimagery.cpp b/modules/solarbrowsing/rendering/renderablesolarimagery.cpp new file mode 100644 index 0000000000..8c94d56082 --- /dev/null +++ b/modules/solarbrowsing/rendering/renderablesolarimagery.cpp @@ -0,0 +1,355 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + constexpr const char* _loggerCat = "RenderableSolarImagery"; + constexpr const char* KeyStartInstrument = "StartInstrument"; + + constexpr const unsigned int DefaultTextureSize = 32; + constexpr const unsigned int MaxImageResolution = 4096; + + static const openspace::properties::Property::PropertyInfo ActiveInstrumentsInfo = { + "ActiveInstrument", + "Active instrument", + "The active instrument of the current spacecraft imagery" + }; + static const openspace::properties::Property::PropertyInfo ContrastValueInfo = { + "ContrastValue", + "Contrast", + "Contrast of the current spacecraft imagery" + }; + static const openspace::properties::Property::PropertyInfo EnableBorderInfo = { + "EnableBorder", + "Enable Border", + "Enables border around the current spacecraft imagery" + }; + static const openspace::properties::Property::PropertyInfo EnableFrustumInfo = { + "EnableFrustum", + "Enable frustum", + "Enables frustum around the current spacecraft imagery" + }; + static const openspace::properties::Property::PropertyInfo GammaValueInfo = { + "GammaValue", + "Gamma", + "Gamma of the current spacecraft imagery" + }; + static const openspace::properties::Property::PropertyInfo MoveFactorInfo = { + "MoveFactor", + "Move Factor", + "How close to the sun to render the imagery" + }; + static const openspace::properties::Property::PropertyInfo PlaneOpacityInfo = { + "PlaneOpacity", + "Plane Opacity", + "Opacity of the image plane" + }; + static const openspace::properties::Property::PropertyInfo DownsamplingLevelInfo = { + "DownsamplingLevel", + "Downsampling Level", + "How much to downsample the original data. 0 is original resolution." + }; + static const openspace::properties::Property::PropertyInfo VerboseModeInfo = { + "VerboseMode", + "Verbose Mode", + "Output information about image decoding etc" + }; + + struct [[codegen::Dictionary(RenderableSolarImagery)]] Parameters { + std::string rootPath; + + std::string transferfunctionPath; + }; + +#include "renderablesolarimagery_codegen.cpp"; +} + +namespace openspace { + +documentation::Documentation RenderableSolarImagery::Documentation() { + return codegen::doc("renderablesolarimegary"); +} + +RenderableSolarImagery::RenderableSolarImagery(const ghoul::Dictionary& dictionary) + : Renderable(dictionary) + , _activeInstruments(ActiveInstrumentsInfo) + , _contrastValue(ContrastValueInfo, 0.f, -15.f, 15.f) + , _enableBorder(EnableBorderInfo, false) + , _enableFrustum(EnableFrustumInfo, false) + , _gammaValue(GammaValueInfo, 0.9f, 0.1f, 10.f) + , _moveFactor(MoveFactorInfo, 1.0, 0.0, 1.0) + , _planeOpacity(PlaneOpacityInfo, 1.f, 0.f, 1.f) + , _downsamplingLevel(DownsamplingLevelInfo, 2, 0, 5) + , _verboseMode(VerboseModeInfo, false) +{ + const Parameters p = codegen::bake(dictionary); + + std::string rootPath = p.rootPath; + + SolarBrowsingModule* solarbrowsingModule = + global::moduleEngine->module(); + + SpacecraftImageryManager& spacecraftImageryManager = + solarbrowsingModule->spacecraftImageryManager(); + + std::string transferfunctionPath = p.transferfunctionPath; + + + spacecraftImageryManager.loadTransferFunctions(transferfunctionPath, _tfMap); + + + spacecraftImageryManager.loadImageMetadata(rootPath, _imageMetadataMap); + + // Add GUI names + unsigned int guiNameCount = 0; + using K = std::string; + using V = Timeline; + for (const std::pair& el : _imageMetadataMap) { + _activeInstruments.addOption(guiNameCount++, el.first); + } + + if (dictionary.hasKey(KeyStartInstrument)) { + _currentActiveInstrument = dictionary.value(KeyStartInstrument); + } + else { + _currentActiveInstrument = _activeInstruments.getDescriptionByValue( + _activeInstruments + ); + } + // Some sanity checks + if (_imageMetadataMap.empty()) { + LERROR("Images map is empty! Check your path"); + } + + addProperty(_planeOpacity); + addProperty(_enableBorder); + addProperty(_enableFrustum); + addProperty(_activeInstruments); + addProperty(_gammaValue); + addProperty(_contrastValue); + addProperty(_downsamplingLevel); + addProperty(_moveFactor); + addProperty(_verboseMode); + + _enableFrustum.onChange([this]() { + _enableBorder.setValue(_enableFrustum.value()); + }); + + _activeInstruments.onChange([this]() { + _currentActiveInstrument = _activeInstruments.getDescriptionByValue( + _activeInstruments + ); + _currentImage = nullptr; + }); + + _downsamplingLevel.onChange([this]() { + _currentImage = nullptr; + }); + + _moveFactor.onChange([this]() { + _spacecraftCameraPlane->createPlaneAndFrustum(_moveFactor); + }); +} + + + +void RenderableSolarImagery::initializeGL() { + _spacecraftCameraPlane = std::make_unique(_moveFactor); + _texture = std::make_unique( + glm::uvec3(DefaultTextureSize, DefaultTextureSize, 1), + GL_TEXTURE_2D, + ghoul::opengl::Texture::Format::Red, // Format of the pixeldata + GL_R8, // INTERNAL format: + // More preferable to give explicit precision here, + // otherwise up to the driver to decide + GL_UNSIGNED_BYTE, // Type of data + ghoul::opengl::Texture::FilterMode::Linear, + ghoul::opengl::Texture::WrappingMode::ClampToEdge, + ghoul::opengl::Texture::AllocateData::Yes, + ghoul::opengl::Texture::TakeOwnership::No + ); + + updateTextureGPU(); +} + +void RenderableSolarImagery::deinitializeGL() { + _spacecraftCameraPlane->destroy(); +} + +TransferFunction* RenderableSolarImagery::getTransferFunction() { + return _lut; +} + +const std::unique_ptr& RenderableSolarImagery::getImageryTexture() +{ + return _texture; +} + +const SpacecraftCameraPlane& RenderableSolarImagery::getCameraPlane() { + return *_spacecraftCameraPlane; +} + +float RenderableSolarImagery::getContrastValue() { + return _contrastValue; +} + +float RenderableSolarImagery::getGammaValue() { + return _gammaValue; +} + +unsigned int RenderableSolarImagery::getImageResolutionFactor() { + return _imageSize; +} + +glm::vec2 RenderableSolarImagery::getCenterPixel() { + return _currentCenterPixel; +} + +float RenderableSolarImagery::getScale() { + return _currentScale; +} + +bool RenderableSolarImagery::isCoronaGraph() { + return _isCoronaGraph; +} + +bool RenderableSolarImagery::isReady() const { + return _spacecraftCameraPlane && + _spacecraftCameraPlane->isReady(); +} + +void RenderableSolarImagery::updateTextureGPU(bool asyncUpload, bool resChanged) { + Keyframe* keyframe = + _imageMetadataMap[_currentActiveInstrument].lastKeyframeBefore( + global::timeManager->time().j2000Seconds(), + true + ); + + if (keyframe) { + if (_currentImage == &(keyframe->data)) { + // This keyframe is already uploaded to the GPU. + return; + } + _imageSize = static_cast( + keyframe->data.fullResolution / + std::pow(2, static_cast(_downsamplingLevel)) + ); + _isCoronaGraph = keyframe->data.isCoronaGraph; + _currentScale = keyframe->data.scale; + _currentCenterPixel = keyframe->data.centerPixel; + _currentImage = &(keyframe->data); + + _decodeBuffer.resize(_imageSize * _imageSize * sizeof(IMG_PRECISION)); + decode(_decodeBuffer.data(), keyframe->data.filename); + } + else { + if (_currentImage == nullptr) { + // No need to re-upload an empty image. + return; + } + _isCoronaGraph = false; + _imageSize = 32; + _currentScale = 0; + _currentCenterPixel = glm::vec2(2.f); + _currentImage = nullptr; + } + + _texture->setDimensions(glm::uvec3(_imageSize, _imageSize, 1)); + _texture->setPixelData( + _decodeBuffer.data(), + ghoul::opengl::Texture::TakeOwnership::No + ); + _texture->uploadTexture(); +} + +void RenderableSolarImagery::decode(unsigned char* buffer, const std::string& filename) { + J2kCodec j2c(_verboseMode); + j2c.decodeIntoBuffer(filename, buffer, _downsamplingLevel); +} + +bool RenderableSolarImagery::checkBoundaries(const RenderData& data) { + const glm::dvec3& normal = _spacecraftCameraPlane->normal(); + const glm::dvec3& cameraPosition = data.camera.positionVec3(); + const glm::dvec3& planePosition = _spacecraftCameraPlane->worldPosition(); + + const glm::dvec3 toCamera = glm::normalize(cameraPosition - planePosition); + if (glm::dot(toCamera, normal) < 0) { + return false; + } + return true; +} + +void RenderableSolarImagery::update(const UpdateData& data) { + // Update lookup table, TODO: No need to do this every update + _lut = _tfMap[_currentActiveInstrument].get(); + _spacecraftCameraPlane->update(); +} + +void RenderableSolarImagery::render(const RenderData& data, RendererTasks&) { + // Update texture + //if (checkBoundaries(data)) { + // TODO: The checkBoundaries logic was temporarily disabled since it causes + // a bug that prevents this renderablesolarimageryprojection component to be updated + // as soon as the view frustum is more than 90 degrees off. + updateTextureGPU(); + //} + const glm::dvec3& sunPositionWorld = sceneGraphNode("Sun")->worldPosition(); + _spacecraftCameraPlane->render( + data, + *_texture, + _lut, + sunPositionWorld, + _planeOpacity, + _contrastValue, + _gammaValue, + _enableBorder, + _enableFrustum, + _currentCenterPixel, + _currentScale, + _imagePlaneOffset, + _isCoronaGraph + ); +} + +} // namespace openspace diff --git a/modules/solarbrowsing/rendering/renderablesolarimagery.h b/modules/solarbrowsing/rendering/renderablesolarimagery.h new file mode 100644 index 0000000000..02d6c9b98a --- /dev/null +++ b/modules/solarbrowsing/rendering/renderablesolarimagery.h @@ -0,0 +1,122 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERY___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERY___H__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace ghoul::opengl { class Texture; } + +namespace openspace { + +namespace documentation { struct Documentation; } + +class PixelBufferObject; +class SpacecraftCameraPlane; +class TransferFunction; + +class RenderableSolarImagery : public Renderable { +public: + RenderableSolarImagery(const ghoul::Dictionary& dictionary); + + void initializeGL() override; + void deinitializeGL() override; + + bool isReady() const override; + + void render(const RenderData& data, RendererTasks& rendererTask) override; + void update(const UpdateData& data) override; + + static documentation::Documentation Documentation(); + + TransferFunction* getTransferFunction(); + const std::unique_ptr& getImageryTexture(); + const SpacecraftCameraPlane& getCameraPlane(); + float getContrastValue(); + float getGammaValue(); + unsigned int getImageResolutionFactor(); + glm::vec2 getCenterPixel(); + float getScale(); + bool isCoronaGraph(); + +private: + properties::OptionProperty _activeInstruments; + properties::FloatProperty _contrastValue; + properties::BoolProperty _enableBorder; + properties::BoolProperty _enableFrustum; + properties::FloatProperty _gammaValue; + properties::DoubleProperty _moveFactor; + properties::FloatProperty _planeOpacity; + properties::IntProperty _downsamplingLevel; + properties::BoolProperty _verboseMode; + + TransferFunction* _lut; + std::unique_ptr _texture; + + float _imagePlaneOffset = 0.0; + double _realTimeDiff; + + bool _isWithinFrustum = false; + bool _isWithinFrustumLast = true; + unsigned int _bufferCountOffset = 1; + unsigned int _imageSize; + + float _currentScale; + glm::vec2 _currentCenterPixel; + bool _isCoronaGraph; + + // For debugging + unsigned int _frameSkipCount = 0; + + std::unordered_map> _tfMap; + std::string _currentActiveInstrument; + ImageMetadata* _currentImage; + std::unordered_map> _imageMetadataMap; + std::unique_ptr _spacecraftCameraPlane; + std::vector _decodeBuffer; + + void updateTextureGPU(bool asyncUpload = true, bool resChanged = false); + void listen(); + bool checkBoundaries(const RenderData& data); + + void decode(unsigned char* buffer, const std::string& fileame); +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERY___H__ diff --git a/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp new file mode 100644 index 0000000000..198a67a6ef --- /dev/null +++ b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp @@ -0,0 +1,201 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + constexpr const char* _loggerCat = "RendearbleSpacecraftCameraSphere"; + + // This number MUST match the constant specified in the shader, otherwise UB / MN + constexpr const int MaxSpacecraftObservatories = 7; + + struct [[codegen::Dictionary(RenderableSolarImageryProjection)]] Parameters { + std::vector dependentNodes; + + std::optional radius; + }; + +#include "renderablesolarimageryprojection_codegen.cpp" +} // namespace + +namespace openspace { + +documentation::Documentation RenderableSolarImageryProjection::Documentation() { + return codegen::doc("renderablesolarimageryprojection"); +} + +RenderableSolarImageryProjection::RenderableSolarImageryProjection( + const ghoul::Dictionary& dictionary) + : Renderable(dictionary) + , _sphere(6.96701E8f, 100) +{ + const Parameters p = codegen::bake(dictionary); + + _dependentNodes = p.dependentNodes; + //_sphere(p.radius.value_or(6.96701E8f), 100) @TODO +} + +void RenderableSolarImageryProjection::initialize() { + for (const std::string& n : _dependentNodes) { + SceneGraphNode* depNode = global::renderEngine->scene()->sceneGraphNode(n); + if (!depNode) { + LWARNING(std::format( + "Specified dependent node '{}' did not exist", n + )); + continue; + } + Renderable* depR = depNode->renderable(); + RenderableSolarImagery* siR = dynamic_cast(depR); + if (!siR) { + LWARNING(std::format( + "Specified dependent node '{}' that was not a RenderableSolarImagery", n + )); + continue; + } + _solarImageryDependencies.push_back(depNode); + } +} + +void RenderableSolarImageryProjection::initializeGL() { + if (!_shader) { + _shader = global::renderEngine->buildRenderProgram("SpacecraftImageSphereProgram", + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimageprojection_vs.glsl"), + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimageprojection_fs.glsl") + ); + } + + _sphere.initialize(); +} + +void RenderableSolarImageryProjection::deinitializeGL() { + if (_shader) { + global::renderEngine->removeRenderProgram(_shader.get()); + _shader = nullptr; + } +} + +bool RenderableSolarImageryProjection::isReady() const { + return _shader != nullptr; +} + +void RenderableSolarImageryProjection::update(const UpdateData& data) { + if (_shader->isDirty()) { + _shader->rebuildFromFile(); + } +} + +void RenderableSolarImageryProjection::render(const RenderData& data, RendererTasks& rendererTask) { + glm::dmat4 modelTransform = + glm::translate(glm::dmat4(1.0), data.modelTransform.translation) * + glm::dmat4(data.modelTransform.rotation) * + glm::dmat4(glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale))); + glm::dmat4 modelViewTransform = data.camera.combinedViewMatrix() * modelTransform; + + _shader->activate(); + + _shader->setUniform( + "modelViewProjectionTransform", + data.camera.projectionMatrix() * glm::mat4(modelViewTransform) + ); + + const int numPlanes = _solarImageryDependencies.size(); + int solarImageryCount = 0; + + ghoul::opengl::TextureUnit txUnits[MaxSpacecraftObservatories]; + ghoul::opengl::TextureUnit tfUnits[MaxSpacecraftObservatories]; + + for (int i = 0; i < numPlanes; ++i) { + RenderableSolarImagery* solarImagery = static_cast( + _solarImageryDependencies[i]->renderable() + ); + + bool isCoronaGraph = solarImagery->isCoronaGraph(); + bool enabled = solarImagery->isEnabled(); + + const SpacecraftCameraPlane& plane = solarImagery->getCameraPlane(); + const glm::dvec3 planePos = plane.worldPosition(); + const glm::dmat4 planeRot = plane.worldRotation(); + + _shader->setUniform("isCoronaGraph[" + std::to_string(i) + "]", isCoronaGraph); + _shader->setUniform("isEnabled[" + std::to_string(i) + "]", enabled); + _shader->setUniform("sunToSpacecraftReferenceFrame[" + std::to_string(i) + "]", + planeRot * glm::dmat4(data.modelTransform.rotation)); + _shader->setUniform("planePositionSpacecraft[" + std::to_string(i) + "]", + glm::dvec3(planeRot * glm::dvec4(planePos, 1.0))); + _shader->setUniform("gammaValue[" + std::to_string(i) + "]", solarImagery->getGammaValue()); + _shader->setUniform("contrastValue[" + std::to_string(i) + "]", solarImagery->getContrastValue()); + _shader->setUniform("scale[" + std::to_string(i) + "]", solarImagery->getScale()); + _shader->setUniform("centerPixel[" + std::to_string(i) + "]", solarImagery->getCenterPixel()); + + // Imagery texture + txUnits[i].activate(); + solarImagery->getImageryTexture()->bind(); + _shader->setUniform("imageryTexture[" + std::to_string(i) + "]", txUnits[i]); + tfUnits[i].activate(); + + TransferFunction* lut = solarImagery->getTransferFunction(); + if (lut && solarImagery->isEnabled()) { + lut->bind(); + _shader->setUniform("hasLut[" + std::to_string(i) + "]", true); + } else { + _shader->setUniform("hasLut[" + std::to_string(i) + "]", false); + } + // Must bind all sampler2D, otherwise undefined behaviour + _shader->setUniform("lut[" + std::to_string(i) + "]", tfUnits[i]); + solarImageryCount++; + } + + // Set the rest of the texture units for well defined behaviour + for (int i = solarImageryCount; i < MaxSpacecraftObservatories; ++i) { + txUnits[i].activate(); + _shader->setUniform("imageryTexture[" + std::to_string(i) + "]", txUnits[i]); + tfUnits[i].activate(); + _shader->setUniform("lut[" + std::to_string(i) + "]", tfUnits[i]); + } + + _shader->setUniform("numSpacecraftCameraPlanes", numPlanes); + _sphere.render(); + _shader->deactivate(); +} + +} // namespace openspace diff --git a/modules/solarbrowsing/rendering/renderablesolarimageryprojection.h b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.h new file mode 100644 index 0000000000..fc7d40b19d --- /dev/null +++ b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.h @@ -0,0 +1,76 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERYPROJECTION___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERYPROJECTION___H__ + +#include + +#include + + +#include +#include +#include + +namespace ghoul::opengl { + class ProgramObject; + class Texture; +} // namespace ghoul::opengl + +namespace openspace { + +namespace documentation { struct Documentation; } + +class SceneGraphNode; + +class RenderableSolarImageryProjection : public Renderable { +public: + RenderableSolarImageryProjection(const ghoul::Dictionary& dictionary); + + void initialize() override; + + void initializeGL() override; + void deinitializeGL() override; + + bool isReady() const override; + + void render(const RenderData& data, RendererTasks& rendererTask) override; + void update(const UpdateData& data) override; + + std::unique_ptr _shader; + Sphere _sphere; + + static documentation::Documentation Documentation(); + +private: + void loadTexture(); + + std::vector _dependentNodes; + std::vector _solarImageryDependencies; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___RENDERABLESOLARIMAGERYPROJECTION___H__ diff --git a/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp b/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp new file mode 100644 index 0000000000..427114b239 --- /dev/null +++ b/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp @@ -0,0 +1,304 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + + +namespace { + constexpr const double SUN_RADIUS = (1391600000.0 * 0.5); + constexpr const char* _loggerCat = "SpacecraftCameraPlane"; +} // namespace + +namespace openspace { + +SpacecraftCameraPlane::SpacecraftCameraPlane(double moveDistance) { + initialize(); + createPlaneAndFrustum(moveDistance); +} + +bool SpacecraftCameraPlane::destroy() { + glDeleteVertexArrays(1, &_quad); + _quad = 0; + glDeleteVertexArrays(1, &_frustum); + _frustum = 0; + + if (_planeShader) { + global::renderEngine->removeRenderProgram(_planeShader.get()); + _planeShader = nullptr; + } + if (_frustumShader) { + global::renderEngine->removeRenderProgram(_frustumShader.get()); + _frustumShader = nullptr; + } + return true; +} + +bool SpacecraftCameraPlane::initialize() { + // Initialize plane buffer + glGenVertexArrays(1, &_quad); + glGenBuffers(1, &_vertexPositionBuffer); + // Initialize frustum buffer + glGenVertexArrays(1, &_frustum); + glGenBuffers(1, &_frustumPositionBuffer); + if (!_planeShader) { + _planeShader = global::renderEngine->buildRenderProgram("SpacecraftImagePlaneProgram", + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimageplane_vs.glsl"), + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimageplane_fs.glsl") + ); + if (!_planeShader) { + return false; + } + } + + if (!_frustumShader) { + _frustumShader = global::renderEngine->buildRenderProgram("SpacecraftFrustumProgram", + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimagefrustum_vs.glsl"), + absPath("${MODULE_SOLARBROWSING}/shaders/spacecraftimagefrustum_fs.glsl") + ); + if (!_frustumShader) { + return false; + } + } +} + +const glm::vec3& SpacecraftCameraPlane::normal() const { + return _normal; +}; + +const glm::dvec3& SpacecraftCameraPlane::worldPosition() const { + return _position; +} + +const glm::dmat4& SpacecraftCameraPlane::worldRotation() const { + return _rotation; +} + +void SpacecraftCameraPlane::update() { + if (_planeShader->isDirty()) { + _planeShader->rebuildFromFile(); + } + + if (_frustumShader->isDirty()) { + _frustumShader->rebuildFromFile(); + } +} + +bool SpacecraftCameraPlane::isReady() { + return _planeShader && _frustumShader; +} + +void SpacecraftCameraPlane::createPlaneAndFrustum(double moveDistance) { + //const double a = 1; + //const double b = 0; + //const double c = 0.31622776601; // sqrt(0.1) + //_move = a * exp(-(pow((_moveFactor.value() - 1) - b, 2.0)) / (2.0 * pow(c, 2.0))); + //_move = /*a **/ exp(-(pow((_moveFactor.value() - 1) /*- b*/, 2.0)) / (2.0 /** pow(c, 2.0)*/)); + _gaussianMoveFactor = /*a **/ exp(-(pow((moveDistance - 1) /*- b*/, 2.0)) / (2.0 /** pow(c, 2.0)*/)); + _size = static_cast(_gaussianMoveFactor * SUN_RADIUS); /// _scaleFactor; + createPlane(); + createFrustum(); +} + +void SpacecraftCameraPlane::createPlane() { + const GLfloat size = _size; + const GLfloat vertex_data[] = { + // x y z w s t + -size, -size, 0.f, 0.f, 0.f, 0.f, + size, size, 0.f, 0.f, 1.f, 1.f, + -size, size, 0.f, 0.f, 0.f, 1.f, + -size, -size, 0.f, 0.f, 0.f, 0.f, + size, -size, 0.f, 0.f, 1.f, 0.f, + size, size, 0.f, 0.f, 1.f, 1.f, + }; + + glBindVertexArray(_quad); // bind array + glBindBuffer(GL_ARRAY_BUFFER, _vertexPositionBuffer); // bind buffer + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_data), vertex_data, GL_STATIC_DRAW); + glEnableVertexAttribArray(0); + glVertexAttribPointer( + 0, + 4, + GL_FLOAT, + GL_FALSE, + sizeof(GLfloat) * 6, + reinterpret_cast(0) + ); + glEnableVertexAttribArray(1); + glVertexAttribPointer( + 1, + 2, + GL_FLOAT, + GL_FALSE, + sizeof(GLfloat) * 6, + reinterpret_cast(sizeof(GLfloat) * 4) + ); +} + +void SpacecraftCameraPlane::createFrustum() { + // Vertex orders x, y, z, w + // Where w indicates if vertex should be drawn in spacecraft + // or planes coordinate system + const GLfloat vertex_data[] = { + 0.f, 0.f, 0.f, 0.0, + _size, _size, 0.f , 1.0, + 0.f, 0.f, 0.f, 0.0, + -_size, -_size, 0.f , 1.0, + 0.f, 0.f, 0.f, 0.0, + _size, -_size, 0.f , 1.0, + 0.f, 0.f, 0.f, 0.0, + -_size, _size, 0.f , 1.0, + // Borders + // Left + -_size, -_size, 0.f, 1.0, + -_size, _size, 0.f, 1.0, + // Top + -_size, _size, 0.f, 1.0, + _size, _size, 0.f, 1.0, + // Right + _size, _size, 0.f, 1.0, + _size, -_size, 0.f, 1.0, + // Bottom + _size, -_size, 0.f, 1.0, + -_size, -_size, 0.f, 1.0, + }; + glBindVertexArray(_frustum); + glBindBuffer(GL_ARRAY_BUFFER, _frustumPositionBuffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_data), vertex_data, GL_STATIC_DRAW); + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, reinterpret_cast(0)); +} + +void SpacecraftCameraPlane::render(const RenderData& data, + ghoul::opengl::Texture& imageryTexture, + TransferFunction* lut, + const glm::dvec3& sunPositionWorld, float planeOpacity, + float contrastValue, float gammaValue, + bool enableBorder, bool enableFrustum, + const glm::vec2& currentCenterPixel, + float currentScale, float multipleImageryOffset, + bool isCoronaGraph) +{ + glEnable(GL_CULL_FACE); + + // Perform necessary transforms + const glm::dmat4& viewMatrix = data.camera.combinedViewMatrix(); + const glm::mat4& projectionMatrix = data.camera.projectionMatrix(); + + // TODO: We want to create sun imagery node from within the module + const glm::dvec3& spacecraftPosWorld = data.modelTransform.translation; + const glm::dmat3 spacecraftRotWorld = data.modelTransform.rotation; + + const glm::dvec3 sunDir = sunPositionWorld - spacecraftPosWorld; + const glm::dvec3 offset = sunDir * (_gaussianMoveFactor + static_cast(multipleImageryOffset)); + + const glm::dvec3 up = spacecraftRotWorld * glm::dvec3(0.0, 0.0, 1.0); + _position = spacecraftPosWorld + offset; + _normal = glm::normalize(spacecraftPosWorld - _position); + _rotation = glm::lookAt(glm::normalize(spacecraftPosWorld), glm::dvec3(sunPositionWorld), up); + const glm::dmat4 rotationInv = glm::inverse(_rotation); + + const glm::dmat4 modelTransform = + glm::translate(glm::dmat4(1.0), _position) * + rotationInv * + glm::dmat4(glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale))) * + glm::dmat4(1.0); + const glm::dmat4 modelViewTransform = viewMatrix * modelTransform; + + // For frustum + const glm::dmat4 spacecraftModelTransform = + glm::translate(glm::dmat4(1.0), spacecraftPosWorld) * + rotationInv * + glm::dmat4(glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale))) * + glm::dmat4(1.0); + + _planeShader->activate(); + ghoul::opengl::TextureUnit imageUnit; + imageUnit.activate(); + imageryTexture.bind(); + + _planeShader->setUniform("isCoronaGraph", isCoronaGraph); + _planeShader->setUniform("scale", currentScale); + _planeShader->setUniform("centerPixel", currentCenterPixel); + _planeShader->setUniform("imageryTexture", imageUnit); + _planeShader->setUniform("planeOpacity", planeOpacity); + _planeShader->setUniform("gammaValue", gammaValue); + _planeShader->setUniform("contrastValue", contrastValue); + _planeShader->setUniform( + "modelViewProjectionTransform", + projectionMatrix * glm::mat4(modelViewTransform) + ); + + //_tfMap[_currentActiveInstrument]->bind(); // Calls update internally + ghoul::opengl::TextureUnit tfUnit; + tfUnit.activate(); + if (lut) { + lut->bind(); + _planeShader->setUniform("hasLut", true); + } else { + _planeShader->setUniform("hasLut", false); + } + // Must bind all sampler2D, otherwise undefined behaviour + _planeShader->setUniform("lut", tfUnit); + + glBindVertexArray(_quad); + glDrawArrays(GL_TRIANGLES, 0, 6); + + _planeShader->deactivate(); + _frustumShader->activate(); + + _frustumShader->setUniform("planeOpacity", planeOpacity); + _frustumShader->setUniform("modelViewProjectionTransform", + projectionMatrix + * glm::mat4(viewMatrix * spacecraftModelTransform)); + _frustumShader->setUniform("modelViewProjectionTransformPlane", + projectionMatrix * glm::mat4(modelViewTransform)); + + _frustumShader->setUniform("scale", currentScale); + _frustumShader->setUniform("centerPixel", currentCenterPixel); + + glBindVertexArray(_frustum); + + if (enableBorder && enableFrustum) { + glDrawArrays(GL_LINES, 0, 16); + } else if (!enableBorder && enableFrustum) { + glDrawArrays(GL_LINES, 0, 8); + } else if (!enableFrustum && enableBorder) { + glDrawArrays(GL_LINES, 8, 16); + } + _frustumShader->deactivate(); + + glDisable(GL_CULL_FACE); +} + +} // namespace openspace diff --git a/modules/solarbrowsing/rendering/spacecraftcameraplane.h b/modules/solarbrowsing/rendering/spacecraftcameraplane.h new file mode 100644 index 0000000000..61111d2dcb --- /dev/null +++ b/modules/solarbrowsing/rendering/spacecraftcameraplane.h @@ -0,0 +1,91 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTCAMERAPLANE___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTCAMERAPLANE___H__ + +#include +#include +#include + +#include + +namespace ghoul::opengl { class Texture; } + +namespace openspace { + +class TransferFunction; + +class SpacecraftCameraPlane { +public: + SpacecraftCameraPlane(double moveDistance); + + void render(const RenderData& data, ghoul::opengl::Texture& imageryTexture, + TransferFunction* lut, const glm::dvec3& sunPositionWorld, float planeOpacity, + float contrastValue, float gammaValue, bool enableBorder, bool enableFrustum, + const glm::vec2& currentCenterPixel, float currentScale, + float multipleImageryOffset, bool isCoronaGraph); + + void update(); + void createPlaneAndFrustum(double moveDistance); + // TODO(mnoven) : Pre process image, no need to set uniforms + //void setUniforms(); + bool isReady(); + bool destroy(); + + const glm::vec3& normal() const; + const glm::dvec3& worldPosition() const; + const glm::dmat4& worldRotation() const; + + //glm::dvec3 _planePosSpacecraftRefFrame; + //glm::dmat4 _sunToSpacecraftTransform; + +private: + std::unique_ptr _frustumShader; + std::unique_ptr _planeShader; + + GLuint _frustum; + GLuint _frustumPositionBuffer; + GLuint _quad; + GLuint _vertexPositionBuffer; + +// glm::dvec3 _spacecraftPosition; + // glm::dmat4 _spacecraftRotation. + glm::dvec3 _position; + glm::dmat4 _rotation; + glm::vec3 _normal; + + //glm::dvec2 _centerPixel; + double _gaussianMoveFactor; + float _size; + //float _scaleFactor; + + void createFrustum(); + void createPlane(); + bool initialize(); +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTCAMERAPLANE___H__ diff --git a/modules/solarbrowsing/shaders/spacecraftimagefrustum_fs.glsl b/modules/solarbrowsing/shaders/spacecraftimagefrustum_fs.glsl new file mode 100644 index 0000000000..e6c9ef1c0a --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimagefrustum_fs.glsl @@ -0,0 +1,46 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +in vec4 vs_positionScreenSpace; +#include "fragment.glsl" + +uniform float planeOpacity; + +Fragment getFragment() { + + vec4 diffuse; + if (planeOpacity < 0.25) { + diffuse = vec4(1.0, 1.0, 1.0, planeOpacity); + } else { + diffuse = vec4(1.0, 1.0, 1.0, 0.25); + } + + if (diffuse.a == 0.0) + discard; + + Fragment frag; + frag.color = diffuse; + frag.depth = vs_positionScreenSpace.w; + return frag; +} diff --git a/modules/solarbrowsing/shaders/spacecraftimagefrustum_vs.glsl b/modules/solarbrowsing/shaders/spacecraftimagefrustum_vs.glsl new file mode 100644 index 0000000000..fb29f5e492 --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimagefrustum_vs.glsl @@ -0,0 +1,55 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#version __CONTEXT__ + +uniform mat4 modelViewProjectionTransform; +uniform mat4 modelViewProjectionTransformPlane; + +uniform float scale; +uniform vec2 centerPixel; + +layout(location = 0) in vec4 in_position; + +out vec4 vs_positionScreenSpace; + +#include "PowerScaling/powerScaling_vs.hglsl" + +void main() { + + // Transform in either planes or spacecraft coordinate system + if (in_position.w == 1) { + vec4 position = in_position; + position.x += centerPixel.x; + position.y += centerPixel.y; + position.xy *= 1.0 / scale; + vec4 positionClipSpace = modelViewProjectionTransformPlane * vec4(position.xyz, 1); + vs_positionScreenSpace = z_normalization(positionClipSpace); + } else { + vec4 positionClipSpace = modelViewProjectionTransform * vec4(in_position.xyz, 1); + vs_positionScreenSpace = z_normalization(positionClipSpace); + } + + gl_Position = vs_positionScreenSpace; +} diff --git a/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl b/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl new file mode 100644 index 0000000000..55b6b3b831 --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl @@ -0,0 +1,76 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +uniform sampler2D imageryTexture; +uniform sampler1D lut; +uniform bool additiveBlending; + +uniform float contrastValue; +uniform float gammaValue; +uniform float planeOpacity; +uniform bool hasLut; +uniform bool isCoronaGraph; + +in vec2 vs_st; +in vec4 vs_positionScreenSpace; + +#include "fragment.glsl" + +float contrast(float intensity) { + return min(clamp(0.5 + (intensity - 0.5) * (1 + contrastValue/10.0), 0.0, 1.0), sqrt(intensity) + intensity); +} + +Fragment getFragment() { + float intensityOrg = texture(imageryTexture, vec2(vs_st.x, 1 - vs_st.y)).r; + intensityOrg = contrast(intensityOrg); + + vec4 outColor; + if (hasLut) { + outColor = texture(lut, intensityOrg); + } else { + outColor = vec4(intensityOrg, intensityOrg, intensityOrg, 1.0); + } + + outColor.r = pow(outColor.r, gammaValue); + outColor.g = pow(outColor.g, gammaValue); + outColor.b = pow(outColor.b, gammaValue); + + if (planeOpacity == 0.0) + discard; + + float absy = abs(0.5 - vs_st.y); + float absx = abs(0.5 - vs_st.x); + + if (isCoronaGraph && length(outColor.xyz) < 0.10 && ( (absy * absy + absx * absx) > 0.25)) discard; + + outColor = vec4(outColor.xyz, planeOpacity); + + Fragment frag; + frag.color = outColor; + frag.depth = vs_positionScreenSpace.w; + + if (additiveBlending) { + frag.blend = BLEND_MODE_ADDITIVE; + } + return frag; +} \ No newline at end of file diff --git a/modules/solarbrowsing/shaders/spacecraftimageplane_vs.glsl b/modules/solarbrowsing/shaders/spacecraftimageplane_vs.glsl new file mode 100644 index 0000000000..d6f8a75844 --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimageplane_vs.glsl @@ -0,0 +1,55 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#version __CONTEXT__ + +uniform mat4 modelViewProjectionTransform; +uniform float scale; +uniform vec2 centerPixel; + +layout(location = 0) in vec4 in_position; +layout(location = 1) in vec2 in_st; + +out vec2 vs_st; +out vec4 vs_positionScreenSpace; +out float s; + +#include "PowerScaling/powerScaling_vs.hglsl" + +float HALF_SUN_RADIUS = 696701000.0; //(1391600000.0 * 0.50); +float R_SUN = 995.90523 / 1.5877740; + +void main() { + // Transform the damn psc to homogenous coordinate + vec4 position = vec4(in_position.xyz * pow(10, in_position.w), 1); + position.x += centerPixel.x; + position.y += centerPixel.y; + position.xy *= 1.0 / scale; + + vec4 positionClipSpace = modelViewProjectionTransform * position; + vs_positionScreenSpace = z_normalization(positionClipSpace); + gl_Position = vs_positionScreenSpace; + + vs_st = in_st; +} diff --git a/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl b/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl new file mode 100644 index 0000000000..48ae4774ca --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl @@ -0,0 +1,114 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +const int MAX_SPACECRAFT_OBSERVATORY = 7; + +in vec4 vs_positionScreenSpace; +in vec4 clipSpace; +in vec3 vUv[MAX_SPACECRAFT_OBSERVATORY]; +in vec3 vs_positionModelSpace; + +uniform int numSpacecraftCameraPlanes; +uniform dvec3 planePositionSpacecraft[MAX_SPACECRAFT_OBSERVATORY]; +uniform sampler1D lut[MAX_SPACECRAFT_OBSERVATORY]; +uniform sampler2D imageryTexture[MAX_SPACECRAFT_OBSERVATORY]; +uniform bool hasLut[MAX_SPACECRAFT_OBSERVATORY]; +uniform float contrastValue[MAX_SPACECRAFT_OBSERVATORY]; +uniform float opacityValue[MAX_SPACECRAFT_OBSERVATORY]; +uniform float gammaValue[MAX_SPACECRAFT_OBSERVATORY]; +uniform float imageSize[MAX_SPACECRAFT_OBSERVATORY]; +uniform bool isEnabled[MAX_SPACECRAFT_OBSERVATORY]; +uniform bool isCoronaGraph[MAX_SPACECRAFT_OBSERVATORY]; +uniform float scale[MAX_SPACECRAFT_OBSERVATORY]; +uniform vec2 centerPixel[MAX_SPACECRAFT_OBSERVATORY]; + +const float SUN_RADIUS = 1391600000 * 0.5; + +#include "fragment.glsl" + +float contrast(float intensity, int i) { + return min(clamp(0.5 + (intensity - 0.5) * (1 + contrastValue[i]/10.0), 0.0, 1.0), sqrt(intensity) + intensity); +} + +Fragment getFragment() { + vec4 outColor = vec4(0); + bool renderSurface = true; + + for (int i = 0; i < numSpacecraftCameraPlanes; i++) { + if (isCoronaGraph[i] || !isEnabled[i]) { + continue; + } + + // bool isPixelHidden = dot(normalize(planePositionSpacecraft[i]), normalize(vUv[i])) < 0.0; + // if (isPixelHidden) { + // continue; + // } + + if (planePositionSpacecraft[i].z < vUv[i].z) { + vec3 uv = vUv[i].xyz; + uv /= ( (SUN_RADIUS / scale[i]) * 2); + uv += 0.5; + + uv.x += ((centerPixel[i].x) / SUN_RADIUS) / 2.0; + uv.y -= ((centerPixel[i].y) / SUN_RADIUS) / 2.0; + + float intensityOrg = texture(imageryTexture[i], vec2(uv.x, 1.0 - uv.y)).r; + intensityOrg = contrast(intensityOrg, i); + + vec4 res; + if (hasLut[i]) { + res = texture(lut[i], intensityOrg); + } else { + res = vec4(intensityOrg, intensityOrg, intensityOrg, 1.0); + } + + res.r = pow(res.r, gammaValue[i]); + res.g = pow(res.g, gammaValue[i]); + res.b = pow(res.b, gammaValue[i]); + + // Not initialized + if (outColor == vec4(0)) { + float factor2 = smoothstep(0.5, uv.x, uv.z); + outColor = mix(res, res, factor2); + } else { + // Blend between + float factor = smoothstep(0.5, 1.0 - uv.x, uv.z); + float factor2 = smoothstep(0.5, uv.x, uv.z); + outColor = mix(outColor, res, factor + factor2); + } + renderSurface = false; + } + } + + if (renderSurface) { + // Arbitrary default shading + vec3 diffuse = vec3((vs_positionModelSpace.y) / SUN_RADIUS) * 0.18; + outColor = vec4(clamp(diffuse, vec3(-1.0), vec3(1.0)) + vec3(0.2, 0.21, 0.22), 1.0); + } + + Fragment frag; + frag.color = outColor; + frag.depth = vs_positionScreenSpace.w; + + return frag; +} \ No newline at end of file diff --git a/modules/solarbrowsing/shaders/spacecraftimageprojection_vs.glsl b/modules/solarbrowsing/shaders/spacecraftimageprojection_vs.glsl new file mode 100644 index 0000000000..882d53a660 --- /dev/null +++ b/modules/solarbrowsing/shaders/spacecraftimageprojection_vs.glsl @@ -0,0 +1,62 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +#version __CONTEXT__ + +const int MAX_SPACECRAFT_OBSERVATORY = 7; + +uniform mat4 modelViewProjectionTransform; +uniform bool isCoronaGraph[MAX_SPACECRAFT_OBSERVATORY]; +uniform bool isEnabled[MAX_SPACECRAFT_OBSERVATORY]; +uniform dmat4 sunToSpacecraftReferenceFrame[MAX_SPACECRAFT_OBSERVATORY]; +uniform int numSpacecraftCameraPlanes; + +layout(location = 0) in vec4 in_position; +layout(location = 1) in vec2 in_st; + +out vec4 vs_positionScreenSpace; +out vec3 vs_positionModelSpace; +out vec4 clipSpace; +out vec3 vUv[MAX_SPACECRAFT_OBSERVATORY]; + +#include "PowerScaling/powerScaling_vs.hglsl" + +void main() { + // Transform the damn psc to homogenous coordinate + vec4 position = vec4(in_position.xyz, 1); + vs_positionModelSpace = position.xyz; + + // Transform the positions to the reference frame of the spacecraft to get tex coords + for (int i = 0; i < numSpacecraftCameraPlanes; i++) { + vUv[i] = vec3(0.0, 0.0, 0.0); + if (isCoronaGraph[i] || !isEnabled[i]) { + continue; + }; + vUv[i] = vec3(sunToSpacecraftReferenceFrame[i] * dvec4(position)).xyz; + } + + vec4 positionClipSpace = modelViewProjectionTransform * position; + clipSpace = positionClipSpace; + vs_positionScreenSpace = z_normalization(positionClipSpace); + gl_Position = vs_positionScreenSpace; +} diff --git a/modules/solarbrowsing/solarbrowsingmodule.cpp b/modules/solarbrowsing/solarbrowsingmodule.cpp new file mode 100644 index 0000000000..10d772bee1 --- /dev/null +++ b/modules/solarbrowsing/solarbrowsingmodule.cpp @@ -0,0 +1,66 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace openspace { + +SolarBrowsingModule::SolarBrowsingModule() : OpenSpaceModule(Name) { +} + +SpacecraftImageryManager& SolarBrowsingModule::spacecraftImageryManager() { + return _spacecraftImageryManager; +} + +void SolarBrowsingModule::internalInitialize(const ghoul::Dictionary&) { + auto fRenderable = FactoryManager::ref().factory(); + ghoul_assert(fRenderable, "No renderable factory existed"); + + fRenderable->registerClass( + "RenderableSolarImagery" + ); + fRenderable->registerClass( + "RenderableSolarImageryProjection" + ); + + auto fTask = FactoryManager::ref().factory(); + ghoul_assert(fTask, "No task factory existed"); + fTask->registerClass("HelioviewerDownloadTask"); + + +} + +} // namespace openspace diff --git a/modules/solarbrowsing/solarbrowsingmodule.h b/modules/solarbrowsing/solarbrowsingmodule.h new file mode 100644 index 0000000000..72cc5ae240 --- /dev/null +++ b/modules/solarbrowsing/solarbrowsingmodule.h @@ -0,0 +1,48 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___SOLARBROWSINGMODULE___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___SOLARBROWSINGMODULE___H__ + +#include +#include + +namespace openspace { + +class SolarBrowsingModule : public OpenSpaceModule { +public: + constexpr static const char* Name = "SolarBrowsing"; + + SolarBrowsingModule(); + SpacecraftImageryManager& spacecraftImageryManager(); + +protected: + void internalInitialize(const ghoul::Dictionary& dictionary) override; + + SpacecraftImageryManager _spacecraftImageryManager; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___SOLARBROWSINGMODULE___H__ diff --git a/modules/solarbrowsing/tasks/helioviewerdownloadtask.cpp b/modules/solarbrowsing/tasks/helioviewerdownloadtask.cpp new file mode 100644 index 0000000000..e1cdef3461 --- /dev/null +++ b/modules/solarbrowsing/tasks/helioviewerdownloadtask.cpp @@ -0,0 +1,227 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + constexpr const char* _loggerCat = "HelioviewerDownloadTask"; + + constexpr const char* KeySourceId = "SourceId"; + constexpr const char* KeyName = "Name"; + constexpr const char* KeyInstrument = "Instrument"; + constexpr const char* KeyStartTime = "StartTime"; + constexpr const char* KeyTimeStep = "TimeStep"; + constexpr const char* KeyEndTime = "EndTime"; + constexpr const char* KeyOutputFolder = "OutputFolder"; + constexpr const char* KeyTimeKernel = "TimeKernel"; +} + +namespace openspace { + +documentation::Documentation HelioviewerDownloadTask::documentation() { + using namespace documentation; + return { + "HelioviewerDownloadTask", + "helioviewer_download_task", + /*{ + { + "Type", + new StringEqualVerifier("HelioviewerDownloadTask"), + Optional::No, + "The type of this task" + }, + { + KeyOutputFolder, + new StringAnnotationVerifier("A folder on the local machine"), + Optional::No, + "The folder where to output the downloaded jp2 files" + }, + { + KeyName, + new StringVerifier, + Optional::No, + "Name of the spacecraft or telescope" + }, + { + KeyInstrument, + new StringVerifier, + Optional::No, + "Name of the intrument" + }, + { + KeyTimeStep, + new DoubleAnnotationVerifier("A positive number"), + Optional::No, + "The preferred number of seconds between each timestep. " + "The actual timestep will be determined by the availability of data " + "products but will never be smaller than this number. Use this for " + "temporal downsampling." + }, + { + KeyStartTime, + new StringAnnotationVerifier("A date with format YYYY-MM-DDTHH:MM:SS"), + Optional::No, + "The beginning of the time interval to exteract data from" + }, + { + KeyEndTime, + new StringAnnotationVerifier("A date with format YYYY-MM-DDTHH:MM:SS"), + Optional::No, + "The end of the time interval to exteract data from" + }, + { + KeySourceId, + new IntVerifier, + Optional::No, + "The unique identifier as specified in " + "https://api.helioviewer.org/docs/v2/#appendix" + }, + { + KeyTimeKernel, + new StringAnnotationVerifier("A file path to a cdf file"), + Optional::No, + "A file path to a tls spice kernel used for time", + }, + }*/ + }; +} + +HelioviewerDownloadTask::HelioviewerDownloadTask(const ghoul::Dictionary& dictionary) { + _startTime = dictionary.value(KeyStartTime); + _endTime = dictionary.value(KeyEndTime); + _timeStep = dictionary.value(KeyTimeStep); + _sourceId = static_cast(dictionary.value(KeySourceId)); + _name = dictionary.value(KeyName); + _instrument = dictionary.value(KeyInstrument); + _outputFolder = dictionary.value(KeyOutputFolder); + _timeKernelPath = absPath(dictionary.value(KeyTimeKernel)); +} + +std::string HelioviewerDownloadTask::description() { + return "Download data from helioviewer."; +} + +void HelioviewerDownloadTask::perform(const Task::ProgressCallback& progressCallback) { + SpiceManager::ref().loadKernel(_timeKernelPath); + + const std::string jpxRequest = + std::format("http://api.helioviewer.org/v2/getJPX/?startTime={}&endTime={}" + "&sourceId={}&verbose=true&cadence=true&cadence={}", + _startTime, + _endTime, + _sourceId, + _timeStep); + + LINFO(std::format("Requesting {}", jpxRequest)); + + HttpMemoryDownload fileListing(jpxRequest); + fileListing.start(); + fileListing.wait(); + //const HttpRequest::RequestOptions opt = { 0 }; + + //fileListing.download(opt); + if (!fileListing.hasSucceeded()) { + LERROR(std::format("Request to Heliviewer API failed.")); + } + + const std::vector& listingData = fileListing.downloadedData(); + const std::string listingString(listingData.begin(), listingData.end()); + + std::vector frames; + try { + nlohmann::json json = nlohmann::json::parse(listingString.c_str()); + const auto& framesIt = json.find("frames"); + if (framesIt == json.end()) { + LERROR(std::format("Failed to acquire frames")); + } + + nlohmann::json frameData = framesIt.value().get(); + for (const auto& frame : frameData) { + double epoch = frame.get(); + frames.push_back(epoch); + } + } + catch (...) { + LERROR(std::format("Failed to parse json response: {}", listingString)); + return; + } + + for (size_t i = 0; i < frames.size(); ++i) { + const double epoch = frames[i]; + const double j2000InEpoch = 946684800.0; + const Time time(epoch - j2000InEpoch); + + std::string_view formattedDate = time.ISO8601(); + const std::string imageUrl = std::format( + "http://api.helioviewer.org/v2/getJP2Image/?date={}Z&sourceId={}", + formattedDate, + _sourceId + ); + + // Format file name according to solarbrowsing convention. + const std::string year(formattedDate.begin(), formattedDate.begin() + 4); + const std::string month(formattedDate.begin() + 5, formattedDate.begin() + 7); + const std::string day(formattedDate.begin() + 8, formattedDate.begin() + 10); + const std::string hour(formattedDate.begin() + 11, formattedDate.begin() + 13); + const std::string minute(formattedDate.begin() + 14, formattedDate.begin() + 16); + const std::string second(formattedDate.begin() + 17, formattedDate.begin() + 19); + const std::string millis(formattedDate.begin() + 20, formattedDate.begin() + 23); + + const std::string outFilename = std::format( + "{}/{}_{}_{}__{}_{}_{}_{}__{}_{}.jp2", + _outputFolder, + year, + month, + day, + hour, + minute, + second, + millis, + _name, + _instrument, + static_cast(epoch) + ); + + HttpFileDownload imageDownload(imageUrl, absPath(outFilename)); + //imageDownload.download(opt); + imageDownload.start(); + imageDownload.wait(); + if (!imageDownload.hasSucceeded()) { + LERROR(std::format("Request to image {} failed.", imageUrl)); + continue; + } + + progressCallback(static_cast(i) / static_cast(frames.size())); + } +} + +} diff --git a/modules/solarbrowsing/tasks/helioviewerdownloadtask.h b/modules/solarbrowsing/tasks/helioviewerdownloadtask.h new file mode 100644 index 0000000000..1cb62629be --- /dev/null +++ b/modules/solarbrowsing/tasks/helioviewerdownloadtask.h @@ -0,0 +1,60 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2019 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +#ifndef __OPENSPACE_MODULE_SPACE___HELIOVIEWERDOWNLOADTASK___H__ +#define __OPENSPACE_MODULE_SPACE___HELIOVIEWERDOWNLOADTASK___H__ + +#include +#include +#include + +#include + +#include +#include +#include + +namespace openspace { + +class HelioviewerDownloadTask : public Task { +public: + HelioviewerDownloadTask(const ghoul::Dictionary& dictionary); + std::string description() override; + void perform(const Task::ProgressCallback& progressCallback) override; + static documentation::Documentation documentation(); + +private: + + std::string _outputFolder; + double _timeStep; + int _sourceId; + std::string _name; + std::string _instrument; + std::string _startTime; + std::string _endTime; + std::filesystem::path _timeKernelPath; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SPACE___HELIOVIEWERDOWNLOADTASK___H__ diff --git a/modules/solarbrowsing/util/j2kcodec.cpp b/modules/solarbrowsing/util/j2kcodec.cpp new file mode 100644 index 0000000000..ed2a3292a3 --- /dev/null +++ b/modules/solarbrowsing/util/j2kcodec.cpp @@ -0,0 +1,393 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define JP2_RFC3745_MAGIC "\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a" +#define JP2_MAGIC "\x0d\x0a\x87\x0a" +#define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51" + +namespace { + constexpr const char* _loggerCat = "J2kCodec"; + + int infileFormat(const std::string& fname) { + const auto get_file_format = [](const char* filename) { + unsigned int i; + static const char* extension[] = { + "pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", + "jpt", "j2c", "jpc" + }; + static const int format[] = { + PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, + TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT + }; + + const char* ext = strrchr(filename, '.'); + if (!ext) { + return -1; + } + + ++ext; + if (ext) { + for (i = 0; i < sizeof(format) / sizeof(*format); i++) { + if (strncmp(ext, extension[i], 3) == 0) { + return format[i]; + } + } + } + + return -1; + }; + + FILE* reader = fopen(fname.c_str(), "rb"); + if (!reader) { + return -1; + } + + unsigned char buf[12]; + memset(buf, 0, 12); + OPJ_SIZE_T l_nb_read = fread(buf, 1, 12, reader); + fclose(reader); + + if (l_nb_read != 12) { + return -1; + } + + int ext_format = get_file_format(fname.c_str()); + + if (ext_format == JPT_CFMT) { + return JPT_CFMT; + } + + int magic_format; + const char* magic_s; + if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) { + magic_format = JP2_CFMT; + magic_s = ".jp2"; + } + else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) { + magic_format = J2K_CFMT; + magic_s = ".j2k or .jpc or .j2c"; + } + else { + return -1; + } + + if (magic_format == ext_format) { + return ext_format; + } + + // ghoul::filesystem::File().fileExtension? + const char* s = fname.c_str() + strlen(fname.c_str()) - 4; + LERROR( + std::format("Extension of file is incorrect. Found {} should be {}", s, magic_s) + ); + return magic_format; + } +} + +namespace openspace { + +J2kCodec::J2kCodec(bool verboseMode) + : _verboseMode(verboseMode) +{} + +J2kCodec::~J2kCodec() { + destroy(); +} + +void J2kCodec::decodeIntoBuffer(const std::string& path, unsigned char* buffer, + int downsamplingLevel, int numQualityLayers, int x0, + int y0, int x1, int y1, int numThreads) +{ + auto t1 = std::chrono::high_resolution_clock::now(); + createInfileStream(path); + setupDecoder(downsamplingLevel, numQualityLayers, x0, x1, y0, y1, numThreads); + + // TODO(mnoven): It's a waste of resources having to decode into the image object and + // then copy over the data to our buffer. Would be better if we could decode directly + // into the buffer. + // See: https://github.com/uclouvain/openjpeg/issues/837 + if (!opj_decode(_decoder, _infileStream, _image)) { + LERROR("Could not decode image"); + destroy(); + return; + } + + if (!opj_end_decompress(_decoder, _infileStream)) { + LERROR("Could not end decompression"); + destroy(); + return; + } + + // TODO(mnoven): This is a waste. Can't specify decode precision in + // openjpeg. See: https://github.com/uclouvain/openjpeg/issues/836) + std::copy( + _image->comps[0].data, + _image->comps[0].data + _image->comps[0].w * _image->comps[0].h, + buffer + ); + + auto t2 = std::chrono::high_resolution_clock::now(); + if (_verboseMode) { + LINFO(std::format( + "Decode time of {}: {} ms", + path, + std::chrono::duration_cast(t2 - t1).count() + )); + } +} + +void J2kCodec::destroy() { + opj_stream_destroy(_infileStream); + opj_destroy_codec(_decoder); + opj_image_destroy(_image); +} + +void J2kCodec::createInfileStream(std::string filename) { + _infileName = std::move(filename); + + _infileStream = opj_stream_create_default_file_stream(_infileName.c_str(), OPJ_TRUE); + if (!_infileStream) { + LERROR(std::format("Failed to create stream from file '{}'", _infileName)); + } +} + +void J2kCodec::encodeAsTiles(const char* outfile, const int32_t* data, + unsigned int imageWidth, unsigned int imageHeight, + unsigned int tileWidth, unsigned int tileHeight, + unsigned int numComps, unsigned int compPrec) +{ + opj_image_cmptparm_t l_params[4]; + opj_image_cmptparm_t* l_current_param_ptr = l_params; + // Image definition + for (unsigned int i = 0; i < numComps; ++i) { + l_current_param_ptr->dx = 1; + l_current_param_ptr->dy = 1; + l_current_param_ptr->h = static_cast(imageHeight); + l_current_param_ptr->w = static_cast(imageWidth); + l_current_param_ptr->sgnd = 0; + l_current_param_ptr->prec = static_cast(compPrec); + l_current_param_ptr->x0 = 0; + l_current_param_ptr->y0 = 0; + ++l_current_param_ptr; + } + + opj_cparameters_t encoderParams; + opj_set_default_encoder_parameters(&encoderParams); + encoderParams.tcp_numlayers = 1; + encoderParams.cp_fixed_quality = 1; + //encoderParams.tcp_distoratio[0] = 100; + encoderParams.cp_tx0 = 0; + encoderParams.cp_ty0 = 0; + encoderParams.tile_size_on = OPJ_TRUE; + encoderParams.cp_tdx = tileWidth; + encoderParams.cp_tdy = tileHeight; + encoderParams.irreversible = 1; + encoderParams.numresolution = 6; + encoderParams.prog_order = OPJ_LRCP; + + unsigned int len = strlen(outfile); + opj_codec_t* encoder; + if (strcmp(outfile + len - 4, ".jp2") == 0) { + encoder = opj_create_compress(OPJ_CODEC_JP2); + } else { + encoder = opj_create_compress(OPJ_CODEC_J2K); + } + + if (!encoder) { + LERROR("Failed to created codec"); + destroy(); + return; + } + + //Catch events using our callbacks and give a local context + // if (_verboseMode) { + // opj_set_info_handler(_encoder, [](const char* msg, void* client_data) { + // (void)client_data; + // std::clog << "[INFO]" << msg; + // }, 00); + // opj_set_warning_handler(_encoder, [](const char* msg, void* client_data) { + // (void)client_data; + // std::cerr << "[WARNING]" << msg; + // }, 00); + // opj_set_error_handler(_encoder, [](const char* msg, void* client_data) { + // (void)client_data; + // std::cerr << "[ERROR]" << msg; + // }, 00); + // } + + opj_image_t* outImage = opj_image_tile_create(numComps, l_params, OPJ_CLRSPC_GRAY); + if (!outImage) { + LERROR("Failed to create image"); + destroy(); + return; + } + + outImage->x0 = 0; + outImage->y0 = 0; + outImage->x1 = imageWidth; + outImage->y1 = imageHeight; + outImage->color_space = OPJ_CLRSPC_GRAY; + + if (!opj_setup_encoder(encoder, &encoderParams, outImage)) { + LERROR("Failed to set up encoder"); + destroy(); + return; + } + + opj_stream_t* outStream = opj_stream_create_default_file_stream(outfile, OPJ_FALSE); + if (!outStream) { + LERROR("Failed to set up out stream"); + destroy(); + return; + } + + // ___________ nX + // | | | | + // |___|___|___| + // | | | | + // |___|___|___| + // | | | | + // |___|___|___| + // nY + + const unsigned int numTilesX = imageWidth / tileWidth; + const unsigned int numTilesY = imageHeight / tileHeight; + + const OPJ_UINT32 numTiles = static_cast(numTilesX) * + static_cast(numTilesY); + const OPJ_UINT32 dataSize = static_cast(tileWidth) * + static_cast(tileHeight) * + static_cast(numComps) * + static_cast(compPrec / 8); + + std::vector> outvec(numTiles); + + for (size_t i = 0; i < numTilesY; ++i) { + for (size_t j = 0; j < numTilesX; j++) { + for (size_t y = 0; y < tileHeight; ++y) { + for (size_t x = 0; x < tileWidth; ++x) { + const int32_t& intensity = data[ + y * imageWidth + j * tileWidth + i * tileHeight * imageWidth + x + ]; + outvec[j + i * numTilesX].push_back(intensity); + } + } + } + } + + if (!opj_start_compress(encoder, outImage, outStream)) { + LERROR("Failed to start compress"); + } + + for (size_t i = 0; i < numTiles; ++i) { + //if (!opj_write_tile(encoder, i, &outvec[i][0], dataSize, outStream)) { + if (!opj_write_tile(encoder, i, outvec[i].data(), dataSize, outStream)) { + LERROR("Failed to write tile"); + } + } + + if (!opj_end_compress(encoder, outStream)) { + LERROR("Failed to end compress"); + } + + opj_image_destroy(outImage); + opj_stream_destroy(outStream); + opj_destroy_codec(encoder); +} + +void J2kCodec::setupDecoder(int downsamplingLevel, int numQualityLayers, int x0, int y0, + int x1, int y1, int numThreads) +{ + opj_set_default_decoder_parameters(&_decoderParams); + _decoderParams.decod_format = infileFormat(_infileName); + //_decoderParams.cp_layer = numQualityLayers; + _decoderParams.cp_reduce = downsamplingLevel; + + switch (_decoderParams.decod_format) { + case J2K_CFMT: { + // JPEG-2000 codestream + _decoder = opj_create_decompress(OPJ_CODEC_J2K); + break; + } + case JP2_CFMT: { + // JPEG 2000 compressed image data + _decoder = opj_create_decompress(OPJ_CODEC_JP2); + break; + } + case JPT_CFMT: { + // JPEG 2000, JPIP + _decoder = opj_create_decompress(OPJ_CODEC_JPT); + break; + } + default: + LERROR(std::format( + "Unrecognized format for input {}" + "[Accept only .j2k (0), .jp2 (1), or .jpc (2), got {}]", + _decoderParams.infile, + _decoderParams.decod_format + )); + return; + } + + if (!opj_setup_decoder(_decoder, &_decoderParams)) { + LERROR("Failed to set up the decoder"); + return; + } + + // Read the main header of the codestream and if necessary the JP2 boxes + if (!opj_read_header(_infileStream, _decoder, &_image)) { + LERROR("Failed to read the header"); + return; + } + + + + if (x0 >= 0 && y0 >= 0 && x1 >= 0 && y1 >= 0) { + if (opj_set_decode_area(_decoder, _image, x0, y0, x1, y1)) { + LERROR("Failed to set decode area"); + return; + } + } + + // TODO(mnoven): Broken internal multithreading. Crashes if we decode on multiple threads + // Might be fixed in the future. + // if (opj_has_thread_support()) { + // if (!opj_codec_set_threads(_decoder, 4)) { + // LERROR("Failed to set multi-threads threads"); + // }; + // } +} + +} // namespace openspace diff --git a/modules/solarbrowsing/util/j2kcodec.h b/modules/solarbrowsing/util/j2kcodec.h new file mode 100644 index 0000000000..5b5ae37a24 --- /dev/null +++ b/modules/solarbrowsing/util/j2kcodec.h @@ -0,0 +1,88 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___J2KCODEC___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___J2KCODEC___H__ + +#include +#include +#include + +namespace openspace { + +/** + * TODO(mnoven): A simple wrapper around openjpeg. As of 08/24/17 openjpeg has 3 major + * bottlenecks which are listed below: + * + * 1. We can't perform decoding on multiple threads, this feature is not stable and + * results in a segmentation fault. + * 2. We want to be able to decode directly into our buffer without having to go through + * the opj_image_t object. + * See: https://github.com/uclouvain/openjpeg/issues/837 + * 3. Decoding precison is always 32-bits integers, meaning conversion has to be done if + * 8-bytes are preferred. + * See: https://github.com/uclouvain/openjpeg/issues/836 + */ + +struct ImageData { + int32_t* data; + uint32_t w; + uint32_t h; +}; + +class J2kCodec { +public: + static constexpr const int ALL_THREADS = 0; + + J2kCodec(bool verboseMode = false); + ~J2kCodec(); + + // Decode into a client allocated buffer + void decodeIntoBuffer(const std::string& path, unsigned char* buffer, + int resolutionLevel, int numQualityLayers = 1, int x0 = -1, int y0 = -1, + int x1 = -1, int y1 = -1, int numThreads = ALL_THREADS); + + // Experimental and not used at the moment + void encodeAsTiles(const char* outfile, const int32_t* data, unsigned int imageWidth, + unsigned int imageHeight, unsigned int tileWidth, unsigned int tileHeight, + unsigned int numComps, unsigned int compPrec); + +private: + void destroy(); + void createInfileStream(std::string filename); + void setupDecoder(int resolutionLevel, int numQualityLayers, int x0, int x1, int y0, + int y1, int nThreads); + + opj_codec_t* _decoder = nullptr; + opj_dparameters_t _decoderParams; + opj_image_t* _image = nullptr; + + std::string _infileName; + opj_stream_t* _infileStream = nullptr; + bool _verboseMode; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___J2KCODEC___H__ diff --git a/modules/solarbrowsing/util/pixelbufferobject.cpp b/modules/solarbrowsing/util/pixelbufferobject.cpp new file mode 100644 index 0000000000..444bbfbbb6 --- /dev/null +++ b/modules/solarbrowsing/util/pixelbufferobject.cpp @@ -0,0 +1,78 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ +#include +#include + +namespace openspace { + +PixelBufferObject::PixelBufferObject(const int size) : _id(0), _size(size) { + initialize(); +} +PixelBufferObject::~PixelBufferObject() { + glDeleteBuffers(1, &_id); +} + +template +T* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size) { + if (shouldOrphanData) { + glBufferData(GL_PIXEL_UNPACK_BUFFER, size, NULL, GL_STREAM_DRAW); + } + T* data = static_cast( + glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, NULL, size, + GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT)); + + return std::move(data); +} + +const GLuint& PixelBufferObject::id() { + return _id; +} + +void PixelBufferObject::releaseMappedBuffer() { + glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); +} + +void PixelBufferObject::activate() { + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, _id); +} + +void PixelBufferObject::deactivate() { + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); +} + +void PixelBufferObject::initialize() { + glGenBuffers(1, &_id); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, _id); + glBufferData(GL_PIXEL_UNPACK_BUFFER, _size, 0, GL_STREAM_DRAW); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); +} + +template unsigned char* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template float* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template double* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template int* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template unsigned int* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template long* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +template unsigned long* PixelBufferObject::mapToClientMemory(bool shouldOrphanData, int size); +} // namespace openspace diff --git a/modules/solarbrowsing/util/pixelbufferobject.h b/modules/solarbrowsing/util/pixelbufferobject.h new file mode 100644 index 0000000000..29e5ee896c --- /dev/null +++ b/modules/solarbrowsing/util/pixelbufferobject.h @@ -0,0 +1,59 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___PIXELBUFFEROBJECT___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___PIXELBUFFEROBJECT___H__ + +#include +#include + +/** + * Helper class for Pixel Buffer Objects + */ +namespace openspace { + +class PixelBufferObject { +public: + PixelBufferObject(const int size); + ~PixelBufferObject(); + /** + * If orphaned - buffer will allocate new data and return immediately. + * Otherwise glMapBuffer will stall for GPU to finish its job. + */ + template + T* mapToClientMemory(bool shouldOrphanData, int size); + void releaseMappedBuffer(); + void activate(); + void deactivate(); + const GLuint& id(); + +private: + void initialize(); + GLuint _id; + unsigned int _size = 0; +}; + +} // namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___PIXELBUFFEROBJECT___H__ diff --git a/modules/solarbrowsing/util/spacecraftimagerymanager.cpp b/modules/solarbrowsing/util/spacecraftimagerymanager.cpp new file mode 100644 index 0000000000..46cc34ad0b --- /dev/null +++ b/modules/solarbrowsing/util/spacecraftimagerymanager.cpp @@ -0,0 +1,606 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + constexpr const char* _loggerCat = "SpacecraftImageryManager"; + constexpr const double SUN_RADIUS = 1391600000.0 * 0.5; +} // namespace + +namespace openspace { + +// Conversion needed before passing dates into the spice manager +std::string SpacecraftImageryManager::ISO8601(std::string& datetime) { + std::string month = datetime.substr(5, 3); + + std::string MM = ""; + if (month == "JAN") MM = "01"; + else if (month == "FEB") MM = "02"; + else if (month == "MAR") MM = "03"; + else if (month == "APR") MM = "04"; + else if (month == "MAY") MM = "05"; + else if (month == "JUN") MM = "06"; + else if (month == "JUL") MM = "07"; + else if (month == "AUG") MM = "08"; + else if (month == "SEP") MM = "09"; + else if (month == "OCT") MM = "10"; + else if (month == "NOV") MM = "11"; + else if (month == "DEC") MM = "12"; + else ghoul_assert(false, "Bad month"); + + datetime.replace(4, 5, "-" + MM + "-"); + return datetime; +} + +void SpacecraftImageryManager::loadTransferFunctions(const std::string& path, + std::unordered_map>& _tfMap) +{ + std::filesystem::path sequenceDir(path); + + if (!std::filesystem::is_directory(sequenceDir)) { + LERROR(std::format("Could not load directory '{}'", sequenceDir.string())); + } + + std::vector sequencePaths = ghoul::filesystem::walkDirectory( + sequenceDir, + ghoul::filesystem::Recursive::Yes, + ghoul::filesystem::Sorted::Yes + ); + + for (const std::filesystem::path& seqPath : sequencePaths) { + if (seqPath.extension() == ".txt") { + std::string key = seqPath.stem().string(); + _tfMap[key] = std::make_shared(seqPath); + } + } +} + +bool SpacecraftImageryManager::loadMetadataFromDisk(const std::string& rootPath, + std::unordered_map>& _imageMetadataMap) +{ + + std::filesystem::path sequenceDir(rootPath); + + if (!std::filesystem::is_directory(sequenceDir)) { + LERROR(std::format("Could not load directory '{}'", sequenceDir.string())); + } + + bool metadataLoaded = false; + + + std::vector sequencePaths = ghoul::filesystem::walkDirectory( + sequenceDir, + ghoul::filesystem::Recursive::No, + ghoul::filesystem::Sorted::No + ); + + for (const std::filesystem::path& seqPath : sequencePaths) { + const std::string extension = seqPath.extension().string(); + const std::string base = seqPath.filename().string(); + const std::size_t foundCachedImageData = base.find("_cached"); + if (extension != ".txt" || foundCachedImageData == std::string::npos) { + continue; + } + + const std::string::size_type separator = base.rfind("_"); + const std::string instrument = base.substr(0, separator); + LDEBUG(std::format("Loading instrument: {}", instrument)); + + metadataLoaded = true; + std::ifstream myfile(seqPath); + if (!myfile.is_open()) { + LERROR("Failed to open metadata file"); + return false; + } + + int numStates; + myfile >> numStates; + + for (int i = 0; i < numStates; i++) { + ImageMetadata im; + + myfile >> std::ws; // Skip the rest of the line + std::string date; + std::getline(myfile, date); + + if (date.empty()) { + LERROR("Failed to open state metadata: date"); + return false; + } + + double timeObserved = + SpiceManager::ref().ephemerisTimeFromDate(ISO8601(date)); + + std::string relPath; + myfile >> relPath; + + if (myfile.bad()) { + LERROR("Failed to open state metadata: relPath"); + return false; + } + + im.filename = rootPath + "/" + relPath; + + myfile >> im.fullResolution; + + if (myfile.bad()) { + LERROR("Failed to open state metadata: fullResolution"); + return false; + } + + myfile >> im.scale; + + if (myfile.bad()) { + LERROR("Failed to open state metadata: scale"); + return false; + } + + float x, y; + myfile >> x >> y; + im.centerPixel = glm::vec2(x,y); + myfile >> im.isCoronaGraph; + + if (myfile.bad()) { + LERROR("Failed to open state metadata: isCoronaGraph"); + return false; + } + + _imageMetadataMap[instrument].addKeyframe(timeObserved, std::move(im)); + } + myfile.close(); + } + return metadataLoaded; +} + +void SpacecraftImageryManager::saveMetadataToDisk(const std::string& rootPath, + std::unordered_map>& _imageMetadataMap) +{ + using K = std::string; + using V = Timeline; + for (const std::pair& instrument : _imageMetadataMap) { + std::ofstream ofs(rootPath + "/" + instrument.first + "_cached" + ".txt"); + if (!ofs.is_open()) { + LERROR("Failed to open file"); + } + const Timeline& sequence = instrument.second; + ofs << sequence.nKeyframes() << "\n"; + for (const Keyframe& metadata : sequence.keyframes()) { + ofs << SpiceManager::ref().dateFromEphemerisTime( + metadata.timestamp + ) << "\n"; + const ImageMetadata& im = metadata.data; + + std::filesystem::path filePath(im.filename); + std::filesystem::path fileName = filePath.filename(); + + ofs << fileName.string() << "\n"; + ofs << im.fullResolution << "\n"; + ofs << im.scale << "\n"; + ofs << im.centerPixel.x << "\n"; + ofs << im.centerPixel.y << "\n"; + ofs << im.isCoronaGraph << "\n"; + } + ofs.close(); + } +} + +// @TODO emiax: If openjpeg ever starts supporting reading XML metadata, +// this implementation should be improved in order not to search the entire buffer for +// XML data. There is an issue here: +// (https://github.com/uclouvain/openjpeg/issues/929) +ImageMetadata SpacecraftImageryManager::parseJ2kMetadata( + const ghoul::filesystem::File& file) +{ + ImageMetadata im; + im.filename = file.path().string(); + + std::ifstream stream(file.path(), std::ios::binary | std::ios::ate); + std::streamsize size = stream.tellg(); + stream.seekg(0, std::ios::beg); + std::vector buffer(size); + if (!stream.read(buffer.data(), size)) { + LERROR(std::format("Failed to read data from '{}' ", file.path())); + return im; + } + std::string_view bufferView(buffer.data(), size); + + auto extractInnerXml = [](std::string_view view, const std::string& elementName) -> + std::optional + { + const std::string startTag = + std::string("<") + elementName + std::string(">"); + const std::string endTag = std::string(""); + + const auto begin = + std::search(view.begin(), view.end(), startTag.begin(), startTag.end()); + if (begin == view.end()) { + return std::nullopt; +; } + const auto afterBeginTag = begin + startTag.size(); + + const auto end = + std::search(afterBeginTag, view.end(), endTag.begin(), endTag.end()); + if (end == view.end()) { + return std::nullopt; + } + return std::string_view(&*afterBeginTag, end - afterBeginTag); + }; + + std::optional metaData = extractInnerXml(bufferView, "meta"); + if (!metaData.has_value()) { + LERROR(std::format("Could not find metadata in {}", file.path())); + return im; + } + + std::optional telescop = + extractInnerXml(metaData.value(), "TELESCOP"); + if (!telescop.has_value()) { + LERROR(std::format("Could not find TELESCOP tag {}", file.path())); + return im; + } + + if (std::optional naxis = + extractInnerXml(metaData.value(), "NAXIS1")) + { + im.fullResolution = std::stoi(std::string(naxis.value())); + } + else { + LERROR(std::format("Could not find NAXIS1 tag {}", file.path())); + return im; + } + + const float halfRes = im.fullResolution / 2.f; + + glm::vec2 centerPixel; + if (std::optional centerPixelX = + extractInnerXml(bufferView, "CRPIX1")) + { + centerPixel.x = std::stof(std::string(centerPixelX.value())); + } + else { + LERROR(std::format("Could not find CRPIX1 tag {}", file.path())); + return im; + } + + if (std::optional centerPixelY = + extractInnerXml(bufferView, "CRPIX2")) + { + centerPixel.y = std::stof(std::string(centerPixelY.value())); + } + else { + LERROR(std::format("Could not find CRPIX2 tag {}", file.path())); + return im; + } + + const glm::vec2 offset = ((halfRes - centerPixel) / halfRes) * glm::vec2(SUN_RADIUS); + im.centerPixel = offset; + + if (telescop.value() == "SOHO") { + if (std::optional plateScl = + extractInnerXml(metaData.value(), "PLATESCL")) + { + const float plateScale = std::stof(std::string(plateScl.value())); + im.scale = 1.f / (plateScale / 2.f); + im.isCoronaGraph = true; + } + else { + LERROR(std::format("Could not find NAXIS1 tag {}", file.path())); + return im; + } + } + else if (telescop.value() == "SDO") { + std::optional rsunObs = extractInnerXml(bufferView, "RSUN_OBS"); + std::optional cDelt1 = extractInnerXml(bufferView, "CDELT1"); + + if (!rsunObs.has_value()) { + LERROR(std::format("Could not find RSUN_OBS tag {}", file.path())); + return im; + } + if (!cDelt1.has_value()) { + LERROR(std::format("Could not find CDELT1 tag {}", file.path())); + return im; + } + + im.scale = (std::stof(std::string(rsunObs.value())) / + std::stof(std::string(cDelt1.value()))) / + (im.fullResolution / 2.f); + im.isCoronaGraph = false; + } + else { // Telescope is assumed to be STEREO + std::optional rsun = extractInnerXml(bufferView, "RSUN"); + std::optional cDelt1 = extractInnerXml(bufferView, "CDELT1"); + if (!rsun.has_value()) { + LERROR(std::format("Could not find RSUN_OBS tag {}", file.path())); + return im; + } + if (!cDelt1.has_value()) { + LERROR(std::format("Could not find CDELT1 tag {}", file.path())); + return im; + } + + im.scale = (std::stof(std::string(rsun.value())) / + std::stof(std::string(cDelt1.value()))) / + (im.fullResolution / 2.f); + im.isCoronaGraph = false; + + if (std::optional detector = + extractInnerXml(bufferView, "DETECTOR")) + { + im.isCoronaGraph = + detector.value() == "COR1" || detector.value() == "COR2"; + } + else { + LWARNING(std::format( + "Could not find DETECTOR tag {}", file.path() + )); + } + } + return im; +} + +// This is currently not used. Instead, the parseJ2kMetadata is used, +// extracting the data directoy from the JPEG2000 file by naively searching the entire +// buffer for metadata, avoiding pre-processing steps. +// If you want to use this, you need to extract metadata to json first, +// for example using: https://github.com/novalain/j2kcodec +ImageMetadata SpacecraftImageryManager::parseJsonMetadata( + const ghoul::filesystem::File& file) +{ + ImageMetadata im; + im.filename = file.path().string(); + const std::string filename = std::string(file.path().string() + ".json"); + + if (!std::filesystem::exists(filename)) { + LERROR(std::format("'{}' has no specified json metadata", file.path())); + // TODO: Hardcoded values, when there are no json files. + return im; + } + + // Parse JSON metadata + using json = nlohmann::json; + + std::ifstream i(filename); + if (i.fail()) { + LERROR(std::format("Error opening file '{}'", filename)); + } + + json j; + i >> j; + const json data = j["meta"]["fits"]; + + if (data.is_null()) { + LERROR(std::format("Error in metadata '{}'", filename)); + } + + json value = data["TELESCOP"]; + if (value.is_null() && !value.is_string()) { + LERROR("Metadata did contain information about type of spacecraft"); + return im; + } + // TODO: value might not exist + std::string spacecraftType = value; + + value = data["NAXIS1"]; + if (value.is_null()) { + LERROR("Metadata did not contain information about resolution"); + } + + const std::string sFullResolution = value; + im.fullResolution = std::stoi(sFullResolution); + // Special case of sdo - RSUN is given in pixels + // For SOHO the radius of the sun is not specified - we instead use platescl + if (spacecraftType == "SOHO") { + const std::string sScale = data["PLATESCL"]; + const float plateScale = stof(sScale); + im.scale = 1.f / (plateScale / 2.f); + im.isCoronaGraph = true; + } else { + float sunRadiusPixels = 0.f; + // SDO has RSUN specified in pixels + if (spacecraftType == "SDO") { + value = data["RSUN_OBS"]; + if (value.is_null()) { + LERROR("SDO Metadata: RSUN_OBS missing!"); + } + std::string sSunRadiusArcsec = value; + value = data["CDELT1"]; + if (value.is_null()) { + LERROR("SDO Metadata: CDELT1 missing!"); + } + std::string sCdelt1 = value; + const float cdelt1 = stof(sCdelt1); + const float sunRadiusArcsec = stof(sSunRadiusArcsec); + sunRadiusPixels = sunRadiusArcsec / cdelt1; + im.isCoronaGraph = false; + } else { + // STEREO has RSUN specified in arcsecs - need to divide by factor + std::string sCdelt1 = data["CDELT1"]; + const float cdelt1 = stof(sCdelt1); + std::string sSunRadiusArcsec = data["RSUN"]; + const float sunRadiusArcsec = stof(sSunRadiusArcsec); + sunRadiusPixels = sunRadiusArcsec / cdelt1; + + value = data["DETECTOR"]; + if (value.is_null()) { + LERROR("No observer specified in Stereo"); + } + + std::string sObserver = value; + if (sObserver == "COR1" || sObserver == "COR2") { + im.isCoronaGraph = true; + } else { + im.isCoronaGraph = false; + } + } + float scale = sunRadiusPixels / (im.fullResolution / 2.f); + im.scale = scale; + } + + const std::string sCenterPixelX = data["CRPIX1"]; + const std::string sCenterPixelY = data["CRPIX2"]; + + const float centerPixelX = stof(sCenterPixelX); + const float centerPixelY = stof(sCenterPixelY); + const float halfRes = im.fullResolution / 2.f; + + const float offsetX = ((halfRes - centerPixelX) / halfRes) * SUN_RADIUS; + const float offsetY = ((halfRes - centerPixelY) / halfRes) * SUN_RADIUS; + + im.centerPixel = glm::vec2(offsetX, offsetY); + + return im; +} + +void SpacecraftImageryManager::loadImageMetadata(const std::string& path, + std::unordered_map>& _imageMetadataMap) +{ + std::unordered_map> result; + + LDEBUG("Begin loading spacecraft imagery metadata"); + + // Pre-processed data + if (loadMetadataFromDisk(path, result)) { + _imageMetadataMap.insert(result.begin(), result.end()); + return; + } + + std::filesystem::path sequenceDir(path); + + if (!std::filesystem::is_directory(sequenceDir)) { + LERROR(std::format("Could not load directory '{}'", sequenceDir.string())); + } + + + LDEBUG("Loading sequence directory"); + std::vector sequencePaths = ghoul::filesystem::walkDirectory( + sequenceDir, + ghoul::filesystem::Recursive::Yes, + ghoul::filesystem::Sorted::Yes + ); + + LDEBUG("Filtering data values"); + sequencePaths.erase( + std::remove_if( + sequencePaths.begin(), + sequencePaths.end(), + [](const std::filesystem::path& path) { + const std::string& ext = path.extension().string(); + return (ext != ".jp2") && (ext != ".j2k"); + } + ), + sequencePaths.end() + ); + + + LDEBUG("Reading meta data"); + size_t count = 0; + + std::mutex spiceAndPushMutex; + + std::vector> futures; + futures.reserve(sequencePaths.size()); + + std::cout << '\n'; + auto exec = [&](const std::filesystem::path& seqPath) { + ghoul::filesystem::File currentFile(seqPath); + std::string fileName = seqPath.filename().string(); + size_t posSatelliteInfoStart = fileName.rfind("__") + 2; + std::string satelliteInfo = fileName.substr(posSatelliteInfoStart); + + // Name + size_t posSatelliteNameEnd = satelliteInfo.find_first_of("_"); + std::string satelliteName = satelliteInfo.substr(0, posSatelliteNameEnd); + + // Instrument + size_t posInstrumentNameStart = posSatelliteNameEnd + 1; + std::string instrumentName = satelliteInfo.substr(posInstrumentNameStart); + size_t dot = instrumentName.rfind("."); + instrumentName = instrumentName.substr(0, dot); + + // Time @TODO (anden88 2025-12-02): Parse the time string from file in a more + // robust way? + std::vector tokens; + std::stringstream ss; + ss.str(seqPath.filename().string()); + std::string item; + while (std::getline(ss, item, '_')) { + tokens.push_back(item); + } + if (tokens.size() >= 8) { + std::string time = tokens[0] + "-" + tokens[1] + "-" + + tokens[2] + "T" + tokens[4] + ":" + + tokens[5] + ":" + tokens[6] + "." + tokens[7]; + + ImageMetadata im = parseJ2kMetadata(currentFile); + spiceAndPushMutex.lock(); + result[instrumentName].addKeyframe( + global::timeManager->time().convertTime(time), + std::move(im) + ); + spiceAndPushMutex.unlock(); + } + ++count; + + if (count % 10000 == 0) { + LINFO(std::format( + "Processing image {} out of {} ", count, sequencePaths.size() + )); + } + }; + + for (const std::filesystem::path& seqPath : sequencePaths) { + exec(seqPath); + } + + saveMetadataToDisk(path, result); + _imageMetadataMap.insert(result.begin(), result.end()); + + LDEBUG("Finish loading imagery metadata"); + LDEBUG("Saving imagery metadata"); + + LDEBUG(std::format("{} images loaded", count)); + LDEBUG(std::format("{} values in metamap", _imageMetadataMap.size())); +} + +} //namespace openspace diff --git a/modules/solarbrowsing/util/spacecraftimagerymanager.h b/modules/solarbrowsing/util/spacecraftimagerymanager.h new file mode 100644 index 0000000000..3ea791355b --- /dev/null +++ b/modules/solarbrowsing/util/spacecraftimagerymanager.h @@ -0,0 +1,69 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTIMAGERYMANAGER___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTIMAGERYMANAGER___H__ + +#include +#include +#include +#include +#include +#include +#include + +#define IMG_PRECISION unsigned char + +namespace ghoul { + namespace opengl { class Texture; } + namespace filesystem { class File; } +} // namespace ghoul + +namespace openspace { + +class TransferFunction; + +class SpacecraftImageryManager { +public: + void loadTransferFunctions(const std::string& path, + std::unordered_map>& _tfMap); + void loadImageMetadata(const std::string& path, + std::unordered_map>& _imageMetadataMap); + +private: + ImageMetadata parseJ2kMetadata(const ghoul::filesystem::File& file); + ImageMetadata parseJsonMetadata(const ghoul::filesystem::File& file); + + std::string ISO8601(std::string& datetime); + + bool loadMetadataFromDisk(const std::string& rootPath, + std::unordered_map>& _imageMetadataMap); + + void saveMetadataToDisk(const std::string& rootPath, + std::unordered_map>& _imageMetadataMap); +}; + +} //namespace openspace + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___SPACECRAFTIMAGERYMANAGER___H__ diff --git a/modules/solarbrowsing/util/structs.h b/modules/solarbrowsing/util/structs.h new file mode 100644 index 0000000000..a2b5723af4 --- /dev/null +++ b/modules/solarbrowsing/util/structs.h @@ -0,0 +1,59 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2018 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#ifndef __OPENSPACE_MODULE_SOLARBROWSING___STRUCTS___H__ +#define __OPENSPACE_MODULE_SOLARBROWSING___STRUCTS___H__ + +#include +#include +#include + +//namespace openspace::solarbrowsing { +namespace openspace { + + // Assume everything in arcsec to minimize metadata +struct ImageMetadata { + std::string filename; + int fullResolution; + float scale; + glm::vec2 centerPixel; + bool isCoronaGraph; +}; + +struct SolarImageData { + unsigned char* data; + const ImageMetadata* im; + double timeObserved; +}; + +struct DecodeData { + const ImageMetadata* im; + unsigned int resolutionLevel; + double timeObserved; + bool verboseMode; +}; + +} + +#endif // __OPENSPACE_MODULE_SOLARBROWSING___STRUCTS___H__