Add the JUICE mission (#2155)

This commit is contained in:
Alexander Bock
2022-06-29 15:43:41 +02:00
committed by GitHub
parent ae930e3a8d
commit 94a20b8c35
24 changed files with 1955 additions and 3 deletions

View File

@@ -0,0 +1,14 @@
width 10
lower 0.0
upper 1.0
mappingkey 0.0 60 38 164 255
mappingkey 0.083 106 43 167 255
mappingkey 0.166 173 54 110 255
mappingkey 0.332 253 64 40 255
mappingkey 0.415 234 117 6 255
mappingkey 0.498 230 169 16 255
mappingkey 0.664 236 236 159 255
mappingkey 0.830 251 251 235 255
mappingkey 0.915 255 255 255 255
mappingkey 1.0 255 255 255 255

View File

@@ -0,0 +1,52 @@
local transforms = asset.require('./transforms')
local data = asset.syncedResource({
Type = "HttpSynchronization",
Name = "Ganymede Plane Simulations",
Identifier = "juice_ganymede_fieldlines",
Version = 1
})
local magnetosphere = {
Identifier = "GanymedeMagnetosphere",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderableFieldlinesSequence",
SourceFolder = data,
LineWidth = 1.0,
InputFileType = "Json",
ColorMethod = "By Quantity",
ColorQuantity = 0,
ColorTableRanges = { { 62.556353386366766, 1665.5534182835445 } },
ColorTablePaths = { asset.localResource("CMR-illuminance2.txt") },
Color = { 1.0, 0.725, 0.75, 0.8 }
},
GUI = {
Name = "Ganymede Magnetosphere",
Path = "/Solar System/Missions/Juice/Fieldlines",
Description = "Fieldlines showing a simulation of the magnetic fields around Ganymede"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(magnetosphere)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(magnetosphere)
end)
asset.meta = {
Name = "Static fieldline representation of Ganymede's magnetic field",
Version = "1.0",
Description = [[
Showing a single timestep of the magnetic fieldlines around Ganymede in the GPHIO
coordinate system
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,9 @@
asset.require('./fov/gala')
asset.require('./fov/janus')
asset.require('./fov/jmc')
asset.require('./fov/majis')
asset.require('./fov/navcam')
asset.require('./fov/rime')
asset.require('./fov/startracker')
asset.require('./fov/swi')
asset.require('./fov/uvs')

View File

@@ -0,0 +1,59 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local Gala = {
Identifier = "JuiceGala",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_GALA_RXT",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_GALA_RXT",
Method = "CIRCLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Gala FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-view for the Ganymede Laster Altimeter (GALA) instrument."
}
}
asset.onInitialize(function()
-- Circle shapes are currently not supported
openspace.addSceneGraphNode(Gala)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(Gala)
end)
asset.export(Gala)
asset.meta = {
Name = "GALA",
Version = "1.0",
Description = [[
Shows the field-view for the Ganymede Laser Altimeter (GALA) instrument onboard Juice,
measuring a 2.5D heightfield of Ganymede and Europa. See
https://elib.dlr.de/94264/1/JUICE%20GALA%20-%20Design%20Overview%20v04.pdf for more
information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,63 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local Janus = {
Identifier = "JuiceJanus",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Transform = {
Translation = {
Type = "StaticTranslation",
Position = { 0.44, 0.33, 0.9 }
}
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_JANUS",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_JANUS",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Janus FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-view for the JANUS instrument onboard Juice"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(Janus)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(Janus)
end)
asset.export(Janus)
asset.meta = {
Name = "Janus",
Version = "1.0",
Description = [[
Shows the field-view for the Jovis Amorum ac Natorum Undique Scrutator (JANUS)
instrument onboard Juice, which is the camera operating in visible wavelengths. See
https://elib.dlr.de/90175/1/2094.pdf for more information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,90 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local JMC1 = {
Identifier = "JuiceJMC1",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_JMC-1",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_JMC-1",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "JUICE_JMC-1 FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-views for the Juice Monitoring cameras"
}
}
local JMC2 = {
Identifier = "JuiceJMC2",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_JMC-2",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_JMC-2",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "JUICE_JMC-2 FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-views for the Juice Monitoring cameras"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JMC1)
openspace.addSceneGraphNode(JMC2)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JMC2)
openspace.removeSceneGraphNode(JMC1)
end)
asset.export(JMC1)
asset.export(JMC2)
asset.meta = {
Name = "JMC",
Version = "1.0",
Description = [[
Shows the field-view for the Juice Monitoring Cameras (JMC) onboard Juice, which
provide status information about the deployment of various Juice systems, like the
solar array, antenna, etc. See https://microcameras.space/project/juice/ for more
information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,256 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local MajisVisnir = {
Identifier = "JuiceMajisVisnir",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_VISNIR",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_VISNIR",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis Visnir FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = [[
The field-of-view for the Moon and Jupiter Imaging Spectrometer measuring in the
visible and near-infrared spectra (0.4-1.9 um and 1.5-5.7 um).
]]
}
}
local MajisVisnirB2 = {
Identifier = "JuiceMajisVisnirB2",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_VISNIR_B2",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_VISNIR_B2",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis Visnir B2 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local MajisVisnirB4 = {
Identifier = "JuiceMajisVisnirB4",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_VISNIR_B4",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_VISNIR_B4",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis Visnir B4 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local MajisIr = {
Identifier = "JuiceMajisIr",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_IR",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_IR",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis IR FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local MajisIrB2 = {
Identifier = "JuiceMajisIrB2",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_IR_B2",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_IR_B2",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis IR B2 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local MajisIrB4 = {
Identifier = "JuiceMajisIrB4",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS_IR_B4",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS_IR_B4",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis IR B4 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local Majis = {
Identifier = "JuiceMajis",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_MAJIS",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_MAJIS",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Majis FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = [[
The field-of-view for the Moon and Jupiter Imaging Spectrometer measuring in the
visible and near-infrared spectra (0.4-1.9 um and 1.5-5.7 um).
]]
}
}
asset.onInitialize(function()
-- We are only adding the main version of this instrument as a scene graph node. Other
-- versions are defined in the available SPICE kernels, but not a lot of information is
-- accessible about them. We don't want to remove them entirely as they might prove
-- useful to some users though
-- openspace.addSceneGraphNode(MajisVisnir)
-- openspace.addSceneGraphNode(MajisVisnirB2)
-- openspace.addSceneGraphNode(MajisVisnirB4)
-- openspace.addSceneGraphNode(MajisIr)
-- openspace.addSceneGraphNode(MajisIrB2)
-- openspace.addSceneGraphNode(MajisIrB4)
openspace.addSceneGraphNode(Majis)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(Majis)
-- openspace.removeSceneGraphNode(MajisIrB4)
-- openspace.removeSceneGraphNode(MajisIrB2)
-- openspace.removeSceneGraphNode(MajisIr)
-- openspace.removeSceneGraphNode(MajisVisnirB4)
-- openspace.removeSceneGraphNode(MajisVisnirB2)
-- openspace.removeSceneGraphNode(MajisVisnir)
end)
-- asset.export(MajisVisnir)
-- asset.export(MajisVisnirB2)
-- asset.export(MajisVisnirB4)
-- asset.export(MajisIr)
-- asset.export(MajisIrB2)
-- asset.export(MajisIrB4)
asset.export(Majis)
asset.meta = {
Name = "Majis",
Version = "1.0",
Description = [[
Shows the field-view for the Moon and Jupiter Imaging Spectrometer (MAJIS) onboard
Juice, which is going to take spectroscopic measurements of the Jovian moons and
Jupiter. See https://www.hou.usra.edu/meetings/lpsc2014/pdf/2493.pdf for more
information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,58 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local NavCam = {
Identifier = "JuiceNavCam",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_NAVCAM-1",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_NAVCAM-1",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "NavCam FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The camera onboard Juice used to navigate by the stars"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(NavCam)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(NavCam)
end)
asset.export(NavCam)
asset.meta = {
Name = "NavCam",
Version = "1.0",
Description = [[
Shows the field-view for the navigational camera (NavCam) onboard Juice, which is used
to measure the location of Juice. See
https://www.spiedigitallibrary.org/proceedings/Download?urlId=10.1117%2F12.2536086
for more information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,93 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
-- Circle shapes are not support
local RimeBase = {
Identifier = "JuiceRimeBase",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_RIME_BASE",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_RIME_BASE",
Method = "CIRCLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Rime Base FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The location of the base for the RIME instrument onboard Juice."
}
}
-- Circle shapes are not supported
local Rime = {
Identifier = "JuiceRime",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_RIME",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_RIME",
Method = "CIRCLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Rime FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The location of the RIME instrument onboard Juice."
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(Rime)
openspace.addSceneGraphNode(RimeBase)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(RimeBase)
openspace.removeSceneGraphNode(Rime)
end)
asset.export(Rime)
asset.export(RimeBase)
asset.meta = {
Name = "RIME",
Version = "1.0",
Description = [[
Shows the field-view for the Radar for Icy Moons Exploration (RIME) onboard Juice,
which is a ground-penetrating radar meant to measure the subsurface structure of the
ice surrounding the icy Galilean moons of up to 9 km. See
https://www.spacetech-i.com/products/mechanisms/juice-rime-antenna for more
information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,121 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local StarOh1 = {
Identifier = "JuiceStarOH1",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_STR-OH1",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_STR-OH1",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Star Tracker OH1 FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The first head of the Hydra star tracking system"
}
}
local StarOh2 = {
Identifier = "JuiceStarOH2",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_STR-OH2",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_STR-OH2",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Star Tracker OH2 FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The second head of the Hydra star tracking system"
}
}
local StarOh3 = {
Identifier = "JuiceStarOH3",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_STR-OH3",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_STR-OH3",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "Star Tracker OH3 FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The third head of the Hydra star tracking system"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(StarOh1)
openspace.addSceneGraphNode(StarOh2)
openspace.addSceneGraphNode(StarOh3)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(StarOh3)
openspace.removeSceneGraphNode(StarOh2)
openspace.removeSceneGraphNode(StarOh1)
end)
asset.export(StarOh1)
asset.export(StarOh2)
asset.export(StarOh3)
asset.meta = {
Name = "Star Tracker",
Version = "1.0",
Description = [[
Shows the field-view for the three headed "Hydra" star trackers onboard Juice, which
is measuring the location of stars and comparing them to their known locations in
order to determine the position of Juice relative to the celestial sphere.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,142 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
-- Circle shapes are not support
local SwiCh2 = {
Identifier = "JuiceSwiCH2",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_SWI_CH2",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_SWI_CH2",
Method = "CIRCLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "SWI CH2 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
local SwiFull = {
Identifier = "JuiceSwiFull",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Transform = {
Translation = {
Type = "StaticTranslation",
-- These translations are eyeballed based on the existing model
Position = { 0.465, -0.1, 0.95 }
}
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_SWI_FULL",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_SWI_FULL",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "SWI Full FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-view for the full SWI instrument onboard Juice."
}
}
-- This frame throws an error as the JUICE_SWI_FULL_GCO500 is not a recognized frame in
-- the kernel set version 5
local SwiFullGCO500 = {
Identifier = "JuiceSwiFullGCO500",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Transform = {
Translation = {
Type = "StaticTranslation",
-- These translations are eyeballed based on the existing model
Position = { 0.465, -0.1, 0.95 }
}
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_SWI_FULL_GCO500",
RGB = { 0.0, 0.0, 0.0 },
Instrument = {
Name = "JUICE_SWI_FULL_GCO500",
Method = "RECTANGLE",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "SWI Full GCO500 FOV",
Path = "/Solar System/Missions/Juice/Instruments"
}
}
asset.onInitialize(function()
-- We are only adding the main version of this instrument as a scene graph node. Other
-- versions are defined in the available SPICE kernels, but not a lot of information is
-- accessible about them. We don't want to remove them entirely as they might prove
-- useful to some users though
-- openspace.addSceneGraphNode(SwiCh2)
-- openspace.addSceneGraphNode(SwiFullGCO500)
openspace.addSceneGraphNode(SwiFull)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(SwiFull)
-- openspace.removeSceneGraphNode(SwiFullGCO500)
-- openspace.removeSceneGraphNode(SwiCh2)
end)
-- asset.export(SwiCh2)
asset.export(SwiFull)
-- asset.export(SwiFullGCO500)
asset.meta = {
Name = "SWI",
Version = "1.0",
Description = [[
Shows the field-view for the Submillimetre Wave Instrument (SWI), which is measuring
the chemistry, meteorology, and structure of Jupiters middle atmosphere as well as the
habitability of the Galilean moons. See
https://www.mps.mpg.de/planetary-science/juice-swi for more information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,58 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local UVS = {
Identifier = "JuiceUVS",
Parent = transforms.Juice.Identifier,
TimeFrame = {
Type = "TimeFrameInterval",
Start = "2031 JUL 02 00:00:00.000",
End = "2035 OCT 05 00:00:00.000"
},
Renderable = {
Type = "RenderableFov",
Body = "JUICE",
Frame = "JUICE_UVS",
RGB = { 0.8, 0.7, 0.7 },
Instrument = {
Name = "JUICE_UVS",
Method = "POLYGON",
Aberration = "NONE"
},
AlwaysDrawFov = true,
PotentialTargets = { "JUPITER", "CALLISTO", "EUROPA", "GANYMEDE", "IO" },
FrameConversions = {}
},
GUI = {
Name = "UVS FOV",
Path = "/Solar System/Missions/Juice/Instruments",
Description = "The field-of-view for the UVS instrument onboard Juice"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(UVS)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(UVS)
end)
asset.export(UVS)
asset.meta = {
Name = "UVS",
Version = "1.0",
Description = [[
Shows the field-view for the Ultraviolet Spectograph (UVS), which is measuring the
composition, chemistry, structure, and variability of Europa's atmopshere. See
https://www.lpi.usra.edu/opag/meetings/aug2015/presentations/day-1/8_b_retherford.pdf
for more information.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,84 @@
local kernels = asset.syncedResource({
Name = "JUICE Kernels",
Type = "HttpSynchronization",
Identifier = "juice_kernels",
Version = 1
})
-- From the crema 5.0b23_1 meta kernel
-- + GPHIO from Ronan
local Kernels = {
kernels .. "juice_sc_sat_crema_5_0b23_1_default_f20160326_v01.bc",
kernels .. "juice_sc_sat_crema_5_0b23_1_comms_f20160326_v01.bc",
kernels .. "juice_sc_sat_crema_5_0b23_1_conjctn_f20160326_v01.bc",
kernels .. "juice_sc_sat_crema_5_0b23_1_flybys_f20160326_v01.bc",
kernels .. "juice_lpbooms_f20160326_v01.bc",
kernels .. "juice_magboom_f20160326_v03.bc",
kernels .. "juice_mga_zero_f20160326_v02.bc",
kernels .. "juice_majis_scan_zero_f20160326_v02.bc",
kernels .. "juice_swi_scan_zero_f20160326_v02.bc",
kernels .. "juice_sa_crema_5_0b23_1_default_f20160326_v01.bc",
kernels .. "juice_v26.tf",
kernels .. "juice_sci_v10.tf",
kernels .. "juice_ops_v07.tf",
kernels .. "juice_dsk_surfaces_v05.tf",
kernels .. "juice_roi_v02.tf",
kernels .. "gphio.tf",
kernels .. "rssd0002.tf",
kernels .. "earth_topo_050714.tf",
kernels .. "earthfixediau.tf",
kernels .. "estrack_v04.tf",
kernels .. "juice_gala_v03.ti",
kernels .. "juice_janus_v06.ti",
kernels .. "juice_jmc_v02.ti",
kernels .. "juice_majis_v05.ti",
kernels .. "juice_navcam_v01.ti",
kernels .. "juice_pep_v10.ti",
kernels .. "juice_radem_v00.ti",
kernels .. "juice_rime_v04.ti",
kernels .. "juice_rpwi_v02.ti",
kernels .. "juice_str_v01.ti",
kernels .. "juice_swi_v07.ti",
kernels .. "juice_uvs_v03.ti",
kernels .. "juice_aux_v01.ti",
kernels .. "de-403-masses.tpc",
kernels .. "gm_de431.tpc",
kernels .. "juice_jup006.tpc",
kernels .. "juice_roi_v01.tpc",
kernels .. "juice_fict_20160326_v03.tsc",
kernels .. "juice_step_20160326_v03.tsc",
kernels .. "juice_struct_v13.bsp",
kernels .. "juice_cog_v00.bsp",
kernels .. "juice_roi_v02.bsp",
kernels .. "mar085_20200101_20400101.bsp",
kernels .. "earthstns_fx_050714.bsp",
kernels .. "estrack_v04.bsp",
kernels .. "jup310_20200101_20500101.bsp",
kernels .. "jup343_20200101_20500101.bsp",
kernels .. "de432s.bsp",
kernels .. "noe-5-2017-gal-a-reduced_20200101_20380902.bsp",
kernels .. "juice_mat_crema_5_0b23_1_20230405_20351005_v01.bsp",
}
asset.export("Kernels", Kernels)
asset.meta = {
Name = "Spice Kernels for the Juice Mission",
Version = "1.0",
Description = [[
Kernels were acquired from the official Juice mailing list and extended with the
GPHIO kernel provided by Ronan Modolo for the fieldline and plane data visualization
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,75 @@
local sunTransforms = asset.require('scene/solarsystem/sun/transforms')
local transforms = asset.require('./transforms')
local model = asset.syncedResource({
Name = "JUICE Model",
Type = "HttpSynchronization",
Identifier = "juice_models",
Version = 1
})
local JuiceModel = {
Identifier = "JuiceModel",
Parent = transforms.Juice.Identifier,
Transform = {
Translation = {
Type = "StaticTranslation",
-- Offset numbers found by eyeballing
Position = { 4.5, 0.0, -1.0 }
},
Rotation = {
Type = "StaticRotation",
Rotation = { math.pi / 2.0, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderableModel",
Body = "JUICE",
GeometryFile = model .. "juice.fbx",
ModelScale = "Centimeter",
LightSources = {
{
Type = "SceneGraphLightSource",
Identifier = "Sun",
Node = sunTransforms.SolarSystemBarycenter.Identifier,
Intensity = 0.6
},
{
Identifier = "Camera",
Type = "CameraLightSource",
Intensity = 0.4,
Enabled = false
}
}
},
GUI = {
Name = "Juice Model",
Path = "/Solar System/Missions/Juice",
Description = "The model of the JUICE spacecraft"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JuiceModel)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JuiceModel)
end)
asset.export(JuiceModel)
asset.meta = {
Name = "Juice Model",
Version = "1.0",
Description = [[
The model of the JUICE spacecraft. The model file was taken from
https://www.cosmos.esa.int/web/esac-cmso/scifleet.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,355 @@
local transforms = asset.require('./transforms')
-- Datasets created using the script found at:
-- https://github.com/OpenSpace/scripts/tree/master/juice-gphio-image-conversion
local data = asset.syncedResource({
Type = "HttpSynchronization",
Name = "Ganymede Plane Simulations",
Identifier = "juice_ganymede_plane_cuts",
Version = 1
})
local GanymedeRadius = 2634 * 1000
-- Size value from the original dataset provided by Ronan
local Size = 4.114 * GanymedeRadius
local xy_n = {
Identifier = "Ganymede_Plane_XY_N",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-n.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane N",
Path = "/Solar System/Missions/Juice/Plane",
Description = "A cut plane in Ganymede's XY plane showing the number of particles"
}
}
local xy_t = {
Identifier = "Ganymede_Plane_XY_T",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-T.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane T",
Path = "/Solar System/Missions/Juice/Plane",
Description = "A cut plane in Ganymede's XY plane showing the temperature"
}
}
local xy_u = {
Identifier = "Ganymede_Plane_XY_U",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-U.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane U",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XY plane showing the strength of the
magnetic field]]
}
}
local xy_utot = {
Identifier = "Ganymede_Plane_XY_Utot",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-Utot.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane U_tot",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XY plane showing the X, Y, and Z components
of the magnetic field mapped to the RGB components.]]
}
}
local xy_ux = {
Identifier = "Ganymede_Plane_XY_Ux",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-Ux.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane Ux",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XY plane showing the X component of
Ganymede's magnetic field]]
}
}
local xy_uy = {
Identifier = "Ganymede_Plane_XY_Uy",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-Uy.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane Uy",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XY plane showing the Y component of
Ganymede's magnetic field]]
}
}
local xy_uz = {
Identifier = "Ganymede_Plane_XY_Uz",
Parent = transforms.GPHIO.Identifier,
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XY-Uz.png",
Enabled = false
},
GUI = {
Name = "Ganymede XY Plane Uz",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XY plane showing the Z component of
Ganymede's magnetic field]]
}
}
local xz_n = {
Identifier = "Ganymede_Plane_XZ_N",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-n.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane N",
Path = "/Solar System/Missions/Juice/Plane",
Description = "A cut plane in Ganymede's XZ plane showing the number of particles"
}
}
local xz_t = {
Identifier = "Ganymede_Plane_XZ_T",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-T.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane T",
Path = "/Solar System/Missions/Juice/Plane",
Description = "A cut plane in Ganymede's XZ plane showing the temperature"
}
}
local xz_u = {
Identifier = "Ganymede_Plane_XZ_U",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-U.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane U",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XZ plane showing the strength of the
magnetic field]]
}
}
local xz_utot = {
Identifier = "Ganymede_Plane_XZ_Utot",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-Utot.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane U_tot",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XZ plane showing the X, Y, and Z components
of the magnetic field mapped to the RGB components.]]
}
}
local xz_ux = {
Identifier = "Ganymede_Plane_XZ_Ux",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-Ux.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane Ux",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XZ plane showing the X component of
Ganymede's magnetic field]]
}
}
local xz_uy = {
Identifier = "Ganymede_Plane_XZ_Uy",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-Uy.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane Uy",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XZ plane showing the Y component of
Ganymede's magnetic field]]
}
}
local xz_uz = {
Identifier = "Ganymede_Plane_XZ_Uz",
Parent = transforms.GPHIO.Identifier,
Transform = {
Rotation = {
Type = "StaticRotation",
Rotation = { -math.pi/2, 0.0, 0.0 }
}
},
Renderable = {
Type = "RenderablePlaneImageLocal",
Size = Size,
Texture = data .. "XZ-Uz.png",
Enabled = false
},
GUI = {
Name = "Ganymede XZ Plane Uz",
Path = "/Solar System/Missions/Juice/Plane",
Description = [[A cut plane in Ganymede's XZ plane showing the Z component of
Ganymede's magnetic field]]
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(xy_n)
openspace.addSceneGraphNode(xy_t)
openspace.addSceneGraphNode(xy_u)
openspace.addSceneGraphNode(xy_utot)
openspace.addSceneGraphNode(xy_ux)
openspace.addSceneGraphNode(xy_uy)
openspace.addSceneGraphNode(xy_uz)
openspace.addSceneGraphNode(xz_n)
openspace.addSceneGraphNode(xz_t)
openspace.addSceneGraphNode(xz_u)
openspace.addSceneGraphNode(xz_utot)
openspace.addSceneGraphNode(xz_ux)
openspace.addSceneGraphNode(xz_uy)
openspace.addSceneGraphNode(xz_uz)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(xz_uz)
openspace.removeSceneGraphNode(xz_uy)
openspace.removeSceneGraphNode(xz_ux)
openspace.removeSceneGraphNode(xz_utot)
openspace.removeSceneGraphNode(xz_u)
openspace.removeSceneGraphNode(xz_t)
openspace.removeSceneGraphNode(xz_n)
openspace.removeSceneGraphNode(xy_uz)
openspace.removeSceneGraphNode(xy_uy)
openspace.removeSceneGraphNode(xy_ux)
openspace.removeSceneGraphNode(xy_utot)
openspace.removeSceneGraphNode(xy_u)
openspace.removeSceneGraphNode(xy_t)
openspace.removeSceneGraphNode(xy_n)
end)
asset.export(xy_n)
asset.export(xy_t)
asset.export(xy_u)
asset.export(xy_utot)
asset.export(xy_ux)
asset.export(xy_uy)
asset.export(xy_uz)
asset.export(xz_n)
asset.export(xz_t)
asset.export(xz_u)
asset.export(xz_utot)
asset.export(xz_ux)
asset.export(xz_uy)
asset.export(xz_uz)
asset.meta = {
Name = "Ganymede Cut Planes",
Version = "1.0",
Description = [[
Cutplane visualizations of Ganymede's magnetic field as prepared by Ronan Modolo.
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,4 @@
asset.require('./trails/earth')
asset.require('./trails/ganymede')
asset.require('./trails/jupiter')
asset.require('./trails/ssb')

View File

@@ -0,0 +1,49 @@
local earthTransforms = asset.require('scene/solarsystem/planets/earth/transforms')
local kernels = asset.require('../kernels')
local JuiceTrailEarth = {
Identifier = "JuiceTrailEarth",
Parent = earthTransforms.EarthBarycenter.Identifier,
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "JUICE",
Observer = "EARTH BARYCENTER",
Kernels = kernels.Kernels
},
Color = { 0.30, 0.70, 0.20 },
StartTime = "2023 APR 05 12:00:00.000",
EndTime = "2033 JUN 04 02:51:00.546",
SampleInterval = 3600
},
GUI = {
Name = "Juice Trail (Earth)",
Path = "/Solar System/Missions/Juice",
Description = "Juice's trajectory relative to the Earth barycenter"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JuiceTrailEarth)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JuiceTrailEarth)
end)
asset.export(JuiceTrailEarth)
asset.meta = {
Name = "Juice trajectory relative to the Earth barycenter",
Version = "1.0",
Description = [[
The trajectory of the Juice spacecraft relative to the Earth barycenter
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,49 @@
local transforms = asset.require('../transforms')
local kernels = asset.require('../kernels')
local JuiceTrailGanymede = {
Identifier = "JuiceTrailGanymede",
Parent = transforms.GanymedePosition.Identifier,
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "JUICE",
Observer = "GANYMEDE",
Kernels = kernels.Kernels
},
Color = { 0.70, 0.770, 0.35 },
StartTime = "2034 DEC 01 00:00:00.000",
EndTime = "2035 OCT 05 00:00:00.000",
SampleInterval = 600
},
GUI = {
Name = "Juice Trail (Ganymede)",
Path = "/Solar System/Missions/Juice",
Description = "Juice's trajectory relative to Ganymede"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JuiceTrailGanymede)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JuiceTrailGanymede)
end)
asset.export(JuiceTrailGanymede)
asset.meta = {
Name = "Juice trajectory relative to Ganymede",
Version = "1.0",
Description = [[
The trajectory of the Juice spacecraft relative to Ganymede
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,49 @@
local jupiterTransforms = asset.require('scene/solarsystem/planets/jupiter/transforms')
local kernels = asset.require('../kernels')
local JuiceTrailJupiter = {
Identifier = "JuiceTrailJupiter",
Parent = jupiterTransforms.JupiterBarycenter.Identifier,
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "JUICE",
Observer = "JUPITER BARYCENTER",
Kernels = kernels.Kernels
},
Color = { 0.70, 0.370, 0.45 },
StartTime = "2031 JUL 02 00:00:00.000",
EndTime = "2035 OCT 05 00:00:00.000",
SampleInterval = 3600
},
GUI = {
Name = "Juice Trail (Jupiter)",
Path = "/Solar System/Missions/Juice",
Description = "Juice's trajectory relative to Jupiter"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JuiceTrailJupiter)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JuiceTrailJupiter)
end)
asset.export(JuiceTrailJupiter)
asset.meta = {
Name = "Juice trajectory relative to Jupiter",
Version = "1.0",
Description = [[
The trajectory of the Juice spacecraft relative to Jupiter
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,49 @@
local sunTransforms = asset.require('scene/solarsystem/sun/transforms')
local kernels = asset.require('../kernels')
local JuiceTrail = {
Identifier = "JuiceTrail",
Parent = sunTransforms.SolarSystemBarycenter.Identifier,
Renderable = {
Type = "RenderableTrailTrajectory",
Translation = {
Type = "SpiceTranslation",
Target = "JUICE",
Observer = "SSB",
Kernels = kernels.Kernels
},
Color = { 0.85, 0.85, 0.85 },
StartTime = "2023 APR 05 12:00:00.000",
EndTime = "2035 OCT 05 00:00:00.000",
SampleInterval = 3600
},
GUI = {
Name = "Juice Trail",
Path = "/Solar System/Missions/Juice",
Description = "Juice's trajectory relative to the solar system's barycenter"
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(JuiceTrail)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(JuiceTrail)
end)
asset.export(JuiceTrail)
asset.meta = {
Name = "Juice trajectory relative to the solar system's barycenter",
Version = "1.0",
Description = [[
The trajectory of the Juice spacecraft relative to the solar system's barycenter
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

View File

@@ -0,0 +1,96 @@
local jupiterTransforms = asset.require('scene/solarsystem/planets/jupiter/transforms')
local kernels = asset.require('./kernels')
local Juice = {
Identifier = "Juice",
Parent = jupiterTransforms.JupiterBarycenter.Identifier,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "JUICE",
Observer = "JUPITER BARYCENTER",
Kernels = kernels.Kernels
},
Rotation = {
Type = "SpiceRotation",
SourceFrame = "JUICE_SPACECRAFT",
DestinationFrame = "GALACTIC",
Kernels = kernels.Kernels
},
},
GUI = {
Name = "Juice",
Path = "/Solar System/Missions/Juice",
Description = "The position of Juice in the reference frame of Jupiter"
}
}
local GanymedePosition = {
Identifier = "GanymedePosition",
Parent = jupiterTransforms.JupiterBarycenter.Identifier,
Transform = {
Translation = {
Type = "SpiceTranslation",
Target = "GANYMEDE",
Observer = "JUPITER BARYCENTER",
Kernels = kernels.Kernels
}
},
GUI = {
Path = "/Solar System/Planets/Jupiter/Moons",
Description = "Ganymede's position relative to Jupiter as an inertial reference frame"
}
}
local GPHIO = {
Identifier = "GPHIO",
Parent = GanymedePosition.Identifier,
Transform = {
Rotation = {
Type = "SpiceRotation",
SourceFrame = "GPHIO",
DestinationFrame = "GALACTIC",
Kernels = kernels.Kernels
}
},
GUI = {
Name = "GPHIO",
Path = "/Solar System/Missions/Juice",
Description = [[A rotating coordinate system called Ganymede Phi-Omega (G_PHI_O). The
X axis is pointing in the direction of corotational flow (System III flow), Z is
parallel to the Jovian spin axis (Omega), and Y completes the right handed set. The
basis vectors are fixed at the time of Ganymede closest approach (2000-12-28
08:25:28)]]
}
}
asset.onInitialize(function()
openspace.addSceneGraphNode(Juice)
openspace.addSceneGraphNode(GanymedePosition)
openspace.addSceneGraphNode(GPHIO)
end)
asset.onDeinitialize(function()
openspace.removeSceneGraphNode(GPHIO)
openspace.removeSceneGraphNode(GanymedePosition)
openspace.removeSceneGraphNode(Juice)
end)
asset.export(Juice)
asset.export(GanymedePosition)
asset.export(GPHIO)
asset.meta = {
Name = "Transformations for the JUICE mission profile",
Version = "1.0",
Description = [[
Contains all of the base transformations necessary for the JUICE mission in the Jovian
system
]],
Author = "OpenSpace Team",
URL = "http://openspaceproject.com",
License = "MIT license"
}

123
data/profiles/juice.profile Normal file
View File

@@ -0,0 +1,123 @@
{
"additional_scripts": [
""
],
"assets": [
"base",
"scene/solarsystem/missions/juice/fieldlines",
"scene/solarsystem/missions/juice/fov/janus",
"scene/solarsystem/missions/juice/fov/navcam",
"scene/solarsystem/missions/juice/model",
"scene/solarsystem/missions/juice/plane",
"scene/solarsystem/missions/juice/trail",
"scene/solarsystem/planets/earth/earth"
],
"camera": {
"altitude": 9220000000.0,
"anchor": "Jupiter",
"latitude": -7.1689,
"longitude": -173.3037,
"type": "goToGeo"
},
"delta_times": [
1.0,
5.0,
30.0,
60.0,
300.0,
1800.0,
3600.0,
43200.0,
86400.0,
604800.0,
1209600.0,
2592000.0,
5184000.0,
7776000.0,
15552000.0,
31536000.0,
63072000.0,
157680000.0,
315360000.0,
630720000.0
],
"mark_nodes": [
"Earth",
"Juice",
"Jupiter",
"Ganymede"
],
"meta": {
"author": "OpenSpace Team",
"description": "Juice profile that visualizes the currently best known trajectory for the JUICE mission the Jupiter and its moons. See https://sci.esa.int/documents/33960/35865/1567260128466-JUICE_Red_Book_i1.0.pdf for more information about the JUICE mission. Currently, only the Janus and NavCam instruments are included in this profile, but the other instruments are available for a custom profile. Some of these are not behaving correctly, which will be addressed later.",
"license": "MIT License",
"name": "Juice",
"url": "https://www.openspaceproject.com",
"version": "1.0"
},
"properties": [
{
"name": "NavigationHandler.OrbitalNavigator.MinimumAllowedDistance",
"type": "setPropertyValueSingle",
"value": "0.0"
},
{
"name": "Scene.JuiceTrailEarth.Renderable.Enabled",
"type": "setPropertyValueSingle",
"value": "false"
},
{
"name": "Scene.JuiceTrailJupiter.Renderable.Enabled",
"type": "setPropertyValueSingle",
"value": "true"
},
{
"name": "Scene.JuiceTrailGanymede.Renderable.Enabled",
"type": "setPropertyValueSingle",
"value": "false"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.DomainEnabled",
"type": "setPropertyValueSingle",
"value": "false"
},
{
"name": "Scene.JuiceTrail.Renderable.Enabled",
"type": "setPropertyValueSingle",
"value": "false"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.LineWidth",
"type": "setPropertyValueSingle",
"value": "2.0"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.Flow.ParticleSize",
"type": "setPropertyValueSingle",
"value": "25.000000"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.Flow.ParticleSpacing",
"type": "setPropertyValueSingle",
"value": "40"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.Flow.Speed",
"type": "setPropertyValueSingle",
"value": "150.000000"
},
{
"name": "Scene.GanymedeMagnetosphere.Renderable.FlowEnabled",
"type": "setPropertyValueSingle",
"value": "true"
}
],
"time": {
"type": "absolute",
"value": "2031-08-01T03:01:30"
},
"version": {
"major": 1,
"minor": 1
}
}

View File

@@ -270,6 +270,7 @@ void RenderablePlane::render(const RenderData& data, RendererTasks&) {
glDepthMask(false);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
}
glDisable(GL_CULL_FACE);
glBindVertexArray(_quad);
glDrawArrays(GL_TRIANGLES, 0, 6);

View File

@@ -550,9 +550,6 @@ fls::Model stringToModel(std::string str) {
bool RenderableFieldlinesSequence::loadJsonStatesIntoRAM() {
fls::Model model = stringToModel(_modelStr);
if (model == fls::Model::Invalid) {
return false;
}
for (const std::string& filePath : _sourceFiles) {
FieldlinesState newState;
const bool loadedSuccessfully = newState.loadStateFromJson(
@@ -1079,6 +1076,12 @@ void RenderableFieldlinesSequence::update(const UpdateData& data) {
if (!_hasBeenUpdated) {
updateVertexPositionBuffer();
}
if (_states[_activeStateIndex].nExtraQuantities() > 0) {
_shouldUpdateColorBuffer = true;
_shouldUpdateMaskingBuffer = true;
}
_hasBeenUpdated = true;
}
else {