From 96e27913ca4f9107231f51ef5943fc0993b09e63 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 15:24:39 +0200 Subject: [PATCH 01/18] Add documentation to RenderableRings Change Size to be specified in meters instead of powerscaled scalars --- data/scene/saturn/saturn/saturn.mod | 3 +- modules/base/basemodule.cpp | 1 + modules/base/rendering/renderablerings.cpp | 153 ++++++++++-------- modules/base/rendering/renderablerings.h | 11 +- modules/base/shaders/nighttexture_fs.glsl | 2 - modules/base/shaders/renderableplanet_fs.glsl | 2 - modules/base/shaders/renderableplanet_vs.glsl | 2 +- modules/base/shaders/rings_fs.glsl | 5 +- modules/base/shaders/rings_vs.glsl | 24 ++- 9 files changed, 112 insertions(+), 91 deletions(-) diff --git a/data/scene/saturn/saturn/saturn.mod b/data/scene/saturn/saturn/saturn.mod index 7b63c66cee..07884ab016 100644 --- a/data/scene/saturn/saturn/saturn.mod +++ b/data/scene/saturn/saturn/saturn.mod @@ -53,9 +53,8 @@ return { Parent = "Saturn", Renderable = { Type = "RenderableRings", - Frame = "IAU_SATURN", Texture = "textures/saturn_rings.png", - Size = { 0.140220, 9.0 }, + Size = 140220000, Offset = { 74500 / 140445.100671159, 1.0 } -- min / max extend }, diff --git a/modules/base/basemodule.cpp b/modules/base/basemodule.cpp index bc9ddc22e9..771253709e 100644 --- a/modules/base/basemodule.cpp +++ b/modules/base/basemodule.cpp @@ -140,6 +140,7 @@ std::vector BaseModule::documentations() const { StaticScale::Documentation(), StaticTranslation::Documentation(), SpiceTranslation::Documentation(), + RenderableRings::Documentation(), modelgeometry::ModelGeometry::Documentation(), planetgeometry::PlanetGeometry::Documentation() }; diff --git a/modules/base/rendering/renderablerings.cpp b/modules/base/rendering/renderablerings.cpp index 8f2927af6f..0ee5676514 100644 --- a/modules/base/rendering/renderablerings.cpp +++ b/modules/base/rendering/renderablerings.cpp @@ -24,6 +24,8 @@ #include +#include + #include #include #include @@ -39,10 +41,8 @@ namespace { const std::string _loggerCat = "RenderableRings"; - const std::string KeySize = "Size"; const std::string KeyTexture = "Texture"; - const std::string KeyFrame = "Frame"; - const std::string KeyOrientation = "Orientation"; + const std::string KeySize = "Size"; const std::string KeyOffset = "Offset"; const std::string KeyNightFactor = "NightFactor"; const std::string KeyTransparency = "Transparency"; @@ -50,10 +50,48 @@ namespace { namespace openspace { +Documentation RenderableRings::Documentation() { + using namespace documentation; + return { + "Renderable Rings", + "base_renderable_rings", + { + { + "Type", + new StringEqualVerifier("RenderableRings"), + "", + Optional::No + }, + { + KeyTexture, + new StringVerifier, + "The one dimensional texture that is used for both sides of the ring.", + Optional::No + }, + { + KeySize, + new DoubleVerifier, + "The radius of the rings in meters.", + Optional::No + }, + { + KeyOffset, + new DoubleVector2Verifier, + "The offset that is used to limit the width of the rings. Each of the " + "two values is a value between 0 and 1, where 0 is the center of the " + "ring and 1 is the maximum extent at the radius. If this value is, for " + "example {0.5, 1.0}, the ring is only shown between radius/2 and radius. " + "It defaults to {0.0, 1.0}.", + Optional::Yes + } + } + }; +} + RenderableRings::RenderableRings(const ghoul::Dictionary& dictionary) : Renderable(dictionary) , _texturePath("texture", "Texture") - , _size("size", "Size", glm::vec2(1.f, 1.f), glm::vec2(0.f), glm::vec2(1.f, 25.f)) + , _size("size", "Size", 1.f, 0.f, std::pow(1.f, 25.f)) , _offset("offset", "Texture Offset", glm::vec2(0.f, 1.f), glm::vec2(0.f), glm::vec2(1.f)) , _nightFactor("nightFactor", "Night Factor", 0.33f, 0.f, 1.f) , _transparency("transparency", "Transparency", 0.15f, 0.f, 1.f) @@ -65,38 +103,26 @@ RenderableRings::RenderableRings(const ghoul::Dictionary& dictionary) , _vertexPositionBuffer(0) , _planeIsDirty(false) { - glm::vec2 size; - dictionary.getValue(KeySize, size); - _size = size; - - if (dictionary.hasKeyAndValue(KeyFrame)) { - _frame = dictionary.value(KeyFrame); - } - - if (dictionary.hasKeyAndValue(KeyOrientation)) { - _orientation = dictionary.value(KeyOrientation); - } + using ghoul::filesystem::File; + + documentation::testSpecificationAndThrow( + Documentation(), + dictionary, + "RenderableRings" + ); + + double size = dictionary.value(KeySize); + _size = size; + setBoundingSphere(PowerScaledScalar::CreatePSS(size)); + + _texturePath = absPath(dictionary.value(KeyTexture)); + _textureFile = std::make_unique(_texturePath); - if (dictionary.hasKeyAndValue(KeyTexture)) { - _texturePath = absPath(dictionary.value(KeyTexture)); - _textureFile = std::make_unique(_texturePath); - } - if (dictionary.hasKeyAndValue(KeyOffset)) { glm::vec2 off = dictionary.value(KeyOffset); _offset = off; } - if (dictionary.hasKeyAndValue(KeyNightFactor)) { - float v = dictionary.value(KeyNightFactor); - _nightFactor = v; - } - - if (dictionary.hasKeyAndValue(KeyTransparency)) { - float v = dictionary.value(KeyTransparency); - _transparency = v; - } - addProperty(_offset); addProperty(_size); @@ -105,15 +131,10 @@ RenderableRings::RenderableRings(const ghoul::Dictionary& dictionary) addProperty(_texturePath); _texturePath.onChange([&](){ loadTexture(); }); - _textureFile->setCallback( - [&](const ghoul::filesystem::File&) { _textureIsDirty = true; } - ); + _textureFile->setCallback([&](const File&) { _textureIsDirty = true; }); addProperty(_nightFactor); - addProperty(_transparency); - - setBoundingSphere(_size.value()); } bool RenderableRings::isReady() const { @@ -155,10 +176,8 @@ bool RenderableRings::deinitialize() { _texture = nullptr; RenderEngine& renderEngine = OsEng.renderEngine(); - if (_shader) { - renderEngine.removeRenderProgram(_shader); - _shader = nullptr; - } + renderEngine.removeRenderProgram(_shader); + _shader = nullptr; return true; } @@ -166,15 +185,27 @@ bool RenderableRings::deinitialize() { void RenderableRings::render(const RenderData& data) { _shader->activate(); - _shader->setUniform("ViewProjection", data.camera.viewProjectionMatrix()); - _shader->setUniform("ModelTransform", glm::mat4(_orientation * _state)); + 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->setUniform( + "modelViewProjectionTransform", + data.camera.projectionMatrix() * glm::mat4(modelViewTransform) + ); _shader->setUniform("textureOffset", _offset); _shader->setUniform("transparency", _transparency); _shader->setUniform("_nightFactor", _nightFactor); - _shader->setUniform("sunPosition", _sunPosition); + _shader->setUniform( + "sunPosition", + _sunPosition + ); - setPscUniforms(*_shader.get(), data.camera, data.position); + setPscUniforms(*_shader, data.camera, data.position); ghoul::opengl::TextureUnit unit; unit.activate(); @@ -204,29 +235,23 @@ void RenderableRings::update(const UpdateData& data) { loadTexture(); _textureIsDirty = false; } - - if (!_frame.empty()) { - _state = SpiceManager::ref().positionTransformMatrix(_frame, "GALACTIC", data.time); - } - - _sunPosition = - OsEng.renderEngine().scene()->sceneGraphNode("Sun")->worldPosition() - + + _sunPosition = OsEng.renderEngine().scene()->sceneGraphNode("Sun")->worldPosition() - data.modelTransform.translation; } void RenderableRings::loadTexture() { if (_texturePath.value() != "") { - std::unique_ptr texture = ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath)); + std::unique_ptr texture = + ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath)); + if (texture) { LDEBUG("Loaded texture from '" << absPath(_texturePath) << "'"); _texture = std::move(texture); - // Textures of planets looks much smoother with AnisotropicMipMap rather than linear -// _texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear); _texture->uploadTexture(); _texture->setFilter(ghoul::opengl::Texture::FilterMode::AnisotropicMipMap); - _textureFile = std::make_unique(_texturePath); _textureFile->setCallback( [&](const ghoul::filesystem::File&) { _textureIsDirty = true; } @@ -236,19 +261,15 @@ void RenderableRings::loadTexture() { } void RenderableRings::createPlane() { - // ============================ - // GEOMETRY (quad) - // ============================ - const GLfloat size = _size.value()[0]; - const GLfloat w = _size.value()[1]; + const GLfloat size = _size.value(); const GLfloat vertex_data[] = { // x y z w s t - -size, -size, 0.f, w, 0.f, 0.f, - size, size, 0.f, w, 1.f, 1.f, - -size, size, 0.f, w, 0.f, 1.f, - -size, -size, 0.f, w, 0.f, 0.f, - size, -size, 0.f, w, 1.f, 0.f, - size, size, 0.f, w, 1.f, 1.f, + -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 diff --git a/modules/base/rendering/renderablerings.h b/modules/base/rendering/renderablerings.h index ec063b1f22..75aa28a8c8 100644 --- a/modules/base/rendering/renderablerings.h +++ b/modules/base/rendering/renderablerings.h @@ -27,6 +27,7 @@ #include +#include #include #include #include @@ -54,12 +55,14 @@ public: void render(const RenderData& data) override; void update(const UpdateData& data) override; + static openspace::Documentation Documentation(); + private: void loadTexture(); void createPlane(); properties::StringProperty _texturePath; - properties::Vec2Property _size; + properties::FloatProperty _size; properties::Vec2Property _offset; properties::FloatProperty _nightFactor; properties::FloatProperty _transparency; @@ -72,11 +75,7 @@ private: GLuint _quad; GLuint _vertexPositionBuffer; bool _planeIsDirty; - - std::string _frame; - glm::mat3 _orientation; - glm::mat3 _state; - + glm::vec3 _sunPosition; }; diff --git a/modules/base/shaders/nighttexture_fs.glsl b/modules/base/shaders/nighttexture_fs.glsl index 2096028f8f..94175a9f7b 100644 --- a/modules/base/shaders/nighttexture_fs.glsl +++ b/modules/base/shaders/nighttexture_fs.glsl @@ -45,8 +45,6 @@ in vec4 test; #include "fragment.glsl" Fragment getFragment() { - vec4 position = vs_position; - float depth = pscDepth(position); vec4 diffuse = texture(texture1, vs_st); vec4 diffuse2 = texture(nightTex, vs_st); diff --git a/modules/base/shaders/renderableplanet_fs.glsl b/modules/base/shaders/renderableplanet_fs.glsl index 4304bb6b89..f275091d76 100644 --- a/modules/base/shaders/renderableplanet_fs.glsl +++ b/modules/base/shaders/renderableplanet_fs.glsl @@ -44,8 +44,6 @@ in vec4 vs_position; //#include "PowerScaling/powerScaling_vs.hglsl" Fragment getFragment() { - vec4 position = vs_position; - float depth = pscDepth(position); vec4 diffuse = texture(texture1, vs_st); Fragment frag; diff --git a/modules/base/shaders/renderableplanet_vs.glsl b/modules/base/shaders/renderableplanet_vs.glsl index 70873666b7..e726d0149a 100644 --- a/modules/base/shaders/renderableplanet_vs.glsl +++ b/modules/base/shaders/renderableplanet_vs.glsl @@ -48,7 +48,7 @@ void main() { vs_normal = normalize(ModelTransform * vec4(in_normal,0)); // vs_normal = vec4(in_normal, 0.0); - vec4 position = vec4(tmp.xyz * pow(10, tmp. w), 1.0); + vec4 position = vec4(tmp.xyz * pow(10, tmp.w), 1.0); position = modelViewProjectionTransform * position; vs_position = z_normalization(position); diff --git a/modules/base/shaders/rings_fs.glsl b/modules/base/shaders/rings_fs.glsl index 71ae638cf4..6de4b8503f 100644 --- a/modules/base/shaders/rings_fs.glsl +++ b/modules/base/shaders/rings_fs.glsl @@ -37,9 +37,6 @@ uniform vec3 sunPosition; uniform float _nightFactor; Fragment getFragment() { - vec4 position = vs_position; - float depth = pscDepth(position); - // Moving the origin to the center vec2 st = (vs_st - vec2(0.5)) * 2.0; @@ -85,7 +82,7 @@ Fragment getFragment() { Fragment frag; frag.color = diffuse; - frag.depth = depth; + frag.depth = vs_position.w; return frag; } diff --git a/modules/base/shaders/rings_vs.glsl b/modules/base/shaders/rings_vs.glsl index b1299f30ce..5eaddcd6ee 100644 --- a/modules/base/shaders/rings_vs.glsl +++ b/modules/base/shaders/rings_vs.glsl @@ -32,16 +32,24 @@ layout(location = 1) in vec2 in_st; out vec2 vs_st; out vec4 vs_position; -uniform mat4 ViewProjection; -uniform mat4 ModelTransform; +uniform mat4 modelViewProjectionTransform; void main() { - vec4 tmp = in_position; - vec4 position = pscTransform(tmp, ModelTransform); - - vs_position = tmp; vs_st = in_st; + + vs_position = z_normalization( + modelViewProjectionTransform * vec4(in_position.xyz * pow(10, in_position.w), 1.0) + ); + gl_Position = vs_position; + + // vec4 tmp = in_position; + + + // vec4 tmp = in_position; + // vec4 position = pscTransform(tmp, ModelTransform); + + // vs_position = tmp; - position = ViewProjection * position; - gl_Position = z_normalization(position); + // position = ViewProjection * position; + // gl_Position = z_normalization(position); } From ded3cb20ee446e6033700d86e38f4ad8b0aacbb1 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 15:48:05 +0200 Subject: [PATCH 02/18] Update Venus to make it not be located in the Sun --- data/scene/mercury/mercury.mod | 16 +++++++++------- data/scene/venus/venus.mod | 23 ++++++++++++----------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/data/scene/mercury/mercury.mod b/data/scene/mercury/mercury.mod index ba64f42565..83b2146d18 100644 --- a/data/scene/mercury/mercury.mod +++ b/data/scene/mercury/mercury.mod @@ -3,6 +3,14 @@ return { { Name = "MercuryBarycenter", Parent = "SolarSystemBarycenter", + Transform = { + Translation = { + Type = "SpiceTranslation", + Body = "MERCURY BARYCENTER", + Observer = "SUN", + Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp" + }, + } }, -- Mercury module { @@ -28,12 +36,6 @@ return { } }, Transform = { - Translation = { - Type = "SpiceTranslation", - Body = "MERCURY", - Observer = "SUN", - Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp" - }, Rotation = { Type = "SpiceRotation", SourceFrame = "IAU_MERCURY", @@ -48,7 +50,7 @@ return { -- MercuryTrail module { Name = "MercuryTrail", - Parent = "MercuryBarycenter", + Parent = "SolarSystemBarycenter", Renderable = { Type = "RenderableTrail", Body = "MERCURY", diff --git a/data/scene/venus/venus.mod b/data/scene/venus/venus.mod index 6b96b1ca1b..6ea5a5afac 100644 --- a/data/scene/venus/venus.mod +++ b/data/scene/venus/venus.mod @@ -3,8 +3,15 @@ return { { Name = "VenusBarycenter", Parent = "SolarSystemBarycenter", + Transform = { + Translation = { + Type = "SpiceTranslation", + Body = "VENUS BARYCENTER", + Observer = "SUN", + Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp" + }, + } }, - -- Venus module { Name = "Venus", @@ -28,25 +35,19 @@ return { MieColor = {1.0, 1.0, 1.0} } }, - Ephemeris = { - Type = "Spice", - Body = "VENUS", - Observer = "SUN", - Kernels = "${OPENSPACE_DATA}/spice/de430_1850-2150.bsp" - }, Rotation = { - Type = "Spice", + Type = "SpiceRotation", Frame = "IAU_VENUS", - Reference = "ECLIPJ2000" + Reference = "GALACTIC" }, }, -- VenusTrail module { Name = "VenusTrail", - Parent = "VenusBarycenter", + Parent = "SolarSystemBarycenter", Renderable = { Type = "RenderableTrail", - Body = "VENUS", + Body = "VENUS BARYCENTER", Frame = "GALACTIC", Observer = "SUN", RGB = {1, 0.5, 0.2}, From c7809cb6cf941aec22b520ec27ad69e57e6015a4 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 16:55:02 +0200 Subject: [PATCH 03/18] Some initial work to make OpenGL 3.3 work Make OpenSpace not crash if the FontRenderer shader cannot be compiled --- ext/ghoul | 2 +- modules/base/rendering/renderablesphere.cpp | 3 +-- shaders/PowerScaling/powerScalingMath.hglsl | 2 +- shaders/fragment.glsl | 4 ++-- src/engine/openspaceengine.cpp | 20 ++++++++++++-------- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/ext/ghoul b/ext/ghoul index 8fdd1127c2..e37387fbd5 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit 8fdd1127c2127d59faad893e04d5f3e481da5255 +Subproject commit e37387fbd595babfaeb0ce31eb389cb2a70bd5cb diff --git a/modules/base/rendering/renderablesphere.cpp b/modules/base/rendering/renderablesphere.cpp index 557831bd43..fb619e8255 100644 --- a/modules/base/rendering/renderablesphere.cpp +++ b/modules/base/rendering/renderablesphere.cpp @@ -22,7 +22,6 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ - #include #include @@ -122,7 +121,7 @@ bool RenderableSphere::initialize() { RenderEngine& renderEngine = OsEng.renderEngine(); _shader = renderEngine.buildRenderProgram("Sphere", "${MODULE_BASE}/shaders/sphere_vs.glsl", - "${MODULES}/base/shaders/sphere_fs.glsl"); + "${MODULE_BASE}/shaders/sphere_fs.glsl"); if (!_shader) return false; diff --git a/shaders/PowerScaling/powerScalingMath.hglsl b/shaders/PowerScaling/powerScalingMath.hglsl index 035b21a958..58ffd0d978 100644 --- a/shaders/PowerScaling/powerScalingMath.hglsl +++ b/shaders/PowerScaling/powerScalingMath.hglsl @@ -30,7 +30,7 @@ const float k = 10.0; const float FLT_MAX = 1e38; // Not max but large enough for the purpose float log10(float x) { - return log(x) / log(10); + return log(x) / log(10.0); } vec4 psc_normalization(vec4 v) { diff --git a/shaders/fragment.glsl b/shaders/fragment.glsl index c409fbd073..1d122a49b9 100644 --- a/shaders/fragment.glsl +++ b/shaders/fragment.glsl @@ -25,8 +25,8 @@ #ifndef _FRAGMENT_GLSL_ #define _FRAGMENT_GLSL_ -#define BLEND_MODE_NORMAL 0 -#define BLEND_MODE_ADDITIVE 1 +#define BLEND_MODE_NORMAL 0u +#define BLEND_MODE_ADDITIVE 1u struct Fragment { vec4 color; diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 4fda144e81..eeadd04d1f 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -739,14 +739,18 @@ void OpenSpaceEngine::loadFonts() { LERROR("Error registering font '" << font << "' with key '" << key << "'"); } - bool initSuccess = ghoul::fontrendering::FontRenderer::initialize(); - if (!initSuccess) - LERROR("Error initializing default font renderer"); - - ghoul::fontrendering::FontRenderer::defaultRenderer().setFramebufferSize( - _renderEngine->fontResolution() - ); - + try { + bool initSuccess = ghoul::fontrendering::FontRenderer::initialize(); + if (!initSuccess) + LERROR("Error initializing default font renderer"); + + ghoul::fontrendering::FontRenderer::defaultRenderer().setFramebufferSize( + _renderEngine->fontResolution() + ); + } + catch (const ghoul::RuntimeError& err) { + LERRORC(err.component, err.message); + } } void OpenSpaceEngine::configureLogging() { From 64cb9bce0d890d164a0a28dfc577ffcd3bc1addd Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 17:45:18 +0200 Subject: [PATCH 04/18] RenderableRings's VBO only needs to contain two values for size --- modules/base/rendering/renderablerings.cpp | 18 +++++++++--------- modules/base/shaders/rings_vs.glsl | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/base/rendering/renderablerings.cpp b/modules/base/rendering/renderablerings.cpp index 0ee5676514..324de1ac31 100644 --- a/modules/base/rendering/renderablerings.cpp +++ b/modules/base/rendering/renderablerings.cpp @@ -263,22 +263,22 @@ void RenderableRings::loadTexture() { void RenderableRings::createPlane() { const GLfloat size = _size.value(); 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, + // x y s t + -size, -size, 0.f, 0.f, + size, size, 1.f, 1.f, + -size, size, 0.f, 1.f, + -size, -size, 0.f, 0.f, + size, -size, 1.f, 0.f, + size, size, 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)); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, reinterpret_cast(0)); glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 6, reinterpret_cast(sizeof(GLfloat) * 4)); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, reinterpret_cast(sizeof(GLfloat) * 2)); } } // namespace openspace diff --git a/modules/base/shaders/rings_vs.glsl b/modules/base/shaders/rings_vs.glsl index 5eaddcd6ee..86ecefef8e 100644 --- a/modules/base/shaders/rings_vs.glsl +++ b/modules/base/shaders/rings_vs.glsl @@ -26,7 +26,7 @@ #include "PowerScaling/powerScaling_vs.hglsl" -layout(location = 0) in vec4 in_position; +layout(location = 0) in vec2 in_position; layout(location = 1) in vec2 in_st; out vec2 vs_st; @@ -38,7 +38,7 @@ void main() { vs_st = in_st; vs_position = z_normalization( - modelViewProjectionTransform * vec4(in_position.xyz * pow(10, in_position.w), 1.0) + modelViewProjectionTransform * vec4(in_position.xy, 0.0, 1.0) ); gl_Position = vs_position; From 2ca0bfd798989e51f945b8b5e1c8c3fba95097bb Mon Sep 17 00:00:00 2001 From: Jonathas Costa Date: Sat, 29 Oct 2016 13:43:13 -0400 Subject: [PATCH 05/18] Removed Atmosphere stuff from RenderablePlanet. --- modules/base/rendering/renderableplanet.cpp | 1506 +------------------ modules/base/rendering/renderableplanet.h | 113 +- 2 files changed, 12 insertions(+), 1607 deletions(-) diff --git a/modules/base/rendering/renderableplanet.cpp b/modules/base/rendering/renderableplanet.cpp index 4df4d419d2..bedd4ca84b 100644 --- a/modules/base/rendering/renderableplanet.cpp +++ b/modules/base/rendering/renderableplanet.cpp @@ -57,15 +57,7 @@ namespace { const std::string keyShadowGroup = "Shadow_Group"; const std::string keyShadowSource = "Source"; const std::string keyShadowCaster = "Caster"; - const std::string keyAtmosphere = "Atmosphere"; - const std::string keyAtmosphereRadius = "AtmoshereRadius"; const std::string keyPlanetRadius = "PlanetRadius"; - const std::string keyAverageGroundReflectance = "PlanetAverageGroundReflectance"; - const std::string keyRayleigh = "Rayleigh"; - const std::string keyRayleighHeightScale = "H_R"; - const std::string keyMie = "Mie"; - const std::string keyMieHeightScale = "H_M"; - const std::string keyMiePhaseConstant = "G"; const std::string keyBody = "Body"; } @@ -76,58 +68,17 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) , _colorTexturePath("colorTexture", "Color Texture") , _nightTexturePath("nightTexture", "Night Texture") , _heightMapTexturePath("heightMap", "Heightmap Texture") - , _cloudsTexturePath("clouds", "Clouds Texture") - , _reflectanceTexturePath("reflectance", "Reflectance Texture") , _heightExaggeration("heightExaggeration", "Height Exaggeration", 1.f, 0.f, 10.f) , _programObject(nullptr) - , _transmittanceProgramObject(nullptr) - , _irradianceProgramObject(nullptr) - , _irradianceSupTermsProgramObject(nullptr) - , _inScatteringProgramObject(nullptr) - , _inScatteringSupTermsProgramObject(nullptr) - , _deltaEProgramObject(nullptr) - , _deltaSProgramObject(nullptr) - , _deltaSSupTermsProgramObject(nullptr) - , _deltaJProgramObject(nullptr) - , _atmosphereProgramObject(nullptr) , _texture(nullptr) , _nightTexture(nullptr) - , _reflectanceTexture(nullptr) - , _heightMapTexture(nullptr) - , _cloudsTexture(nullptr) , _geometry(nullptr) , _performShading("performShading", "Perform Shading", true) , _rotation("rotation", "Rotation", 0, 0, 360) , _alpha(1.f) , _planetRadius(0.f) - , _transmittanceTableTexture(0) - , _irradianceTableTexture(0) - , _inScatteringTableTexture(0) - , _deltaETableTexture(0) - , _deltaSRayleighTableTexture(0) - , _deltaSMieTableTexture(0) - , _deltaJTableTexture(0) - , _dummyTexture(0) - , _dummy3DTexture(0) - , _atmosphereTexture(0) - , _atmosphereFBO(0) - , _atmosphereRenderVAO(0) - , _atmosphereRenderVBO(0) - , _atmosphereCalculated(false) - , _atmosphereEnabled(false) - , _atmosphereRadius(0.f) - , _atmospherePlanetRadius(0.f) - , _planetAverageGroundReflectance(0.f) - , _rayleighHeightScale(0.f) - , _mieHeightScale(0.f) - , _miePhaseConstant(0.f) - , _mieExtinctionCoeff(glm::vec3(0.f)) - , _rayleighScatteringCoeff(glm::vec3(0.f)) - , _mieScatteringCoeff(glm::vec3(0.f)) , _hasNightTexture(false) , _hasHeightTexture(false) - , _hasReflectanceTexture(false) - , _hasCloudsTexture(false) , _shadowEnabled(false) { std::string name; @@ -135,16 +86,10 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) ghoul_assert(success, "RenderablePlanet need the '" << SceneGraphNode::KeyName<<"' be specified"); - //std::string path; - //success = dictionary.getValue(constants::scenegraph::keyPathModule, path); - //ghoul_assert(success, - // "RenderablePlanet need the '"<(keyShading)) { @@ -224,7 +148,6 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) // Mainly for debugging purposes @AA addProperty(_rotation); - // Shadow data: ghoul::Dictionary shadowDictionary; success = dictionary.getValue(keyShadowGroup, shadowDictionary); @@ -299,107 +222,6 @@ RenderablePlanet::RenderablePlanet(const ghoul::Dictionary& dictionary) } } } - - // Atmosphere data: - bool errorReadingAtmosphereData = false; - ghoul::Dictionary atmosphereDictionary; - success = dictionary.getValue(keyAtmosphere, atmosphereDictionary); - if (success) { - if (!atmosphereDictionary.getValue(keyAtmosphereRadius, _atmosphereRadius)) { - errorReadingAtmosphereData = true; - LWARNING("No Atmosphere Radius value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!atmosphereDictionary.getValue(keyPlanetRadius, _atmospherePlanetRadius)) { - errorReadingAtmosphereData = true; - LWARNING("No Planet Radius value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!atmosphereDictionary.getValue(keyAverageGroundReflectance, _planetAverageGroundReflectance)) { - errorReadingAtmosphereData = true; - LWARNING("No Average Atmosphere Ground Reflectance value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - ghoul::Dictionary rayleighDictionary; - success = atmosphereDictionary.getValue(keyRayleigh, rayleighDictionary); - - if (success) { - // Not using right now. - glm::vec3 rayleighWavelengths; - success = rayleighDictionary.getValue("Coefficients.Wavelengths", rayleighWavelengths); - - if (!rayleighDictionary.getValue("Coefficients.Scattering", _rayleighScatteringCoeff)) { - errorReadingAtmosphereData = true; - LWARNING("No Rayleigh Scattering parameters expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!rayleighDictionary.getValue(keyRayleighHeightScale, _rayleighHeightScale)) { - errorReadingAtmosphereData = true; - LWARNING("No Rayleigh Height Scale value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - } - else { - errorReadingAtmosphereData = true; - LWARNING("No Rayleigh parameters expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - ghoul::Dictionary mieDictionary; - success = atmosphereDictionary.getValue(keyMie, mieDictionary); - if (success) { - if (!mieDictionary.getValue(keyMieHeightScale, _mieHeightScale)) { - errorReadingAtmosphereData = true; - LWARNING("No Mie Height Scale value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!mieDictionary.getValue("Coefficients.Scattering", _mieScatteringCoeff)) { - errorReadingAtmosphereData = true; - LWARNING("No Mie Scattering parameters expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!mieDictionary.getValue("Coefficients.Extinction", _mieExtinctionCoeff)) { - errorReadingAtmosphereData = true; - LWARNING("No Mie Extinction parameters expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!mieDictionary.getValue(keyMiePhaseConstant, _miePhaseConstant)) { - errorReadingAtmosphereData = true; - LWARNING("No Mie Phase Constant value expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - } - else { - errorReadingAtmosphereData = true; - LWARNING("No Mie parameters expecified for Atmosphere Effects of " - << name << " planet.\nDisabling atmosphere effects for this planet."); - } - - if (!errorReadingAtmosphereData) { - _atmosphereEnabled = true; - - //// DEBUG: - //std::stringstream ss; - //ss << "\n\nAtmosphere Values:\n" - // << "Radius: " << _atmosphereRadius << std::endl - // << "Planet Radius: " << _atmospherePlanetRadius << std::endl - // << "Average Reflection: " << _planetAverageGroundReflectance << std::endl - // << "Rayleigh HR: " << _rayleighHeightScale << std::endl - // << "Mie HR: " << _mieHeightScale << std::endl - // << "Mie G phase constant: " << _miePhaseConstant << std::endl - // << "Mie Extinction coeff: " << _mieExtinctionCoeff << std::endl - // << "Rayleigh Scattering coeff: " << _rayleighScatteringCoeff << std::endl - // << "Mie Scattering coeff: " << _mieScatteringCoeff << std::endl; - //std::cout << ss.str() << std::endl; - } - } } RenderablePlanet::~RenderablePlanet() { @@ -416,15 +238,7 @@ bool RenderablePlanet::initialize() { LERROR(ss.str()); } - if (_programObject == nullptr && _atmosphereEnabled && _shadowEnabled && _hasNightTexture) { - // shadow program - _programObject = renderEngine.buildRenderProgram( - "atmosphereAndShadowProgram", - "${MODULE_BASE}/shaders/atmosphere_vs.glsl", - "${MODULE_BASE}/shaders/atmosphere_fs.glsl"); - if (!_programObject) - return false; - } else if (_programObject == nullptr && _shadowEnabled && _hasNightTexture) { + if (_programObject == nullptr && _shadowEnabled && _hasNightTexture) { // shadow program _programObject = renderEngine.buildRenderProgram( "shadowNightProgram", @@ -464,13 +278,6 @@ bool RenderablePlanet::initialize() { _programObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); _programObject->setIgnoreUniformLocationError(IgnoreError::Yes); - /*_atmosphereProgramObject = renderEngine.buildRenderProgram( - "atmosphereDeferredProgram", - "${MODULE_BASE}/shaders/atmosphere_deferred_vs.glsl", - "${MODULE_BASE}/shaders/atmosphere_deferred_fs.glsl"); - if (!_atmosphereProgramObject) - return false;*/ - while ((err = glGetError()) != GL_NO_ERROR) { const GLubyte * errString = gluErrorString(err); std::stringstream ss; @@ -493,24 +300,9 @@ bool RenderablePlanet::initialize() { while ((err = glGetError()) != GL_NO_ERROR) { const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Shader Programs Creation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); + LERROR("Shader Programs Creation. OpenGL error: " << errString); } - //Atmosphere precomputation and tables - if (_atmosphereEnabled && !_atmosphereCalculated) { - _atmosphereCalculated = true; - - preCalculateAtmosphereParam(); - - //createAtmosphereFBO(); - - createRenderQuad(&_atmosphereRenderVAO, &_atmosphereRenderVBO, 6); - } - - count = 0; - return isReady(); } @@ -526,67 +318,9 @@ bool RenderablePlanet::deinitialize() { _programObject = nullptr; } - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - if (_deltaEProgramObject) { - renderEngine.removeRenderProgram(_deltaEProgramObject); - _deltaEProgramObject = nullptr; - } - - if (_deltaSProgramObject) { - renderEngine.removeRenderProgram(_deltaSProgramObject); - _deltaSProgramObject = nullptr; - } - - if (_deltaSSupTermsProgramObject) { - renderEngine.removeRenderProgram(_deltaSSupTermsProgramObject); - _deltaSSupTermsProgramObject = nullptr; - } - - if (_deltaJProgramObject) { - renderEngine.removeRenderProgram(_deltaJProgramObject); - _deltaJProgramObject = nullptr; - } - _geometry = nullptr; _texture = nullptr; _nightTexture = nullptr; - _reflectanceTexture = nullptr; - _cloudsTexture = nullptr; - - glDeleteTextures(1, &_transmittanceTableTexture); - glDeleteTextures(1, &_irradianceTableTexture); - glDeleteTextures(1, &_inScatteringTableTexture); - glDeleteTextures(1, &_deltaETableTexture); - glDeleteTextures(1, &_deltaSRayleighTableTexture); - glDeleteTextures(1, &_deltaSMieTableTexture); - glDeleteTextures(1, &_deltaJTableTexture); - glDeleteTextures(1, &_atmosphereTexture); - - glDeleteFramebuffers(1, &_atmosphereFBO); return true; } @@ -624,7 +358,6 @@ void RenderablePlanet::render(const RenderData& data) { "modelViewProjectionTransform", data.camera.projectionMatrix() * glm::mat4(modelViewTransform) ); - //_programObject->setUniform("ViewProjection", data.camera.viewProjectionMatrix()); _programObject->setUniform("ModelTransform", glm::mat4(modelTransform)); // Normal Transformation @@ -633,13 +366,9 @@ void RenderablePlanet::render(const RenderData& data) { float scaleFactor = data.camera.scaling().x * powf(10.0, data.camera.scaling().y); glm::mat4 scaleCamTrans = glm::scale(glm::mat4(1.0), glm::vec3(scaleFactor)); - glm::mat4 ModelViewTrans = data.camera.viewMatrix() * scaleCamTrans * translateCamTrans * translateObjTrans * glm::mat4(modelTransform); - if (_atmosphereEnabled) - _programObject->setUniform("NormalTransform", - glm::transpose(glm::inverse(ModelViewTrans))); - + setPscUniforms(*_programObject.get(), data.camera, data.position); _programObject->setUniform("_performShading", _performShading); @@ -750,91 +479,6 @@ void RenderablePlanet::render(const RenderData& data) { } } - // Atmosphere Data - if (_atmosphereEnabled) { - -// GLenum err; -// while ((err = glGetError()) != GL_NO_ERROR) { -// const GLubyte * errorString = gluErrorString(err); -// std::stringstream ss; -// ss << "Error setting up atmosphere framebuffer. OpenGL error: " -// << err << " - " << errorString << std::endl; -// LERROR(ss.str()); -// } - - // Object Space (in Km) - glm::mat4 obj2World = glm::translate(glm::mat4(1.0), data.position.vec3() / 1000.0f); - /*glm::mat4 M = data.camera.viewMatrix() * scaleCamTrans * glm::mat4(data.camera.viewRotationMatrix()) * - translateCamTrans * obj2World * transform; - */ - glm::mat4 M = glm::mat4(data.camera.combinedViewMatrix()) * scaleCamTrans * obj2World * glm::mat4(modelTransform); - - glm::mat4 completeInverse = glm::inverse(M); - - _programObject->setUniform("completeInverse", completeInverse); - _programObject->setUniform("projInverse", glm::inverse(data.camera.projectionMatrix())); - - // This is camera position and planet position vector in object coordinates, in Km. - glm::mat4 world2Obj = glm::inverse(obj2World * glm::mat4(modelTransform)); - glm::vec4 cameraPosObj = world2Obj * glm::vec4(data.camera.position().vec3() / 1000.0f, 1.0); - glm::vec4 planetPositionObj = world2Obj * glm::vec4(data.position.vec3() / 1000.0f, 1.0); - _programObject->setUniform("cameraPosObj", cameraPosObj); - _programObject->setUniform("planetPositionObj", planetPositionObj); - - // I know it is (0,0,0). It is here just for sake of sanity. :-p - glm::dvec3 sunPosWorld = - SpiceManager::ref().targetPosition("SUN", "SUN", "GALACTIC", {}, _time, lt); - glm::vec4 sunPosObj = world2Obj * glm::vec4(sunPosWorld.x, sunPosWorld.y, sunPosWorld.z, 1.0); - _programObject->setUniform("sunPositionObj", glm::vec3(sunPosObj)); - - _transmittanceTableTextureUnit.activate(); - _programObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - - _irradianceTableTextureUnit.activate(); - _programObject->setUniform("irradianceTexture", _irradianceTableTextureUnit); - - _inScatteringTableTextureUnit.activate(); - _programObject->setUniform("inscatterTexture", _inScatteringTableTextureUnit); - - GLint m_viewport[4]; - glGetIntegerv(GL_VIEWPORT, m_viewport); - _programObject->setUniform("screenX", (float)m_viewport[0]); - _programObject->setUniform("screenY", (float)m_viewport[1]); - _programObject->setUniform("screenWIDTH", (float)m_viewport[2]); - _programObject->setUniform("screenHEIGHT", (float)m_viewport[3]); - - - _programObject->setUniform("Rg", _atmospherePlanetRadius); - _programObject->setUniform("Rt", _atmosphereRadius); - _programObject->setUniform("AVERAGE_GROUND_REFLECTANCE", _planetAverageGroundReflectance); - _programObject->setUniform("HR", _rayleighHeightScale); - _programObject->setUniform("betaR", _rayleighScatteringCoeff); - _programObject->setUniform("HM", _mieHeightScale); - _programObject->setUniform("betaMSca", _mieScatteringCoeff); - _programObject->setUniform("betaMEx", _mieExtinctionCoeff); - _programObject->setUniform("mieG", _miePhaseConstant); - - - ghoul::opengl::TextureUnit reflectanceUnit; - if (_hasReflectanceTexture) { - reflectanceUnit.activate(); - _reflectanceTexture->bind(); - _programObject->setUniform("reflectanceTexture", reflectanceUnit); - } - - ghoul::opengl::TextureUnit cloudsUnit; - if (_hasCloudsTexture) { - cloudsUnit.activate(); - _cloudsTexture->bind(); - _programObject->setUniform("cloudsTexture", cloudsUnit); - } - - // HDR - _programObject->setUniform("exposure", 0.4f); - - } - - // render _geometry->render(); @@ -872,9 +516,7 @@ void RenderablePlanet::loadTexture() { GLenum err; while ((err = glGetError()) != GL_NO_ERROR) { const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error after reading memory 1. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); + LERROR("Error after reading color texture. OpenGL error: " << errString); } if (_hasNightTexture) { @@ -892,31 +534,9 @@ void RenderablePlanet::loadTexture() { while ((err = glGetError()) != GL_NO_ERROR) { const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error after reading memory 2. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); + LERROR("Error after reading night texture. OpenGL error: " << errString); } - - if (_hasReflectanceTexture) { - _reflectanceTexture = nullptr; - if (_reflectanceTexturePath.value() != "") { - _reflectanceTexture = std::move(ghoul::io::TextureReader::ref().loadTexture(absPath(_reflectanceTexturePath))); - if (_reflectanceTexture) { - LDEBUG("Loaded texture from '" << _reflectanceTexturePath << "'"); - _reflectanceTexture->uploadTexture(); - _reflectanceTexture->setFilter(ghoul::opengl::Texture::FilterMode::Linear); - //_reflectanceTexture->setFilter(ghoul::opengl::Texture::FilterMode::AnisotropicMipMap); - } - } - } - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error after reading memory 3. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - + if (_hasHeightTexture) { _heightMapTexture = nullptr; if (_heightMapTexturePath.value() != "") { @@ -930,1119 +550,9 @@ void RenderablePlanet::loadTexture() { } } -// while ((err = glGetError()) != GL_NO_ERROR) { -// const GLubyte * errString = gluErrorString(err); -// std::stringstream ss; -// ss << "Error after reading memory 4. OpenGL error: " << errString << std::endl; -// LERROR(ss.str()); -// } - - if (_hasCloudsTexture) { - _cloudsTexture = nullptr; - if (_cloudsTexturePath.value() != "") { - _cloudsTexture = std::move(ghoul::io::TextureReader::ref().loadTexture(absPath(_cloudsTexturePath))); - if (_cloudsTexture) { - LDEBUG("Loaded texture from '" << _cloudsTexturePath << "'"); - _cloudsTexture->uploadTexture(); - _cloudsTexture->setFilter(ghoul::opengl::Texture::FilterMode::Linear); - //_cloudsTexture->setFilter(ghoul::opengl::Texture::FilterMode::AnisotropicMipMap); - } - } - } - -// while ((err = glGetError()) != GL_NO_ERROR) { -// const GLubyte * errString = gluErrorString(err); -// std::stringstream ss; -// ss << "Error after reading memory 5. OpenGL error: " << errString << std::endl; -// LERROR(ss.str()); -// } -} - -void RenderablePlanet::loadComputationPrograms() { - - RenderEngine& renderEngine = OsEng.renderEngine(); - - //============== Transmittance ================= - if (_transmittanceProgramObject == nullptr) { - _transmittanceProgramObject = renderEngine.buildRenderProgram( - "transmittanceCalcProgram", - "${MODULE_BASE}/shaders/transmittance_calc_vs.glsl", - "${MODULE_BASE}/shaders/transmittance_calc_fs.glsl"); - if (!_transmittanceProgramObject) { - return; - } - } - using IgnoreError = ghoul::opengl::ProgramObject::IgnoreError; - _transmittanceProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _transmittanceProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - //============== Irradiance ================= - if (_irradianceProgramObject == nullptr) { - _irradianceProgramObject = renderEngine.buildRenderProgram( - "irradianceCalcProgram", - "${MODULE_BASE}/shaders/irradiance_calc_vs.glsl", - "${MODULE_BASE}/shaders/irradiance_calc_fs.glsl"); - if (!_irradianceProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - return; - } - } - _irradianceProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _irradianceProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - if (_irradianceSupTermsProgramObject == nullptr) { - _irradianceSupTermsProgramObject = renderEngine.buildRenderProgram( - "irradianceSupTermsCalcProgram", - "${MODULE_BASE}/shaders/irradiance_sup_calc_vs.glsl", - "${MODULE_BASE}/shaders/irradiance_sup_calc_fs.glsl"); - if (!_irradianceSupTermsProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - return; - } - } - _irradianceSupTermsProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _irradianceSupTermsProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - //============== InScattering ================= - if (_inScatteringProgramObject == nullptr) { - _inScatteringProgramObject = renderEngine.buildRenderProgram( - "inScatteringCalcProgram", - "${MODULE_BASE}/shaders/inScattering_calc_vs.glsl", - "${MODULE_BASE}/shaders/inScattering_calc_fs.glsl", - "${MODULE_BASE}/shaders/inScattering_calc_gs.glsl"); - if (!_inScatteringProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - return; - } - } - _inScatteringProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _inScatteringProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - if (_inScatteringSupTermsProgramObject == nullptr) { - _inScatteringSupTermsProgramObject = renderEngine.buildRenderProgram( - "inScatteringSupTermsCalcProgram", - "${MODULE_BASE}/shaders/inScattering_sup_calc_vs.glsl", - "${MODULE_BASE}/shaders/inScattering_sup_calc_fs.glsl", - "${MODULE_BASE}/shaders/inScattering_sup_calc_gs.glsl"); - if (!_inScatteringSupTermsProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - return; - } - } - _inScatteringSupTermsProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _inScatteringSupTermsProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - //============== Delta E ================= - if (_deltaEProgramObject == nullptr) { - _deltaEProgramObject = renderEngine.buildRenderProgram( - "deltaECalcProgram", - "${MODULE_BASE}/shaders/deltaE_calc_vs.glsl", - "${MODULE_BASE}/shaders/deltaE_calc_fs.glsl"); - if (!_deltaEProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - return; - } - } - _deltaEProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _deltaEProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - //============== Delta S ================= - if (_deltaSProgramObject == nullptr) { - _deltaSProgramObject = renderEngine.buildRenderProgram( - "deltaSCalcProgram", - "${MODULE_BASE}/shaders/deltaS_calc_vs.glsl", - "${MODULE_BASE}/shaders/deltaS_calc_fs.glsl", - "${MODULE_BASE}/shaders/deltaS_calc_gs.glsl"); - if (!_deltaSProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - if (_deltaEProgramObject) { - renderEngine.removeRenderProgram(_deltaEProgramObject); - _deltaEProgramObject = nullptr; - } - - return; - } - } - _deltaSProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _deltaSProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - if (_deltaSSupTermsProgramObject == nullptr) { - _deltaSSupTermsProgramObject = renderEngine.buildRenderProgram( - "deltaSSUPTermsCalcProgram", - "${MODULE_BASE}/shaders/deltaS_sup_calc_vs.glsl", - "${MODULE_BASE}/shaders/deltaS_sup_calc_fs.glsl", - "${MODULE_BASE}/shaders/deltaS_sup_calc_gs.glsl"); - if (!_deltaSSupTermsProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - if (_deltaEProgramObject) { - renderEngine.removeRenderProgram(_deltaEProgramObject); - _deltaEProgramObject = nullptr; - } - - if (_deltaSProgramObject) { - renderEngine.removeRenderProgram(_deltaSProgramObject); - _deltaSProgramObject = nullptr; - } - - return; - } - } - _deltaSSupTermsProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _deltaSSupTermsProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); - - //============== Delta J (Radiance Scattered) ================= - if (_deltaJProgramObject == nullptr) { - // shadow program - _deltaJProgramObject = renderEngine.buildRenderProgram( - "deltaJCalcProgram", - "${MODULE_BASE}/shaders/deltaJ_calc_vs.glsl", - "${MODULE_BASE}/shaders/deltaJ_calc_fs.glsl", - "${MODULE_BASE}/shaders/deltaJ_calc_gs.glsl"); - if (!_deltaJProgramObject) { - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - if (_deltaEProgramObject) { - renderEngine.removeRenderProgram(_deltaEProgramObject); - _deltaEProgramObject = nullptr; - } - - if (_deltaSProgramObject) { - renderEngine.removeRenderProgram(_deltaSProgramObject); - _deltaSProgramObject = nullptr; - } - - if (_deltaSSupTermsProgramObject) { - renderEngine.removeRenderProgram(_deltaSSupTermsProgramObject); - _deltaSSupTermsProgramObject = nullptr; - } - - return; - } - - } - _deltaJProgramObject->setIgnoreSubroutineUniformLocationError(IgnoreError::Yes); - _deltaJProgramObject->setIgnoreUniformLocationError(IgnoreError::Yes); -} - -void RenderablePlanet::unloadComputationPrograms() { - - RenderEngine& renderEngine = OsEng.renderEngine(); - - if (_transmittanceProgramObject) { - renderEngine.removeRenderProgram(_transmittanceProgramObject); - _transmittanceProgramObject = nullptr; - } - - if (_irradianceProgramObject) { - renderEngine.removeRenderProgram(_irradianceProgramObject); - _irradianceProgramObject = nullptr; - } - - if (_irradianceSupTermsProgramObject) { - renderEngine.removeRenderProgram(_irradianceSupTermsProgramObject); - _irradianceSupTermsProgramObject = nullptr; - } - - if (_inScatteringProgramObject) { - renderEngine.removeRenderProgram(_inScatteringProgramObject); - _inScatteringProgramObject = nullptr; - } - - if (_inScatteringSupTermsProgramObject) { - renderEngine.removeRenderProgram(_inScatteringSupTermsProgramObject); - _inScatteringSupTermsProgramObject = nullptr; - } - - if (_deltaEProgramObject) { - renderEngine.removeRenderProgram(_deltaEProgramObject); - _deltaEProgramObject = nullptr; - } - - if (_deltaSProgramObject) { - renderEngine.removeRenderProgram(_deltaSProgramObject); - _deltaSProgramObject = nullptr; - } - - if (_deltaSSupTermsProgramObject) { - renderEngine.removeRenderProgram(_deltaSSupTermsProgramObject); - _deltaSSupTermsProgramObject = nullptr; - } - - if (_deltaJProgramObject) { - renderEngine.removeRenderProgram(_deltaJProgramObject); - _deltaJProgramObject = nullptr; - } -} - -void RenderablePlanet::createComputationTextures() { - // TODO: Change precision of textures: GL_RGB16F to GL_RGB32F - //========== Create Tables (textures) ============== - - GLenum err; while ((err = glGetError()) != GL_NO_ERROR) { const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error before creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - _dummyTextureUnit.activate(); - glGenTextures(1, &_dummyTexture); - glBindTexture(GL_TEXTURE_2D, _dummyTexture); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, TRANSMITTANCE_TABLE_WIDTH, - TRANSMITTANCE_TABLE_HEIGHT, 0, GL_RGB, GL_FLOAT, nullptr); - - //GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 1 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - ghoul::opengl::TextureUnit _dummy3DTextureUnit; - _dummy3DTextureUnit.activate(); - glGenTextures(1, &_dummy3DTexture); - glBindTexture(GL_TEXTURE_3D, _dummy3DTexture); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F, MU_S_SAMPLES * NU_SAMPLES, - MU_SAMPLES, R_SAMPLES, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 2 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== Transmittance ================= - _transmittanceTableTextureUnit.activate(); - glGenTextures(1, &_transmittanceTableTexture); - glBindTexture(GL_TEXTURE_2D, _transmittanceTableTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, TRANSMITTANCE_TABLE_WIDTH, - TRANSMITTANCE_TABLE_HEIGHT, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 3 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== Irradiance ================= - _irradianceTableTextureUnit.activate(); - glGenTextures(1, &_irradianceTableTexture); - glBindTexture(GL_TEXTURE_2D, _irradianceTableTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, IRRADIANCE_TABLE_WIDTH, - IRRADIANCE_TABLE_HEIGHT, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 4 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== InScattering ================= - _inScatteringTableTextureUnit.activate(); - glGenTextures(1, &_inScatteringTableTexture); - glBindTexture(GL_TEXTURE_3D, _inScatteringTableTexture); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA16F_ARB, MU_S_SAMPLES * NU_SAMPLES, - MU_SAMPLES, R_SAMPLES, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 5 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== Delta E ================= - _deltaETableTextureUnit.activate(); - glGenTextures(1, &_deltaETableTexture); - glBindTexture(GL_TEXTURE_2D, _deltaETableTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, DELTA_E_TABLE_WIDTH, - DELTA_E_TABLE_HEIGHT, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 6 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== Delta S ================= - _deltaSRayleighTableTextureUnit.activate(); - glGenTextures(1, &_deltaSRayleighTableTexture); - glBindTexture(GL_TEXTURE_3D, _deltaSRayleighTableTexture); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F, MU_S_SAMPLES * NU_SAMPLES, - MU_SAMPLES, R_SAMPLES, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 7 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - _deltaSMieTableTextureUnit.activate(); - glGenTextures(1, &_deltaSMieTableTexture); - glBindTexture(GL_TEXTURE_3D, _deltaSMieTableTexture); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F, MU_S_SAMPLES * NU_SAMPLES, - MU_SAMPLES, R_SAMPLES, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 8 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //============== Delta J (Radiance Scattered) ================= - _deltaJTableTextureUnit.activate(); - glGenTextures(1, &_deltaJTableTexture); - glBindTexture(GL_TEXTURE_3D, _deltaJTableTexture); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F, MU_S_SAMPLES * NU_SAMPLES, - MU_SAMPLES, R_SAMPLES, 0, GL_RGB, GL_FLOAT, nullptr); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error 9 creating OpenGL textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } -} - -void RenderablePlanet::deleteComputationTextures() { - // Cleaning up - glDeleteTextures(1, &_dummyTexture); - glDeleteTextures(1, &_dummy3DTexture); - glDeleteTextures(1, &_transmittanceTableTexture); - glDeleteTextures(1, &_irradianceTableTexture); - glDeleteTextures(1, &_inScatteringTableTexture); - glDeleteTextures(1, &_deltaETableTexture); - glDeleteTextures(1, &_deltaSRayleighTableTexture); - glDeleteTextures(1, &_deltaSMieTableTexture); - glDeleteTextures(1, &_deltaJTableTexture); -} - -void RenderablePlanet::deleteUnusedComputationTextures() { - glDeleteTextures(1, &_dummyTexture); - glDeleteTextures(1, &_dummy3DTexture); - glDeleteTextures(1, &_deltaETableTexture); - glDeleteTextures(1, &_deltaSRayleighTableTexture); - glDeleteTextures(1, &_deltaSMieTableTexture); - glDeleteTextures(1, &_deltaJTableTexture); -} - -void RenderablePlanet::loadAtmosphereDataIntoShaderProgram(std::unique_ptr & shaderProg) { - shaderProg->setUniform("Rg", _atmospherePlanetRadius); - shaderProg->setUniform("Rt", _atmosphereRadius); - shaderProg->setUniform("AVERAGE_GROUND_REFLECTANCE", _planetAverageGroundReflectance); - shaderProg->setUniform("HR", _rayleighHeightScale); - shaderProg->setUniform("betaR", _rayleighScatteringCoeff); - shaderProg->setUniform("HM", _mieHeightScale); - shaderProg->setUniform("betaMSca", _mieScatteringCoeff); - shaderProg->setUniform("betaMEx", _mieExtinctionCoeff); - shaderProg->setUniform("mieG", _miePhaseConstant); -} - - -void RenderablePlanet::executeCalculations(const GLuint vao, const GLenum drawBuffers[2], const GLsizei vertexSize) { - // =========================================================== - // See Precomputed Atmosphere Scattering from Bruneton et al. paper, algorithm 4.1: - // =========================================================== - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _transmittanceTableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, TRANSMITTANCE_TABLE_WIDTH, TRANSMITTANCE_TABLE_HEIGHT); - _transmittanceProgramObject->activate(); - loadAtmosphereDataIntoShaderProgram(_transmittanceProgramObject); - renderQuadForCalc(vao, vertexSize); - /*saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, std::string("transmittance_texture.ppm"), - TRANSMITTANCE_TABLE_WIDTH, TRANSMITTANCE_TABLE_HEIGHT);*/ - - GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 1. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 2 in algorithm 4.1 - glBindTexture(GL_TEXTURE_2D, _dummyTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT, 0, - GL_RGB, GL_FLOAT, nullptr); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _deltaETableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT); - _irradianceProgramObject->activate(); - _irradianceProgramObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_irradianceProgramObject); - renderQuadForCalc(vao, vertexSize); - /*saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, std::string("deltaE_table_texture.ppm"), - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 2. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 3 in algorithm 4.1 - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummy3DTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _deltaSRayleighTableTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, _deltaSMieTableTexture, 0); - GLenum colorBuffers[3] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 }; - glDrawBuffers(3, colorBuffers); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - _inScatteringProgramObject->activate(); - _inScatteringProgramObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_inScatteringProgramObject); - for (int layer = 0; layer < R_SAMPLES; ++layer) { - step3DTexture(_inScatteringProgramObject, layer); - renderQuadForCalc(vao, vertexSize); - } - /*saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, std::string("deltaS_rayleigh_texture.ppm"), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - saveTextureToPPMFile(GL_COLOR_ATTACHMENT2, std::string("deltaS_mie_texture.ppm"), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES);*/ - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, 0, 0); - glDrawBuffers(2, drawBuffers); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 3. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 4 in algorithm 4.1 - glBindTexture(GL_TEXTURE_2D, _dummyTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT, 0, - GL_RGB, GL_FLOAT, nullptr); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _irradianceTableTexture, 0); - glDrawBuffers(2, drawBuffers); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT); - _deltaEProgramObject->activate(); - _deltaEProgramObject->setUniform("line", 4); - _deltaEProgramObject->setUniform("deltaETexture", _deltaETableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_deltaEProgramObject); - renderQuadForCalc(vao, vertexSize); - /*saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, std::string("irradiance_texture.ppm"), - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 4. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 5 in algorithm 4.1 - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummy3DTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _inScatteringTableTexture, 0); - glViewport(0, 0, MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - _deltaSProgramObject->activate(); - _deltaSProgramObject->setUniform("deltaSRTexture", _deltaSRayleighTableTextureUnit); - _deltaSProgramObject->setUniform("deltaSMTexture", _deltaSMieTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_deltaSProgramObject); - for (int layer = 0; layer < R_SAMPLES; ++layer) { - step3DTexture(_deltaSProgramObject, layer, false); - renderQuadForCalc(vao, vertexSize); - } - /*saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, std::string("S_texture.ppm"), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 5. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // loop in line 6 in algorithm 4.1 - for (int scatteringOrder = 2; scatteringOrder <= 4; ++scatteringOrder) { - - // line 7 in algorithm 4.1 - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummy3DTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _deltaJTableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - _deltaJProgramObject->activate(); - if (scatteringOrder == 2) - _deltaJProgramObject->setUniform("first", 1.0f); - else - _deltaJProgramObject->setUniform("first", 0.0f); - _deltaJProgramObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - _deltaJProgramObject->setUniform("deltaETexture", _deltaETableTextureUnit); - _deltaJProgramObject->setUniform("deltaSRTexture", _deltaSRayleighTableTextureUnit); - _deltaJProgramObject->setUniform("deltaSMTexture", _deltaSMieTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_deltaJProgramObject); - for (int layer = 0; layer < R_SAMPLES; ++layer) { - step3DTexture(_deltaJProgramObject, layer); - renderQuadForCalc(vao, vertexSize); - } - /*std::stringstream sst; - sst << "deltaJ_texture-scattering_order-" << scatteringOrder << ".ppm"; - saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, sst.str(), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 6. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 8 in algorithm 4.1 - glBindTexture(GL_TEXTURE_2D, _dummyTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT, 0, - GL_RGB, GL_FLOAT, nullptr); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _deltaETableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT); - _irradianceSupTermsProgramObject->activate(); - if (scatteringOrder == 2) - _irradianceSupTermsProgramObject->setUniform("first", 1.0f); - else - _irradianceSupTermsProgramObject->setUniform("first", 0.0f); - _irradianceSupTermsProgramObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - _irradianceSupTermsProgramObject->setUniform("deltaSRTexture", _deltaSRayleighTableTextureUnit); - _irradianceSupTermsProgramObject->setUniform("deltaSMTexture", _deltaSMieTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_irradianceSupTermsProgramObject); - renderQuadForCalc(vao, vertexSize); - /*sst.str(std::string()); - sst << "deltaE_texture-scattering_order-" << scatteringOrder << ".ppm"; - saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, sst.str(), - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 7. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 9 in algorithm 4.1 - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummy3DTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _deltaSRayleighTableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - _inScatteringSupTermsProgramObject->activate(); - if (scatteringOrder == 2) - _inScatteringSupTermsProgramObject->setUniform("first", 1.0f); - else - _inScatteringSupTermsProgramObject->setUniform("first", 0.0f); - _inScatteringSupTermsProgramObject->setUniform("transmittanceTexture", _transmittanceTableTextureUnit); - _inScatteringSupTermsProgramObject->setUniform("deltaJTexture", _deltaJTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_inScatteringSupTermsProgramObject); - for (int layer = 0; layer < R_SAMPLES; ++layer) { - step3DTexture(_inScatteringSupTermsProgramObject, layer); - renderQuadForCalc(vao, vertexSize); - } - /*sst.str(std::string()); - sst << "deltaS_texture-scattering_order-" << scatteringOrder << ".ppm"; - saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, sst.str(), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 8. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - glEnable(GL_BLEND); - glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); - glBlendFuncSeparate(GL_ONE, GL_ONE, GL_ONE, GL_ONE); - - // line 10 in algorithm 4.1 - glBindTexture(GL_TEXTURE_2D, _dummyTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT, 0, - GL_RGB, GL_FLOAT, nullptr); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _irradianceTableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT); - _deltaEProgramObject->activate(); - _deltaEProgramObject->setUniform("line", 10); - _deltaEProgramObject->setUniform("deltaETexture", _deltaETableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_deltaEProgramObject); - renderQuadForCalc(vao, vertexSize); - /*sst.str(std::string()); - sst << "irradianceTable_order-" << scatteringOrder << ".ppm"; - saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, sst.str(), - DELTA_E_TABLE_WIDTH, DELTA_E_TABLE_HEIGHT);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 9. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // line 11 in algorithm 4.1 - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummy3DTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _inScatteringTableTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Computation Framework not built."); - glViewport(0, 0, MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES); - _deltaSSupTermsProgramObject->activate(); - _deltaSSupTermsProgramObject->setUniform("deltaSTexture", _deltaSRayleighTableTextureUnit); - loadAtmosphereDataIntoShaderProgram(_deltaSSupTermsProgramObject); - for (int layer = 0; layer < R_SAMPLES; ++layer) { - step3DTexture(_deltaSSupTermsProgramObject, layer, false); - renderQuadForCalc(vao, vertexSize); - } - /*sst.str(std::string()); - sst << "inscatteringTable_order-" << scatteringOrder << ".ppm"; - saveTextureToPPMFile(GL_COLOR_ATTACHMENT1, sst.str(), - MU_S_SAMPLES * NU_SAMPLES, MU_SAMPLES);*/ - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error executing computation 10. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - glDisable(GL_BLEND); - } - -} - -void RenderablePlanet::preCalculateAtmosphereParam() { - - //========================================================== - //========= Load Shader Programs for Calculations ========== - //========================================================== - loadComputationPrograms(); - - GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error loading shader programs for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - //========================================================== - //============ Create Textures for Calculations ============ - //========================================================== - createComputationTextures(); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error creating textures for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // Preparing FBO... - GLint defaultFBO; - glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); - - GLuint calcFBO; - glGenFramebuffers(1, &calcFBO); - glBindFramebuffer(GL_FRAMEBUFFER, calcFBO); - glReadBuffer(GL_COLOR_ATTACHMENT1); - //glDrawBuffer(GL_COLOR_ATTACHMENT1); - GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 }; - glDrawBuffers(2, drawBuffers); - - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errString = gluErrorString(err); - std::stringstream ss; - ss << "Error creating FrameBuffer Object for Atmosphere computation. OpenGL error: " << errString << std::endl; - LERROR(ss.str()); - } - - // Prepare for rendering/calculations - GLuint calcVAO; - GLuint calcVBO; - createRenderQuad(&calcVAO, &calcVBO, 1.0f); - - GLint m_viewport[4]; - glGetIntegerv(GL_VIEWPORT, m_viewport); - - // Execute Calculations... - LDEBUG("Starting precalculations for scattering effects..."); - - //========================================================== - //=================== Execute Calculations ================= - //========================================================== - executeCalculations(calcVAO, drawBuffers, 6); - - deleteUnusedComputationTextures(); - - glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); - glViewport(m_viewport[0], m_viewport[1], - m_viewport[2], m_viewport[3]); - glDeleteBuffers(1, &calcVBO); - glDeleteVertexArrays(1, &calcVAO); - glDeleteFramebuffers(1, &calcFBO); - - LDEBUG("Ended precalculations for scattering effects..."); -} - -void RenderablePlanet::createAtmosphereFBO() { - - GLint m_viewport[4]; - glGetIntegerv(GL_VIEWPORT, m_viewport); - - /*GLint defaultFBO; - glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO); */ - - _atmosphereTextureUnit.activate(); - glGenTextures(1, &_atmosphereTexture); - glBindTexture(GL_TEXTURE_2D, _atmosphereTexture); - //glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, _atmosphereTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_viewport[2], - m_viewport[2], 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); - /*glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 8, GL_RGBA, - m_viewport[2], m_viewport[3], true);*/ - glGenFramebuffers(1, &_atmosphereFBO); - /*glBindFramebuffer(GL_FRAMEBUFFER, _atmosphereFBO); - glReadBuffer(GL_COLOR_ATTACHMENT1); - GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 }; - glDrawBuffers(2, drawBuffers); - - GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - std::stringstream ss; - ss << "Error creating atmosphere framebuffer. OpenGL error: " << err << std::endl; - LERROR(ss.str()); - } - - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _dummyTexture, 0); - glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, _atmosphereTexture, 0); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - LERROR("Atmosphere Framework not built."); - - glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); - glViewport(m_viewport[0], m_viewport[1], - m_viewport[2], m_viewport[3]);*/ - -} - -void RenderablePlanet::createRenderQuad(GLuint * vao, GLuint * vbo, const GLfloat size) { - - glGenVertexArrays(1, vao); - glGenBuffers(1, vbo); - glBindVertexArray(*vao); - glBindBuffer(GL_ARRAY_BUFFER, *vbo); - - const GLfloat vertex_data[] = { - // x y z w - -size, -size, 0.0f, 1.0f, - size, size, 0.0f, 1.0f, - -size, size, 0.0f, 1.0f, - -size, -size, 0.0f, 1.0f, - size, -size, 0.0f, 1.0f, - size, size, 0.0f, 1.0f - }; - - glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_data), vertex_data, GL_STATIC_DRAW); - glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, reinterpret_cast(0)); - glEnableVertexAttribArray(0); - - GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - std::stringstream ss; - ss << "Error creating vertexbuffer for computation. OpenGL error: " << err << std::endl; - LERROR(ss.str()); - } -} - -void RenderablePlanet::renderQuadForCalc(const GLuint vao, const GLsizei size) -{ - glBindVertexArray(vao); - glDrawArrays(GL_TRIANGLES, 0, size); - glBindVertexArray(0); -} - -void RenderablePlanet::step3DTexture(std::unique_ptr & shaderProg, - const int layer, const bool doCalc) -{ - // See OpenGL redbook 8th Edition page 556 for Layered Rendering - //if (doCalc) - { - - float earth2 = _atmospherePlanetRadius * _atmospherePlanetRadius; - float atm2 = _atmosphereRadius * _atmosphereRadius; - float diff = atm2 - earth2; - float r = static_cast(layer) / static_cast(R_SAMPLES - 1); - float r2 = r * r; - float c = 0.0; - if (layer == 0) - c = 0.01f; - else if (layer == (R_SAMPLES - 1)) - c = -0.001f; - else - c = 0.0; - r = sqrtf(earth2 + r2 * diff) + c; - float dmin = _atmosphereRadius - r; - float dmax = sqrtf(r * r - earth2) + sqrtf(diff); - float dminp = r - _atmospherePlanetRadius; - float dmaxp = sqrtf(r * r - earth2); - - shaderProg->setUniform("r", r); - shaderProg->setUniform("dhdH", dmin, dmax, dminp, dmaxp); - } - - shaderProg->setUniform("layer", static_cast(layer)); -} - -void RenderablePlanet::saveTextureToPPMFile(const GLenum color_buffer_attachment, const std::string & fileName, - const int width, const int height) const { - std::fstream ppmFile; - - ppmFile.open(fileName.c_str(), std::fstream::out); - if (ppmFile.is_open()) { - unsigned char * pixels = new unsigned char[width*height * 3]; - for (int t = 0; t < width*height * 3; ++t) - pixels[t] = 255; - - - // check OpenGL error - GLenum err; - while ((err = glGetError()) != GL_NO_ERROR) { - const GLubyte * errorString = gluErrorString(err); - - std::cout << "\n\nBefore Reading Texture from card. OpenGL error: " - << err << " - " << errorString << std::endl; - } - - glReadBuffer(color_buffer_attachment); - glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels); - - ppmFile << "P3" << std::endl; - ppmFile << width << " " << height << std::endl; - ppmFile << "255" << std::endl; - - std::cout << "\n\nFILE\n\n"; - int k = 0; - for (int i = 0; i < width; i++) { - for (int j = 0; j < height; j++) { - ppmFile << (unsigned int)pixels[k] << " " << (unsigned int)pixels[k + 1] << " " << (unsigned int)pixels[k + 2] << " "; - k += 3; - } - ppmFile << std::endl; - } - delete[] pixels; - - ppmFile.close(); + LERROR("Error after reading height mapping texture. OpenGL error: " << errString); } } diff --git a/modules/base/rendering/renderableplanet.h b/modules/base/rendering/renderableplanet.h index 11df2513df..9080b60fd4 100644 --- a/modules/base/rendering/renderableplanet.h +++ b/modules/base/rendering/renderableplanet.h @@ -66,38 +66,6 @@ public: bool isShadowing; }; - // See: Precomputed Atmospheric Scattering from Bruneton et al. - // for explanation of the following parameters. - - const unsigned int TRANSMITTANCE_TABLE_WIDTH = 256; - const unsigned int TRANSMITTANCE_TABLE_HEIGHT = 64; - - const unsigned int IRRADIANCE_TABLE_WIDTH = 64; - const unsigned int IRRADIANCE_TABLE_HEIGHT = 16; - - const unsigned int DELTA_E_TABLE_WIDTH = 64; - const unsigned int DELTA_E_TABLE_HEIGHT = 16; - - - /*const unsigned int TRANSMITTANCE_TABLE_WIDTH = 512; - const unsigned int TRANSMITTANCE_TABLE_HEIGHT = 128; - - const unsigned int IRRADIANCE_TABLE_WIDTH = 128; - const unsigned int IRRADIANCE_TABLE_HEIGHT = 32; - - const unsigned int DELTA_E_TABLE_WIDTH = 128; - const unsigned int DELTA_E_TABLE_HEIGHT = 32;*/ - - const unsigned int R_SAMPLES = 32; - const unsigned int MU_SAMPLES = 128; - const unsigned int MU_S_SAMPLES = 32; - const unsigned int NU_SAMPLES = 8; - - /*const unsigned int R_SAMPLES = 64; - const unsigned int MU_SAMPLES = 256; - const unsigned int MU_S_SAMPLES = 64; - const unsigned int NU_SAMPLES = 16;*/ - public: explicit RenderablePlanet(const ghoul::Dictionary& dictionary); ~RenderablePlanet(); @@ -111,71 +79,17 @@ public: protected: void loadTexture(); - -private: - void loadComputationPrograms(); - void unloadComputationPrograms(); - void createComputationTextures(); - void deleteComputationTextures(); - void deleteUnusedComputationTextures(); - void loadAtmosphereDataIntoShaderProgram(std::unique_ptr & shaderProg); - void executeCalculations(const GLuint vao, const GLenum drawBuffers[2], const GLsizei vertexSize); - void preCalculateAtmosphereParam(); - void createAtmosphereFBO(); - void createRenderQuad(GLuint * vao, GLuint * vbo, const GLfloat size); - void renderQuadForCalc(const GLuint vao, const GLsizei size); - void step3DTexture(std::unique_ptr & shaderProg, - const int layer, const bool doCalc = true); - void saveTextureToPPMFile(const GLenum color_buffer_attachment, const std::string & fileName, - const int width, const int height) const; - private: properties::StringProperty _colorTexturePath; properties::StringProperty _nightTexturePath; properties::StringProperty _heightMapTexturePath; - properties::StringProperty _cloudsTexturePath; - properties::StringProperty _reflectanceTexturePath; - + std::unique_ptr _programObject; - std::unique_ptr _transmittanceProgramObject; - std::unique_ptr _irradianceProgramObject; - std::unique_ptr _irradianceSupTermsProgramObject; - std::unique_ptr _inScatteringProgramObject; - std::unique_ptr _inScatteringSupTermsProgramObject; - std::unique_ptr _deltaEProgramObject; - std::unique_ptr _deltaSProgramObject; - std::unique_ptr _deltaSSupTermsProgramObject; - std::unique_ptr _deltaJProgramObject; - std::unique_ptr _atmosphereProgramObject; - ghoul::opengl::TextureUnit _dummyTextureUnit; - ghoul::opengl::TextureUnit _dummy3DTextureUnit; - ghoul::opengl::TextureUnit _transmittanceTableTextureUnit; - ghoul::opengl::TextureUnit _irradianceTableTextureUnit; - ghoul::opengl::TextureUnit _inScatteringTableTextureUnit; - ghoul::opengl::TextureUnit _deltaETableTextureUnit; - ghoul::opengl::TextureUnit _deltaSRayleighTableTextureUnit; - ghoul::opengl::TextureUnit _deltaSMieTableTextureUnit; - ghoul::opengl::TextureUnit _deltaJTableTextureUnit; - ghoul::opengl::TextureUnit _atmosphereTextureUnit; + std::unique_ptr _texture; - std::unique_ptr _nightTexture; - std::unique_ptr _reflectanceTexture; + std::unique_ptr _nightTexture; std::unique_ptr _heightMapTexture; - std::unique_ptr _cloudsTexture; - GLuint _transmittanceTableTexture; - GLuint _irradianceTableTexture; - GLuint _inScatteringTableTexture; - GLuint _deltaETableTexture; - GLuint _deltaSRayleighTableTexture; - GLuint _deltaSMieTableTexture; - GLuint _deltaJTableTexture; - GLuint _dummyTexture; - GLuint _dummy3DTexture; - GLuint _atmosphereTexture; - GLuint _atmosphereFBO; - GLuint _atmosphereRenderVAO; - GLuint _atmosphereRenderVBO; - + properties::FloatProperty _heightExaggeration; planetgeometry::PlanetGeometry* _geometry; @@ -189,31 +103,12 @@ private: std::string _frame; std::string _target; bool _hasNightTexture; - bool _hasReflectanceTexture; bool _hasHeightTexture; - bool _hasCloudsTexture; bool _shadowEnabled; double _time; - // Atmosphere Data - bool _atmosphereCalculated; - bool _atmosphereEnabled; - float _atmosphereRadius; - float _atmospherePlanetRadius; - float _planetAverageGroundReflectance; - float _rayleighHeightScale; - float _mieHeightScale; - float _miePhaseConstant; - glm::vec3 _mieExtinctionCoeff; - glm::vec3 _rayleighScatteringCoeff; - glm::vec3 _mieScatteringCoeff; - - bool tempPic; - unsigned int count; - - }; } // namespace openspace From 4597bde05a7680b3f04b9f23b6f48b6611d29a0e Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 22:15:17 +0200 Subject: [PATCH 06/18] Cleaned up RenderableRings Some minor performance improvements --- include/openspace/util/updatestructures.h | 2 +- modules/base/rendering/renderablerings.cpp | 73 ++++++++++++---------- src/rendering/framebufferrenderer.cpp | 25 +++----- src/rendering/renderengine.cpp | 2 +- 4 files changed, 52 insertions(+), 50 deletions(-) diff --git a/include/openspace/util/updatestructures.h b/include/openspace/util/updatestructures.h index 22ed70bef7..72116a7899 100644 --- a/include/openspace/util/updatestructures.h +++ b/include/openspace/util/updatestructures.h @@ -45,8 +45,8 @@ struct TransformData { struct UpdateData { TransformData modelTransform; double time; - bool isTimeJump; double delta; + bool isTimeJump; bool doPerformanceMeasurement; }; diff --git a/modules/base/rendering/renderablerings.cpp b/modules/base/rendering/renderablerings.cpp index 324de1ac31..6ee8ed363f 100644 --- a/modules/base/rendering/renderablerings.cpp +++ b/modules/base/rendering/renderablerings.cpp @@ -25,12 +25,9 @@ #include #include - #include #include -#include #include -#include #include #include @@ -39,13 +36,9 @@ #include namespace { - const std::string _loggerCat = "RenderableRings"; - const std::string KeyTexture = "Texture"; const std::string KeySize = "Size"; const std::string KeyOffset = "Offset"; - const std::string KeyNightFactor = "NightFactor"; - const std::string KeyTransparency = "Transparency"; } namespace openspace { @@ -92,7 +85,7 @@ RenderableRings::RenderableRings(const ghoul::Dictionary& dictionary) : Renderable(dictionary) , _texturePath("texture", "Texture") , _size("size", "Size", 1.f, 0.f, std::pow(1.f, 25.f)) - , _offset("offset", "Texture Offset", glm::vec2(0.f, 1.f), glm::vec2(0.f), glm::vec2(1.f)) + , _offset("offset", "Offset", glm::vec2(0, 1.f), glm::vec2(0.f), glm::vec2(1.f)) , _nightFactor("nightFactor", "Night Factor", 0.33f, 0.f, 1.f) , _transparency("transparency", "Transparency", 0.15f, 0.f, 1.f) , _shader(nullptr) @@ -111,22 +104,19 @@ RenderableRings::RenderableRings(const ghoul::Dictionary& dictionary) "RenderableRings" ); - double size = dictionary.value(KeySize); - _size = size; - setBoundingSphere(PowerScaledScalar::CreatePSS(size)); + _size = dictionary.value(KeySize); + setBoundingSphere(PowerScaledScalar::CreatePSS(_size)); + addProperty(_size); + _size.onChange([&]() { _planeIsDirty = true; }); _texturePath = absPath(dictionary.value(KeyTexture)); _textureFile = std::make_unique(_texturePath); if (dictionary.hasKeyAndValue(KeyOffset)) { - glm::vec2 off = dictionary.value(KeyOffset); - _offset = off; + _offset = dictionary.value(KeyOffset); } - addProperty(_offset); - addProperty(_size); - _size.onChange([&](){ _planeIsDirty = true; }); addProperty(_texturePath); _texturePath.onChange([&](){ loadTexture(); }); @@ -148,18 +138,14 @@ bool RenderableRings::initialize() { "${MODULE_BASE}/shaders/rings_vs.glsl", "${MODULE_BASE}/shaders/rings_fs.glsl" ); - if (!_shader) - return false; - _shader->setIgnoreUniformLocationError( ghoul::opengl::ProgramObject::IgnoreError::Yes ); } - glGenVertexArrays(1, &_quad); // generate array - glGenBuffers(1, &_vertexPositionBuffer); // generate buffer + glGenVertexArrays(1, &_quad); + glGenBuffers(1, &_vertexPositionBuffer); createPlane(); - loadTexture(); return isReady(); @@ -175,8 +161,7 @@ bool RenderableRings::deinitialize() { _textureFile = nullptr; _texture = nullptr; - RenderEngine& renderEngine = OsEng.renderEngine(); - renderEngine.removeRenderProgram(_shader); + OsEng.renderEngine().removeRenderProgram(_shader); _shader = nullptr; return true; @@ -246,7 +231,10 @@ void RenderableRings::loadTexture() { ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath)); if (texture) { - LDEBUG("Loaded texture from '" << absPath(_texturePath) << "'"); + LDEBUGC( + "RenderableRings", + "Loaded texture from '" << absPath(_texturePath) << "'" + ); _texture = std::move(texture); _texture->uploadTexture(); @@ -262,8 +250,15 @@ void RenderableRings::loadTexture() { void RenderableRings::createPlane() { const GLfloat size = _size.value(); - const GLfloat vertex_data[] = { - // x y s t + + struct VertexData { + GLfloat x; + GLfloat y; + GLfloat s; + GLfloat t; + }; + + VertexData data[] = { -size, -size, 0.f, 0.f, size, size, 1.f, 1.f, -size, size, 0.f, 1.f, @@ -272,13 +267,27 @@ void RenderableRings::createPlane() { size, size, 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); + glBindVertexArray(_quad); + glBindBuffer(GL_ARRAY_BUFFER, _vertexPositionBuffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW); glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, reinterpret_cast(0)); + glVertexAttribPointer( + 0, + 2, + GL_FLOAT, + GL_FALSE, + sizeof(VertexData), + reinterpret_cast(0) + ); glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 4, reinterpret_cast(sizeof(GLfloat) * 2)); + glVertexAttribPointer( + 1, + 2, + GL_FLOAT, + GL_FALSE, + sizeof(VertexData), + reinterpret_cast(offsetof(VertexData, s)) + ); } } // namespace openspace diff --git a/src/rendering/framebufferrenderer.cpp b/src/rendering/framebufferrenderer.cpp index f73dbd8361..7b1dd34a93 100644 --- a/src/rendering/framebufferrenderer.cpp +++ b/src/rendering/framebufferrenderer.cpp @@ -125,8 +125,6 @@ void FramebufferRenderer::initialize() { } OsEng.renderEngine().raycasterManager().addListener(*this); - - } void FramebufferRenderer::deinitialize() { @@ -153,8 +151,6 @@ void FramebufferRenderer::raycastersChanged(VolumeRaycaster& raycaster, bool att } void FramebufferRenderer::update() { - PerfMeasure("FramebufferRenderer::update"); - if (_dirtyResolution) { updateResolution(); } @@ -206,14 +202,11 @@ void FramebufferRenderer::update() { } void FramebufferRenderer::updateResolution() { - int nSamples = _nAaSamples; - PerfMeasure("FramebufferRenderer::updateResolution"); - glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, _mainColorTexture); glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, - nSamples, + _nAaSamples, GL_RGBA, GLsizei(_resolution.x), GLsizei(_resolution.y), @@ -222,7 +215,7 @@ void FramebufferRenderer::updateResolution() { glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, _mainDepthTexture); glTexImage2DMultisample( GL_TEXTURE_2D_MULTISAMPLE, - nSamples, + _nAaSamples, GL_DEPTH_COMPONENT32F, GLsizei(_resolution.x), GLsizei(_resolution.y), @@ -263,8 +256,6 @@ void FramebufferRenderer::updateResolution() { } void FramebufferRenderer::updateRaycastData() { - PerfMeasure("FramebufferRenderer::updateRaycastData"); - _raycastData.clear(); _exitPrograms.clear(); _raycastPrograms.clear(); @@ -319,7 +310,13 @@ void FramebufferRenderer::updateRaycastData() { } void FramebufferRenderer::render(float blackoutFactor, bool doPerformanceMeasurements) { - PerfMeasure("FramebufferRenderer::render"); + std::unique_ptr perf; + if (doPerformanceMeasurements) { + perf = std::make_unique( + "FramebufferRenderer::render", + OsEng.renderEngine().performanceManager() + ); + } if (!_scene) return; @@ -468,8 +465,6 @@ void FramebufferRenderer::setNAaSamples(int nAaSamples) { } void FramebufferRenderer::updateRendererData() { - PerfMeasure("FramebufferRenderer::updateRendererData"); - ghoul::Dictionary dict; dict.setValue("fragmentRendererPath", std::string(RenderFragmentShaderPath)); dict.setValue("postFragmentRendererPath", std::string(PostRenderFragmentShaderPath)); @@ -479,6 +474,4 @@ void FramebufferRenderer::updateRendererData() { OsEng.renderEngine().setRendererData(dict); } - } - diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 04667c4372..ca86d2fcb8 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -339,8 +339,8 @@ void RenderEngine::updateSceneGraph() { glm::dmat3(1), 1, Time::ref().j2000Seconds(), - Time::ref().timeJumped(), Time::ref().deltaTime(), + Time::ref().timeJumped(), _performanceManager != nullptr }); From c880ee421a883e3ad0165fef713eac32704d278d Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 29 Oct 2016 23:13:37 +0200 Subject: [PATCH 07/18] Make OpenSpaceModule able to report their version number --- include/openspace/engine/moduleengine.h | 8 ++++++++ .../openspace/network/parallelconnection.h | 11 +++-------- include/openspace/util/openspacemodule.h | 14 ++++++++++++++ src/engine/moduleengine.cpp | 19 +++++++++++++++++-- src/engine/openspaceengine.cpp | 12 +++++++++++- src/network/parallelconnection.cpp | 9 +++++++++ src/util/openspacemodule.cpp | 6 ++++++ 7 files changed, 68 insertions(+), 11 deletions(-) diff --git a/include/openspace/engine/moduleengine.h b/include/openspace/engine/moduleengine.h index 6075ebe125..2e06a4f930 100644 --- a/include/openspace/engine/moduleengine.h +++ b/include/openspace/engine/moduleengine.h @@ -75,6 +75,14 @@ public: */ std::vector modules() const; + /** + * Returns the combined minimum OpenGL version. The return value is the maximum + * version of all registered modules' OpenGL versions. + * \return The combined minimum OpenGL version + */ + ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version + requiredOpenGLVersion() const; + /** * Returns the Lua library that contains all Lua functions available to affect the * modules. diff --git a/include/openspace/network/parallelconnection.h b/include/openspace/network/parallelconnection.h index e372d75001..6b77861e4d 100644 --- a/include/openspace/network/parallelconnection.h +++ b/include/openspace/network/parallelconnection.h @@ -44,14 +44,7 @@ #include #include -#ifdef WIN32 -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#include -#include -#endif + #if defined(WIN32) || defined(__MING32__) || defined(__MING64__) typedef size_t _SOCKET; @@ -60,6 +53,8 @@ typedef int _SOCKET; #include #endif +struct addrinfo; + namespace openspace { class ParallelConnection { diff --git a/include/openspace/util/openspacemodule.h b/include/openspace/util/openspacemodule.h index 2cda76686a..83d0b6e444 100644 --- a/include/openspace/util/openspacemodule.h +++ b/include/openspace/util/openspacemodule.h @@ -29,6 +29,8 @@ #include +#include + #include #include @@ -66,8 +68,20 @@ public: */ void deinitialize(); + /** + * Returns a list of Documentation classes that are valid for this OpenSpaceModule. + * \return A list of Documentation classes that are valid for this OpenSapceModule + */ virtual std::vector documentations() const; + /** + * Returns the minimum required OpenGL version of this OpenSpaceModule. Unless + * overwritten, it returns an OpenGL version of 3.3. + * \return The minimum required OpenGL version of this OpenSpaceModule + */ + virtual ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version + requiredOpenGLVersion() const; + protected: /** * Customization point for each derived class. The internalInitialize method is called diff --git a/src/engine/moduleengine.cpp b/src/engine/moduleengine.cpp index 7cc15c84d5..4527c6041f 100644 --- a/src/engine/moduleengine.cpp +++ b/src/engine/moduleengine.cpp @@ -40,8 +40,9 @@ namespace { namespace openspace { void ModuleEngine::initialize() { - for (OpenSpaceModule* m : AllModules()) + for (OpenSpaceModule* m : AllModules()) { registerModule(std::unique_ptr(m)); + } } void ModuleEngine::deinitialize() { @@ -77,11 +78,25 @@ void ModuleEngine::registerModule(std::unique_ptr module) { std::vector ModuleEngine::modules() const { std::vector result; - for (auto& m : _modules) + for (auto& m : _modules) { result.push_back(m.get()); + } return result; } +ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version +ModuleEngine::requiredOpenGLVersion() const +{ + using Version = ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version; + Version version = { 0,0 }; + + for (const auto& m : _modules) { + version = std::max(version, m->requiredOpenGLVersion()); + } + + return version; +} + scripting::LuaLibrary ModuleEngine::luaLibrary() { return { "modules", diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index eeadd04d1f..d1585f7d85 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -403,7 +403,17 @@ bool OpenSpaceEngine::initialize() { verbosity = verbosityMap[v]; } SysCap.logCapabilities(verbosity); - + + // Check the required OpenGL versions of the registered modules + ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version version = + _engine->_moduleEngine->requiredOpenGLVersion(); + LINFO("Required OpenGL version: " << version.toString()); + + if (OpenGLCap.openGLVersion() < version) { + LFATAL("Module required higher OpenGL version than is supported"); + return false; + } + std::string requestURL = ""; bool success = configurationManager().getValue(ConfigurationManager::KeyDownloadRequestURL, requestURL); if (success) { diff --git a/src/network/parallelconnection.cpp b/src/network/parallelconnection.cpp index 02c64e2afb..9eb0a8d60c 100644 --- a/src/network/parallelconnection.cpp +++ b/src/network/parallelconnection.cpp @@ -52,6 +52,15 @@ #endif #endif +#ifdef WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include +#endif + //openspace includes #include #include diff --git a/src/util/openspacemodule.cpp b/src/util/openspacemodule.cpp index dc61f1c014..c326e3256c 100644 --- a/src/util/openspacemodule.cpp +++ b/src/util/openspacemodule.cpp @@ -67,6 +67,12 @@ std::vector OpenSpaceModule::documentations() const { return {}; } +ghoul::systemcapabilities::OpenGLCapabilitiesComponent::Version +OpenSpaceModule::requiredOpenGLVersion() const +{ + return { 3, 3 }; +} + std::string OpenSpaceModule::modulePath() const { std::string moduleName = name(); std::transform(moduleName.begin(), moduleName.end(), moduleName.begin(), tolower); From fd98f311d36101e28d9670bf22c3e69f519b4894 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 31 Oct 2016 11:43:36 +0100 Subject: [PATCH 08/18] Some cleanup of scene files Exceptions in preInitialization scripts no long crash the application --- data/scene/debugmodel.scene | 53 ----------- data/scene/default-moon.scene | 93 ------------------- data/scene/globebrowsing-debug.scene | 46 --------- .../rendering/renderablecrawlingline.cpp | 2 +- src/engine/openspaceengine.cpp | 33 ++----- 5 files changed, 7 insertions(+), 220 deletions(-) delete mode 100644 data/scene/debugmodel.scene delete mode 100644 data/scene/default-moon.scene delete mode 100644 data/scene/globebrowsing-debug.scene diff --git a/data/scene/debugmodel.scene b/data/scene/debugmodel.scene deleted file mode 100644 index c53596b87e..0000000000 --- a/data/scene/debugmodel.scene +++ /dev/null @@ -1,53 +0,0 @@ --- TextureResolution = "low" -TextureResolution = "med" --- TextureResolution = "high" - -function preInitialization() - --[[ - The scripts in this function are executed after the scene is loaded but before the - scene elements have been initialized, thus they should be used to set the time at - which the scene should start and other settings that might determine initialization - critical objects. - ]]-- - - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) - - openspace.spice.loadKernel("${SPICE}/naif0011.tls") - openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - - openspace.time.setTime("2018-10-25T04:00:00.00") - openspace.time.setDeltaTime(0) -end - -function postInitialization() - --[[ - The scripts in this function are executed after all objects in the scene have been - created and initialized, but before the first render call. This is the place to set - graphical settings for the renderables. - ]]-- - openspace.printInfo("Setting default values") - - openspace.setPropertyValue("Sun.renderable.enabled", false) - openspace.setPropertyValue("SunGlare.renderable.enabled", false) - openspace.setPropertyValue("SunMarker.renderable.enabled", false) - - openspace.printInfo("Done setting default values") - - openspace.resetCameraDirection() -end - -return { - ScenePath = ".", - CommonFolder = "common", - Camera = { - Focus = "DebugModel", - Position = {292946.630948, 377755.961928, 366248.427057}, - Rotation = {0.732615, -0.137003, 0.430036, 0.509485}, - }, - Modules = { - "sun", - "stars", - "debugmodel", - } -} - diff --git a/data/scene/default-moon.scene b/data/scene/default-moon.scene deleted file mode 100644 index 90748de3bf..0000000000 --- a/data/scene/default-moon.scene +++ /dev/null @@ -1,93 +0,0 @@ -function preInitialization() - --[[ - The scripts in this function are executed after the scene is loaded but before the - scene elements have been initialized, thus they should be used to set the time at - which the scene should start and other settings that might determine initialization - critical objects. - ]]-- - - --YYYY-MM-DDTHH:MN:SS - --openspace.time.setTime(openspace.time.currentWallTime()) - --[[ - -- March 9, 2016 total eclipse times from land - -- Palembang, South Sumatra, Indonesia - -- Partial solar eclipse begins: 6:20 a.m. local Western Indonesian Time - -- Total solar eclipse begins: 7:20 a.m. local time - -- Maximum eclipse: 7:21 a.m. local time - -- Total solar eclipse ends: 7:22 a.m. local time - -- Partial solar eclipse ends: 8:31 a.m. local time - - -- 6:20 -> 23:20 day before in UTC - ]]-- - openspace.spice.loadKernel("${SPICE}/naif0011.tls") - openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - - openspace.time.setTime("2016-03-08T22:45:00") - - - -- Total Lunar Eclipse Jan 31, 2018 at 10:51:13 UTC - -- Regions seeing, at least, some parts of the eclipse: North/East Europe, - -- Asia, Australia, North/East Africa, North America, North/East South America, - -- Pacific, Atlantic, Indian Ocean, Arctic, Antarctica. - --openspace.time.setTime("2018-01-31T10:30:00") - - --openspace.time.setDeltaTime(200.0) - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) -end - -function postInitialization() - --[[ - The scripts in this function are executed after all objects in the scene have been - created and initialized, but before the first render call. This is the place to set - graphical settings for the renderables. - ]]-- - openspace.printInfo("Setting default values") - openspace.setPropertyValue("Sun.renderable.enabled", false) - openspace.setPropertyValue("SunMarker.renderable.enabled", false) - openspace.setPropertyValue("EarthMarker.renderable.enabled", false) - --openspace.setPropertyValue("Constellation Bounds.renderable.enabled", false) - openspace.setPropertyValue("PlutoTrail.renderable.enabled", false) - openspace.setPropertyValue("PlutoTexture.renderable.enabled", false) - - openspace.setPropertyValue("MilkyWay.renderable.transparency", 0.55) - openspace.setPropertyValue("MilkyWay.renderable.segments", 50) - - openspace.printInfo("Done setting default values") -end - -return { - ScenePath = ".", - CommonFolder = "common", - Camera = { - Focus = "Earth", - --Focus = "Moon", - Position = {526781518487.171326, 257168309890.072144, -1381125204152.817383}, - Rotation = {-0.106166, 0.981574, -0.084545, 0.134513}, - }, - Modules = { - "sun", - "mercury", - "venus", - "earth", - "moon", - "mars", - --"jupiter", - "saturn", - "uranus", - "neptune", - "stars", - -- "stars-denver", - "milkyway", - -- "milkyway-eso", - --"constellationbounds", - -- "fieldlines", - --"io", - --"europa", - --"ganymede", - --"callisto", - --"gridGalactic", - --"gridEcliptic", - --"gridEquatorial", - } -} - diff --git a/data/scene/globebrowsing-debug.scene b/data/scene/globebrowsing-debug.scene deleted file mode 100644 index ef64c4ef0d..0000000000 --- a/data/scene/globebrowsing-debug.scene +++ /dev/null @@ -1,46 +0,0 @@ -function preInitialization() - --[[ - The scripts in this function are executed after the scene is loaded but before the - scene elements have been initialized, thus they should be used to set the time at - which the scene should start and other settings that might determine initialization - critical objects. - ]]-- - - --openspace.time.setTime(openspace.time.currentWallTime()) - openspace.spice.loadKernel("${SPICE}/naif0011.tls") - openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - - openspace.time.setTime("2015 NOV 24 00:00:00") - - - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) -end - -function postInitialization() - openspace.printInfo("Setting default values") - - openspace.setInteractionMode('GlobeBrowsing') - - openspace.time.setDeltaTime(0) - openspace.restoreCameraStateFromFile("debugstart.view") - openspace.resetCameraDirection() - openspace.gui.show() - - openspace.printInfo("Done setting default values") -end - - -return { - ScenePath = ".", - CommonFolder = "common", - Camera = { - Focus = "DebugGlobe", - Position = {3428016.852415, 616607.056698, 60430.587719}, - Rotation = {0.178551, -0.280661, 0.916566, 0.221935}, - }, - - Modules = { - "debugglobe" - } -} - diff --git a/modules/newhorizons/rendering/renderablecrawlingline.cpp b/modules/newhorizons/rendering/renderablecrawlingline.cpp index 4c538c180a..1c0035e086 100644 --- a/modules/newhorizons/rendering/renderablecrawlingline.cpp +++ b/modules/newhorizons/rendering/renderablecrawlingline.cpp @@ -132,7 +132,7 @@ void RenderableCrawlingLine::render(const RenderData& data) { _program->setUniform("ModelTransform", transform); int frame = _frameCounter % 60; - float fadingFactor = static_cast(sin((frame * pi_c()) / 60)); + float fadingFactor = static_cast(sin((frame * 3.14159) / 60)); float alpha = 0.6f + fadingFactor*0.4f; glLineWidth(2.f); diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index d1585f7d85..d39b89dfa3 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -471,13 +471,13 @@ bool OpenSpaceEngine::initialize() { _renderEngine->setGlobalBlackOutFactor(0.0); _renderEngine->startFading(1, 3.0); - - //_interactionHandler->setKeyboardController(new interaction::KeyboardControllerFixed); - //_interactionHandler->setMouseController(new interaction::OrbitalMouseController); - // Run start up scripts - runPreInitializationScripts(scenePath); - + try { + runPreInitializationScripts(scenePath); + } + catch (const ghoul::RuntimeError& e) { + LFATALC(e.component, e.message); + } #ifdef OPENSPACE_MODULE_ONSCREENGUI_ENABLED LINFO("Initializing GUI"); @@ -642,24 +642,6 @@ void OpenSpaceEngine::runScripts(const ghoul::Dictionary& scripts) { scripts.getValue(key, scriptPath); std::string&& absoluteScriptPath = absPath(scriptPath); _engine->scriptEngine().runScriptFile(absoluteScriptPath); - - //@JK - //temporary solution to ensure that startup scripts may be syncrhonized over parallel connection - /* - std::ifstream scriptFile; - scriptFile.open(absoluteScriptPath.c_str()); - std::string line; - - while(getline(scriptFile,line)){ - //valid line and not a comment - if(line.size() > 0 && line.at(0) != '-'){ - std::string lib, func; - if(_engine->scriptEngine().parseLibraryAndFunctionNames(lib, func, line) && - _engine->scriptEngine().shouldScriptBeSent(lib, func)){ - _engine->scriptEngine().cacheScript(lib, func, line); - } - } - }*/ } } @@ -902,9 +884,6 @@ void OpenSpaceEngine::postSynchronizationPreDraw() { // Step the camera using the current mouse velocities which are synced //_interactionHandler->updateCamera(); - - - #ifdef OPENSPACE_MODULE_ONSCREENGUI_ENABLED if (_isMaster && _gui->isEnabled() && _windowWrapper->isRegularRendering()) { glm::vec2 mousePosition = _windowWrapper->mousePosition(); From c21bb3bb4d3508d2cf978f54010c0728d8577cb7 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 31 Oct 2016 15:24:46 +0100 Subject: [PATCH 09/18] Make SGCT work between Debug and Release without manual removal --- ext/sgct | 2 +- support/cmake/support_macros.cmake | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/sgct b/ext/sgct index fb95dc335b..c7f321dd50 160000 --- a/ext/sgct +++ b/ext/sgct @@ -1 +1 @@ -Subproject commit fb95dc335ba7d396723fbfeca64aa3b7451376c8 +Subproject commit c7f321dd504c184e6ac65d26b33aec2f7699c476 diff --git a/support/cmake/support_macros.cmake b/support/cmake/support_macros.cmake index 04adf37437..b997b88fa6 100644 --- a/support/cmake/support_macros.cmake +++ b/support/cmake/support_macros.cmake @@ -124,6 +124,7 @@ function (add_external_dependencies) set(SGCT_TEXT OFF CACHE BOOL "" FORCE) set(SGCT_BUILD_CSHARP_PROJECTS OFF CACHE BOOL "" FORCE) set(SGCT_LIGHT_ONLY ON CACHE BOOL "" FORCE) + set(SGCT_CUSTOMOUTPUTDIRS OFF CACHE BOOL "" FORCE) add_subdirectory(${OPENSPACE_EXT_DIR}/sgct) target_include_directories(libOpenSpace SYSTEM PUBLIC ${OPENSPACE_EXT_DIR}/sgct/include) From 85f298a659d950a311b936a37c4f18728e64b470 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 5 Nov 2016 15:48:46 +0100 Subject: [PATCH 10/18] Add documentation to openspace.bindKeys script --- .../interaction/interactionhandler.h | 25 ++++++++-- scripts/common.lua | 24 ++++++++-- src/interaction/interactionhandler.cpp | 48 ++++++++++++------- src/interaction/interactionhandler_lua.inl | 43 ++++++++++++----- 4 files changed, 105 insertions(+), 35 deletions(-) diff --git a/include/openspace/interaction/interactionhandler.h b/include/openspace/interaction/interactionhandler.h index 8ba106785b..88a8cc688e 100644 --- a/include/openspace/interaction/interactionhandler.h +++ b/include/openspace/interaction/interactionhandler.h @@ -34,6 +34,7 @@ #include #include +#include #include @@ -70,8 +71,18 @@ public: void addKeyframe(const datamessagestructures::CameraKeyframe &kf); void clearKeyframes(); - void bindKeyLocal(Key key, KeyModifier modifier, std::string lua); - void bindKey(Key key, KeyModifier modifier, std::string lua); + void bindKeyLocal( + Key key, + KeyModifier modifier, + std::string luaCommand, + std::string documentation = "" + ); + void bindKey( + Key key, + KeyModifier modifier, + std::string luaCommand, + std::string documentation = "" + ); void lockControls(); void unlockControls(); @@ -105,11 +116,19 @@ public: void writeKeyboardDocumentation(const std::string& type, const std::string& file); private: + using Synchronized = ghoul::Boolean; + + struct KeyInformation { + std::string command; + Synchronized synchronization; + std::string documentation; + }; + void setInteractionMode(std::shared_ptr interactionMode); bool _cameraUpdatedFromScript = false; - std::multimap> _keyLua; + std::multimap _keyLua; std::unique_ptr _inputState; Camera* _camera; diff --git a/scripts/common.lua b/scripts/common.lua index 17c1ade776..4167b4cc04 100644 --- a/scripts/common.lua +++ b/scripts/common.lua @@ -12,9 +12,21 @@ helper.scheduledScript.reversible = {} -- Function that sets the most common key bindings that are common to most (all?) -- scenes helper.setCommonKeys = function() - openspace.bindKeyLocal("F1", "openspace.gui.toggle()") - openspace.bindKeyLocal("F2", "openspace.setPerformanceMeasurement(true)") - openspace.bindKeyLocal("F3", "openspace.setPerformanceMeasurement(false)") + openspace.bindKeyLocal( + "F1", + "openspace.gui.toggle()", + "Toggles the visibility of the on-screen GUI" + ) + openspace.bindKeyLocal( + "F2", + "openspace.setPerformanceMeasurement(true)", + "Enables performance measurements" + ) + openspace.bindKeyLocal( + "F3", + "openspace.setPerformanceMeasurement(false)", + "Disables performance measurements" + ) openspace.bindKeyLocal("t", "openspace.toggleFrametimeType(1)") openspace.bindKeyLocal("Shift+t", "openspace.toggleFrametimeType(0)") @@ -48,7 +60,11 @@ helper.setDeltaTimeKeys = function(t) end for i, v in ipairs(t) do - openspace.bindKey(Keys[i], 'openspace.time.setDeltaTime(' .. v .. ")") + openspace.bindKey( + Keys[i], + 'openspace.time.setDeltaTime(' .. v .. ")", + 'Setting the simulation speed to ' .. v .. ' seconds per realtime second' + ) end end diff --git a/src/interaction/interactionhandler.cpp b/src/interaction/interactionhandler.cpp index f24ced430b..33154bd358 100644 --- a/src/interaction/interactionhandler.cpp +++ b/src/interaction/interactionhandler.cpp @@ -288,10 +288,11 @@ void InteractionHandler::keyboardCallback(Key key, KeyModifier modifier, KeyActi // iterate over key bindings auto ret = _keyLua.equal_range({ key, modifier }); for (auto it = ret.first; it != ret.second; ++it) { - OsEng.scriptEngine().queueScript(it->second.first, - it->second.second ? + auto remote = it->second.synchronization ? scripting::ScriptEngine::RemoteScripting::Yes : - scripting::ScriptEngine::RemoteScripting::No); + scripting::ScriptEngine::RemoteScripting::No; + + OsEng.scriptEngine().queueScript(it->second.command, remote); } } } @@ -395,22 +396,27 @@ void InteractionHandler::resetKeyBindings() { _keyLua.clear(); } -void InteractionHandler::bindKeyLocal(Key key, KeyModifier modifier, std::string lua) { +void InteractionHandler::bindKeyLocal(Key key, KeyModifier modifier, + std::string luaCommand, std::string documentation) +{ _keyLua.insert({ { key, modifier }, - std::make_pair(lua, false) + { std::move(luaCommand), Synchronized::No, std::move(documentation) } }); } -void InteractionHandler::bindKey(Key key, KeyModifier modifier, std::string lua) { +void InteractionHandler::bindKey(Key key, KeyModifier modifier, + std::string luaCommand, std::string documentation) +{ _keyLua.insert({ { key, modifier }, - std::make_pair(lua, true) + { std::move(luaCommand), Synchronized::Yes, std::move(documentation) } }); } -void InteractionHandler::writeKeyboardDocumentation(const std::string& type, const std::string& file) +void InteractionHandler::writeKeyboardDocumentation(const std::string& type, + const std::string& file) { if (type == "text") { std::ofstream f; @@ -419,13 +425,14 @@ void InteractionHandler::writeKeyboardDocumentation(const std::string& type, con for (const auto& p : _keyLua) { std::string remoteScriptingInfo; - bool remoteScripting = p.second.second; + bool remoteScripting = p.second.synchronization; if (!remoteScripting) { remoteScriptingInfo = " (LOCAL)"; } - f << std::to_string(p.first) << ": " << - p.second.first << remoteScriptingInfo << std::endl; + f << std::to_string(p.first) << ": " + << p.second.command << remoteScriptingInfo << '\n' + << p.second.documentation << '\n'; } } else if (type == "html") { @@ -469,8 +476,9 @@ void InteractionHandler::writeKeyboardDocumentation(const std::string& type, con first = false; json << "{"; json << "\"key\": \"" << std::to_string(p.first) << "\","; - json << "\"script\": \"" << p.second.first << "\","; - json << "\"remoteScripting\": " << (p.second.second ? "true" : "false"); + json << "\"script\": \"" << p.second.command << "\","; + json << "\"remoteScripting\": " << (p.second.synchronization ? "true," : "false,"); + json << "\"documentation\": \"" << p.second.documentation << "\""; json << "}"; } json << "]"; @@ -543,15 +551,21 @@ scripting::LuaLibrary InteractionHandler::luaLibrary() { { "bindKey", &luascriptfunctions::bindKey, - "string, string", + "string, string [,string]", "Binds a key by name to a lua string command to execute both locally " - "and to broadcast to clients if this is the host of a parallel session" + "and to broadcast to clients if this is the host of a parallel session. " + "The first argument is the key, the second argument is the Lua command " + "that is to be executed, and the optional third argument is a human " + "readable description of the command for documentation purposes." }, { "bindKeyLocal", &luascriptfunctions::bindKeyLocal, - "string, string", - "Binds a key by name to a lua string command to execute only locally" + "string, string [,string]", + "Binds a key by name to a lua string command to execute only locally. " + "The first argument is the key, the second argument is the Lua command " + "that is to be executed, and the optional third argument is a human " + "readable description of the command for documentation purposes." }, { "setInteractionMode", diff --git a/src/interaction/interactionhandler_lua.inl b/src/interaction/interactionhandler_lua.inl index 7fb9388858..21ad7fc862 100644 --- a/src/interaction/interactionhandler_lua.inl +++ b/src/interaction/interactionhandler_lua.inl @@ -68,15 +68,20 @@ int bindKey(lua_State* L) { using ghoul::lua::luaTypeToString; int nArguments = lua_gettop(L); - if (nArguments != 2) - return luaL_error(L, "Expected %i arguments, got %i", 2, nArguments); + if (nArguments != 2 && nArguments != 3) { + return luaL_error(L, "Expected %i or %i arguments, got %i", 2, 3, nArguments); + } + int KeyLocation = nArguments == 3 ? -3 : -2; + int CommandLocation = nArguments == 3 ? -2 : -1; + int DocumentationLocation = -1; - std::string key = luaL_checkstring(L, -2); - std::string command = luaL_checkstring(L, -1); + std::string key = luaL_checkstring(L, KeyLocation); + std::string command = luaL_checkstring(L, CommandLocation); - if (command.empty()) + if (command.empty()) { return luaL_error(L, "Command string is empty"); + } openspace::KeyWithModifier iKey = openspace::stringToKey(key); @@ -85,11 +90,16 @@ int bindKey(lua_State* L) { return 0; } + std::string documentation; + if (nArguments == 3) { + documentation = luaL_checkstring(L, DocumentationLocation); + } OsEng.interactionHandler().bindKey( iKey.key, iKey.modifier, - command + std::move(command), + std::move(documentation) ); return 0; @@ -104,12 +114,17 @@ int bindKeyLocal(lua_State* L) { using ghoul::lua::luaTypeToString; int nArguments = lua_gettop(L); - if (nArguments != 2) - return luaL_error(L, "Expected %i arguments, got %i", 2, nArguments); + if (nArguments != 2 && nArguments != 3) { + return luaL_error(L, "Expected %i or %i arguments, got %i", 2, 3, nArguments); + } + int KeyLocation = nArguments == 3 ? -3 : -2; + int CommandLocation = nArguments == 3 ? -2 : -1; + int DocumentationLocation = -1; + + std::string key = luaL_checkstring(L, KeyLocation); + std::string command = luaL_checkstring(L, CommandLocation); - std::string key = luaL_checkstring(L, -2); - std::string command = luaL_checkstring(L, -1); if (command.empty()) return luaL_error(L, "Command string is empty"); @@ -121,10 +136,16 @@ int bindKeyLocal(lua_State* L) { return 0; } + std::string documentation; + if (nArguments == 3) { + documentation = luaL_checkstring(L, DocumentationLocation); + } + OsEng.interactionHandler().bindKeyLocal( iKey.key, iKey.modifier, - command + std::move(command), + std::move(documentation) ); return 0; From c469be26c38c04289a1425264b492eacc6646570 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 5 Nov 2016 16:23:51 +0100 Subject: [PATCH 11/18] Make toggling the performance measurements a BoolProperty of RenderEngine --- include/openspace/rendering/renderengine.h | 25 ++++------- modules/base/rendering/renderablemodel.h | 1 + .../newhorizons/util/projectioncomponent.cpp | 1 + .../include/guiperformancecomponent.h | 2 + scripts/common.lua | 9 +--- src/engine/openspaceengine.cpp | 6 ++- src/rendering/renderengine.cpp | 44 ++++++++----------- src/rendering/renderengine_lua.inl | 16 ------- 8 files changed, 36 insertions(+), 68 deletions(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index c8c5b2b5fb..d33fe86454 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -27,15 +27,11 @@ #include -#include -#include -#include +#include +#include #include - -#include - namespace ghoul { namespace fontrendering { class Font; @@ -49,6 +45,10 @@ class SharedMemory; namespace openspace { +namespace performance { +class PerformanceManager; +} + // Forward declare to minimize dependencies class Camera; class SyncBuffer; @@ -59,7 +59,7 @@ class RaycasterManager; class ScreenLog; class ScreenSpaceRenderable; -class RenderEngine { +class RenderEngine : public properties::PropertyOwner { public: enum class RendererImplementation { Framebuffer = 0, @@ -115,7 +115,6 @@ public: void toggleFrametimeType(int t); // Performance measurements - void setPerformanceMeasurements(bool performanceMeasurements); bool doesPerformanceMeasurements() const; performance::PerformanceManager* performanceManager(); @@ -193,15 +192,6 @@ public: glm::ivec2 renderingResolution() const; glm::ivec2 fontResolution() const; - // This is temporary until a proper screenspace solution is found ---abock - struct OnScreenInformation{ - glm::vec2 _position; - unsigned int _size; - int _node; - }; - - SyncData _onScreenInformation; - std::vector getSyncables(); private: @@ -214,6 +204,7 @@ private: Scene* _sceneGraph; RaycasterManager* _raycasterManager; + properties::BoolProperty _performanceMeasurements; std::unique_ptr _performanceManager; std::unique_ptr _renderer; diff --git a/modules/base/rendering/renderablemodel.h b/modules/base/rendering/renderablemodel.h index 19724e482d..5f842336ca 100644 --- a/modules/base/rendering/renderablemodel.h +++ b/modules/base/rendering/renderablemodel.h @@ -28,6 +28,7 @@ #include #include +#include #include #include diff --git a/modules/newhorizons/util/projectioncomponent.cpp b/modules/newhorizons/util/projectioncomponent.cpp index 9ff4439010..d2e05d6dfa 100644 --- a/modules/newhorizons/util/projectioncomponent.cpp +++ b/modules/newhorizons/util/projectioncomponent.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include namespace { diff --git a/modules/onscreengui/include/guiperformancecomponent.h b/modules/onscreengui/include/guiperformancecomponent.h index f5beabd38a..647b44e406 100644 --- a/modules/onscreengui/include/guiperformancecomponent.h +++ b/modules/onscreengui/include/guiperformancecomponent.h @@ -27,6 +27,8 @@ #include +#include + #include namespace ghoul { diff --git a/scripts/common.lua b/scripts/common.lua index 4167b4cc04..288d8f3675 100644 --- a/scripts/common.lua +++ b/scripts/common.lua @@ -19,13 +19,8 @@ helper.setCommonKeys = function() ) openspace.bindKeyLocal( "F2", - "openspace.setPerformanceMeasurement(true)", - "Enables performance measurements" - ) - openspace.bindKeyLocal( - "F3", - "openspace.setPerformanceMeasurement(false)", - "Disables performance measurements" + helper.property.invert("RenderEngine.performanceMeasurements"), + "Toogles performance measurements that shows rendering time informations" ) openspace.bindKeyLocal("t", "openspace.toggleFrametimeType(1)") diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index d39b89dfa3..03f5521b02 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -156,10 +157,10 @@ OpenSpaceEngine::OpenSpaceEngine(std::string programName, , _shutdownWait(0.f) , _isFirstRenderingFirstFrame(true) { - _interactionHandler->setPropertyOwner(_globalPropertyNamespace.get()); _globalPropertyNamespace->addPropertySubOwner(_interactionHandler.get()); _globalPropertyNamespace->addPropertySubOwner(_settingsEngine.get()); + _globalPropertyNamespace->addPropertySubOwner(_renderEngine.get()); FactoryManager::initialize(); FactoryManager::ref().addFactory( @@ -486,7 +487,8 @@ bool OpenSpaceEngine::initialize() { [&]() { std::vector res = { _settingsEngine.get(), - _interactionHandler.get() + _interactionHandler.get(), + _renderEngine.get() }; return res; } diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index ca86d2fcb8..da6d76895b 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -117,6 +117,7 @@ RenderEngine::RenderEngine() , _sceneGraph(nullptr) , _renderer(nullptr) , _rendererImplementation(RendererImplementation::Invalid) + , _performanceMeasurements("performanceMeasurements", "Performance Measurements") , _performanceManager(nullptr) , _log(nullptr) , _showInfo(true) @@ -129,13 +130,23 @@ RenderEngine::RenderEngine() , _fadeDirection(0) , _frameNumber(0) , _frametimeType(FrametimeType::DtTimeAvg) - // , _sgctRenderStatisticsVisible(false) { - _onScreenInformation = { - glm::vec2(0.f), - 12, - -1 - }; + setName("RenderEngine"); + + _performanceMeasurements.onChange([this](){ + if (_performanceMeasurements) { + if (!_performanceManager) { + _performanceManager = std::make_unique(); + } + } + else { + _performanceManager = nullptr; + } + + } + ); + + addProperty(_performanceMeasurements); } RenderEngine::~RenderEngine() { @@ -766,12 +777,6 @@ scripting::LuaLibrary RenderEngine::luaLibrary() { "int", "Toggle showing FPS or Average Frametime in heads up info" }, - { - "setPerformanceMeasurement", - &luascriptfunctions::setPerformanceMeasurement, - "bool", - "Sets the performance measurements" - }, { "toggleFade", &luascriptfunctions::toggleFade, @@ -807,17 +812,6 @@ scripting::LuaLibrary RenderEngine::luaLibrary() { }; } -void RenderEngine::setPerformanceMeasurements(bool performanceMeasurements) { - if (performanceMeasurements) { - if (!_performanceManager) { - _performanceManager = std::make_unique(); - } - } - else { - _performanceManager = nullptr; - } -} - bool RenderEngine::doesPerformanceMeasurements() const { return _performanceManager != nullptr; } @@ -1755,9 +1749,7 @@ void RenderEngine::renderScreenLog() { } std::vector RenderEngine::getSyncables(){ - std::vector syncables = _mainCamera->getSyncables(); - syncables.push_back(&_onScreenInformation); - return syncables; + return _mainCamera->getSyncables(); } void RenderEngine::sortScreenspaceRenderables() { diff --git a/src/rendering/renderengine_lua.inl b/src/rendering/renderengine_lua.inl index de2aa3b519..9dae62a6c2 100644 --- a/src/rendering/renderengine_lua.inl +++ b/src/rendering/renderengine_lua.inl @@ -123,22 +123,6 @@ int toggleFrametimeType(lua_State* L) { return 0; } -/** -* \ingroup LuaScripts -* visualizeABuffer(bool): -* Toggle the visualization of the ABuffer -*/ -int setPerformanceMeasurement(lua_State* L) { - int nArguments = lua_gettop(L); - if (nArguments != 1) { - return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); - } - - bool b = lua_toboolean(L, -1) != 0; - OsEng.renderEngine().setPerformanceMeasurements(b); - return 0; -} - /** * \ingroup LuaScripts * toggleFade(float): From 572257d3b043f47c09c8a6599b7159eaba77fa42 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sun, 6 Nov 2016 22:15:52 +0100 Subject: [PATCH 12/18] Move the rendertime into a property and remove the toggleFrametimeType Make OptionProperty work in Radio mode Rename DROPDOWN and RADIO to Dropdown and Radio --- include/openspace/properties/optionproperty.h | 4 +- include/openspace/rendering/renderengine.h | 6 ++- modules/onscreengui/src/renderproperties.cpp | 10 ++-- scripts/bind_keys.lua | 16 ------ scripts/common.lua | 11 ++-- src/engine/settingsengine.cpp | 2 +- src/properties/optionproperty.cpp | 4 +- src/rendering/renderengine.cpp | 51 +++++++++---------- src/rendering/renderengine_lua.inl | 18 ------- 9 files changed, 45 insertions(+), 77 deletions(-) diff --git a/include/openspace/properties/optionproperty.h b/include/openspace/properties/optionproperty.h index 39466779cf..7f153af8da 100644 --- a/include/openspace/properties/optionproperty.h +++ b/include/openspace/properties/optionproperty.h @@ -51,8 +51,8 @@ public: }; enum class DisplayType { - RADIO, - DROPDOWN + Radio, + Dropdown }; /** diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index d33fe86454..2120554775 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -27,6 +27,7 @@ #include +#include #include #include @@ -112,7 +113,6 @@ public: void takeScreenshot(bool applyWarping = false); void toggleInfoText(bool b); - void toggleFrametimeType(int t); // Performance measurements bool doesPerformanceMeasurements() const; @@ -213,7 +213,9 @@ private: ghoul::Dictionary _resolveData; ScreenLog* _log; - FrametimeType _frametimeType; + properties::OptionProperty _frametimeType; + + //FrametimeType _frametimeType; bool _showInfo; bool _showLog; diff --git a/modules/onscreengui/src/renderproperties.cpp b/modules/onscreengui/src/renderproperties.cpp index 60d3ce1724..74ae140c1e 100644 --- a/modules/onscreengui/src/renderproperties.cpp +++ b/modules/onscreengui/src/renderproperties.cpp @@ -72,16 +72,16 @@ void renderOptionProperty(Property* prop, const std::string& ownerName) { int value = *p; std::vector options = p->options(); switch (p->displayType()) { - case OptionProperty::DisplayType::RADIO: { + case OptionProperty::DisplayType::Radio: { + ImGui::Text(name.c_str()); + ImGui::Separator(); for (const OptionProperty::Option& o : options) { - ImGui::RadioButton(name.c_str(), &value, o.value); - ImGui::SameLine(); - ImGui::Text(o.description.c_str()); + ImGui::RadioButton(o.description.c_str(), &value, o.value); renderTooltip(prop); } break; } - case OptionProperty::DisplayType::DROPDOWN: { + case OptionProperty::DisplayType::Dropdown: { std::string nodeNames = ""; for (const OptionProperty::Option& o : options) { nodeNames += o.description + '\0'; diff --git a/scripts/bind_keys.lua b/scripts/bind_keys.lua index 3cd8f4cee0..2574db6b05 100644 --- a/scripts/bind_keys.lua +++ b/scripts/bind_keys.lua @@ -18,19 +18,3 @@ helper.setDeltaTimeKeys({ 2592000, 5184000, 7776000, 15552000, 31536000, 63072000, 157680000, 315360000, 630720000, 1576800000 }) -- OBS: One month (1mo) is approximated by 30 days. - - -openspace.bindKey("q", helper.renderable.toggle('SunMarker')) -openspace.bindKey("e", helper.renderable.toggle('EarthMarker')) -openspace.bindKey("x", helper.renderable.toggle('Constellation Bounds')) - ---openspace.bindKey("c", "openspace.parallel.setAddress('130.236.142.51');openspace.parallel.setPassword('newhorizons-20150714');openspace.parallel.connect();") - ---openspace.bindKey("h", "openspace.iswa.setBaseUrl('https://iswa-demo-server.herokuapp.com/')"); -openspace.bindKey("g", "openspace.iswa.setBaseUrl('http://128.183.168.116:3000/')"); -openspace.bindKey("l", "openspace.iswa.setBaseUrl('http://localhost:3000/')"); - -openspace.bindKey("v", "openspace.time.setTime('2015-03-15T02:00:00.00')"); - -openspace.bindKeyLocal("h", "openspace.parallel.setAddress('127.0.0.1');openspace.parallel.setPort('25001');openspace.parallel.setPassword('test');openspace.parallel.connect();openspace.parallel.requestHostship('test');") -openspace.bindKeyLocal("c", "openspace.parallel.setAddress('127.0.0.1');openspace.parallel.setPort('25001');openspace.parallel.setPassword('test');openspace.parallel.connect();") diff --git a/scripts/common.lua b/scripts/common.lua index 288d8f3675..26d55949df 100644 --- a/scripts/common.lua +++ b/scripts/common.lua @@ -23,9 +23,6 @@ helper.setCommonKeys = function() "Toogles performance measurements that shows rendering time informations" ) - openspace.bindKeyLocal("t", "openspace.toggleFrametimeType(1)") - openspace.bindKeyLocal("Shift+t", "openspace.toggleFrametimeType(0)") - openspace.bindKeyLocal("ESC", "openspace.toggleShutdown()") openspace.bindKeyLocal("PRINT_SCREEN", "openspace.takeScreenshot()") @@ -73,7 +70,7 @@ end helper.property.increment = function(property, value) local v = value or 1 local escaped_property = "'" .. property .. "'" - return "openspace.setPropertyValue(" .. escaped_property .. ", openspace.getPropertyValue(" .. escaped_property .. ") + " .. v .. ")" + return "openspace.setPropertyValue(" .. escaped_property .. ", openspace.getPropertyValue(" .. escaped_property .. ") + " .. v .. ");" end -- Function that returns the string that decrements the 'property' by the 'value' @@ -81,6 +78,12 @@ helper.property.decrement = function(property, value) return helper.property.increment(property, -value) end +-- Function that sets a property to a specify value +helper.property.set = function(property, value) + local escaped_property = "'" .. property .. "'" + return "openspace.setPropertyValue(" .. escaped_property .. ", " .. value .. ");" +end + -- Function that returns the string that enables/disables the renderable 'renderable' helper.renderable.toggle = function(renderable) return helper.property.invert(renderable .. ".renderable.enabled") diff --git a/src/engine/settingsengine.cpp b/src/engine/settingsengine.cpp index 45e76077ee..f0564efc68 100644 --- a/src/engine/settingsengine.cpp +++ b/src/engine/settingsengine.cpp @@ -48,7 +48,7 @@ namespace openspace { SettingsEngine::SettingsEngine() : _eyeSeparation("eyeSeparation", "Eye Separation" , 0.f, 0.f, 10.f) - , _scenes("scenes", "Scene", properties::OptionProperty::DisplayType::DROPDOWN) + , _scenes("scenes", "Scene", properties::OptionProperty::DisplayType::Dropdown) , _showFrameNumber("showFrameNumber", "Show frame number", false) , _busyWaitForDecode("busyWaitForDecode", "Busy Wait for decode", false) , _logSGCTOutOfOrderErrors("logSGCTOutOfOrderErrors", "Log SGCT out-of-order", false) diff --git a/src/properties/optionproperty.cpp b/src/properties/optionproperty.cpp index b205a4e9fd..f3a6112f9c 100644 --- a/src/properties/optionproperty.cpp +++ b/src/properties/optionproperty.cpp @@ -35,7 +35,7 @@ const std::string OptionProperty::OptionsKey = "Options"; OptionProperty::OptionProperty(std::string identifier, std::string guiName) : IntProperty(std::move(identifier), std::move(guiName)) - , _displayType(DisplayType::RADIO) + , _displayType(DisplayType::Radio) {} OptionProperty::OptionProperty(std::string identifier, std::string guiName, DisplayType displayType) @@ -61,7 +61,7 @@ void OptionProperty::addOption(int value, std::string desc) { option.value = value; option.description = desc; - for (auto o : _options) { + for (const auto& o : _options) { if (o.value == option.value) { LWARNING("The value of option {" << o.value << " -> " << o.description << "} was already registered when trying to add option {" << option.value << diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index da6d76895b..b6c4519025 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -114,10 +114,15 @@ const std::vector RenderEngine::FrametimeTypes({ RenderEngine::RenderEngine() : _mainCamera(nullptr) + , _performanceMeasurements("performanceMeasurements", "Performance Measurements") + , _frametimeType( + "frametimeType", + "Type of the frametime display", + properties::OptionProperty::DisplayType::Dropdown + ) , _sceneGraph(nullptr) , _renderer(nullptr) , _rendererImplementation(RendererImplementation::Invalid) - , _performanceMeasurements("performanceMeasurements", "Performance Measurements") , _performanceManager(nullptr) , _log(nullptr) , _showInfo(true) @@ -129,7 +134,7 @@ RenderEngine::RenderEngine() , _currentFadeTime(0.f) , _fadeDirection(0) , _frameNumber(0) - , _frametimeType(FrametimeType::DtTimeAvg) + //, _frametimeType(FrametimeType::DtTimeAvg) { setName("RenderEngine"); @@ -143,10 +148,22 @@ RenderEngine::RenderEngine() _performanceManager = nullptr; } - } - ); - + }); addProperty(_performanceMeasurements); + + _frametimeType.addOption( + static_cast(FrametimeType::DtTimeAvg), + "Average Deltatime" + ); + _frametimeType.addOption( + static_cast(FrametimeType::FPS), + "Frames per second" + ); + _frametimeType.addOption( + static_cast(FrametimeType::FPSAvg), + "Average frames per second" + ); + addProperty(_frametimeType); } RenderEngine::~RenderEngine() { @@ -527,21 +544,6 @@ void RenderEngine::toggleInfoText(bool b) { _showInfo = b; } -void RenderEngine::toggleFrametimeType(int t) { - std::vector::const_iterator it = std::find( - FrametimeTypes.begin(), FrametimeTypes.end(), _frametimeType); - - if (!t && it == FrametimeTypes.begin()) - it = FrametimeTypes.end(); - - t > 0 ? ++it : --it; - - if (t && it == FrametimeTypes.end()) - it = FrametimeTypes.begin(); - - _frametimeType = *it; -} - Scene* RenderEngine::scene() { ghoul_assert(_sceneGraph, "Scenegraph not initialized"); return _sceneGraph; @@ -771,12 +773,6 @@ scripting::LuaLibrary RenderEngine::luaLibrary() { "bool", "Toggles the showing of render information on-screen text" }, - { - "toggleFrametimeType", - &luascriptfunctions::toggleFrametimeType, - "int", - "Toggle showing FPS or Average Frametime in heads up info" - }, { "toggleFade", &luascriptfunctions::toggleFade, @@ -1313,7 +1309,8 @@ void RenderEngine::renderInformation() { Time::ref().deltaTime() ); - switch (_frametimeType) { + FrametimeType frametimeType = FrametimeType(_frametimeType.value()); + switch (frametimeType) { case FrametimeType::DtTimeAvg: RenderFontCr(*_fontInfo, penPosition, diff --git a/src/rendering/renderengine_lua.inl b/src/rendering/renderengine_lua.inl index 9dae62a6c2..4134ce44fc 100644 --- a/src/rendering/renderengine_lua.inl +++ b/src/rendering/renderengine_lua.inl @@ -105,24 +105,6 @@ int showRenderInformation(lua_State* L) { return 0; } -/** -* \ingroup LuaScripts -* toggleFramerateType(bool): -* Cycle through showing FPS or Average Frametime in heads up info -*/ -int toggleFrametimeType(lua_State* L) { - int nArguments = lua_gettop(L); - if (nArguments != 1) - return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); - - const int type = lua_type(L, -1); - if (type != LUA_TNUMBER) - return luaL_error(L, "Expected argument of type 'number'"); - int t = lua_tonumber(L, -1); - OsEng.renderEngine().toggleFrametimeType(t); - return 0; -} - /** * \ingroup LuaScripts * toggleFade(float): From 286eb8904843c618b2275b8de006964b8c1d6b00 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 00:21:55 +0100 Subject: [PATCH 13/18] Add more documentation to the bindKey functions of NewHorizons and OsirisRex --- data/scene/juno.scene | 2 - data/scene/osirisrex-noglobebrowsing.scene | 233 --------------------- data/scene/osirisrex.scene | 7 +- scripts/bind_keys_newhorizons.lua | 166 ++++++++++----- scripts/bind_keys_osirisrex.lua | 72 +++++-- scripts/common.lua | 59 ++++-- 6 files changed, 209 insertions(+), 330 deletions(-) delete mode 100644 data/scene/osirisrex-noglobebrowsing.scene diff --git a/data/scene/juno.scene b/data/scene/juno.scene index 346b872c2d..947900614d 100755 --- a/data/scene/juno.scene +++ b/data/scene/juno.scene @@ -18,8 +18,6 @@ function preInitialization() 1, 5, 10, 20, 40, 90, 360, 720, 2880, 14400, 28800, 57600, 115200, 230400, 460800, 921600, 1843200, 3686400, 7372800, 14745600 }) - - openspace.bindKey("F6", "openspace.setPropertyValue('Interaction.coordinateSystem', 'Jupiter');"); end function postInitialization() diff --git a/data/scene/osirisrex-noglobebrowsing.scene b/data/scene/osirisrex-noglobebrowsing.scene deleted file mode 100644 index e6a20d9bfa..0000000000 --- a/data/scene/osirisrex-noglobebrowsing.scene +++ /dev/null @@ -1,233 +0,0 @@ --- TextureResolution = "low" -TextureResolution = "med" --- TextureResolution = "high" - -local startTime = "2016 SEP 8 23:05:00.50" - -function preInitialization() - --[[ - The scripts in this function are executed after the scene is loaded but before the - scene elements have been initialized, thus they should be used to set the time at - which the scene should start and other settings that might determine initialization - critical objects. - ]]-- - - -- Load Spice Kernels - openspace.spice.loadKernel("${OPENSPACE_DATA}/spice/de430_1850-2150.bsp") - - -- background - -- SCLK kernels needs to be loaded before CK kernels (and generally first) - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/sclk/ORX_SCLKSCET.00000.tsc") - - -- This cannot be loaded correctly for some reason! - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/dsk/RQ36mod.oct12_CCv0001.bds") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/fk/orx_v04.tf") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_lidar_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ocams_v03.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_otes_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_rexis_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_struct_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_navcam_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ola_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ovirs_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_stowcam_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/lsk/naif0011.tls") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/pck/bennu_SPH250m.tpc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/pck/bennu_v10.tpc") - - -- Low res SPK - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160917_231024_pgaa3_day15m60_v1.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160914_231024_pgaa3_day12m60_v1.bsp") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa3_day06m60_v1.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/spk_orx_160908_231024_pgaa2_day06m60_v3.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa2_day06m60.bsp") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/OREX_20160908_M60_complete.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/OREX_20160904_M45_complete.bsp") - - -- SPK - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/de421.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/sb-101955-76.bsp") - - -- Nominal_Profile_LowRes - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_600s_20180816T230000_20181119T010000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_NominalProfile_600s_20180816T230000_20181119T010000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_600s_20190108T000000_20190317T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_NominalProfile_600s_20190108T000000_20190317T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_600s_20181203T230000_20190109T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_NominalProfile_600s_20181203T230000_20190109T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_600s_20190316T000000_20190521T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_NominalProfile600s_20190316T000000_20190521T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_600s_20181119T230000_20181204T010000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_NominalProfile_600s_20181119T230000_20181204T010000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_600s_20190519T000000_20190830T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_NominalProfile_600s_20190519T000000_20190830T000000.bc") - - -- Nominal_Observations_Science - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/DustSearch_v1/Phase03_AP_DustSearch_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/PhaseFunction_v1/Phase03_AP_PhaseFunction_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_6.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_7.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_8.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_9_Forced4x4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/SpectraMap_v1/Phase03_AP_SpectraMap_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_1_v1_1a.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_2_v1_1a.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_6.bc") - - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/README.txt") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_v2.bc") - - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_6.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_7.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_1.a") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_2.a") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_3.a") - - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case02_0Latitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case05_20negLatitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case08_40negLatitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case11_60negLatitude.wmv") - - local case = 2 -- Right now we only have the image times for case 2 - - if case == 2 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case02.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_0Latitude.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_atl_19145_04.atf") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case02.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case02_0Latitude.bc") - elseif case == 5 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case05.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_20negLatitude.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_atl_19145_04.atf") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_NominalProfile.bc") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case05.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case05_20negLatitude.bc") - elseif case == 8 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case08_NominalProfile.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case08.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case08_40negLatitude.bc") - elseif case == 11 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case11.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case11_60negLatitude.bc") - end - - -- Load planetary constants - openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) - dofile(openspace.absPath('${SCRIPTS}/bind_keys_osirisrex.lua')) - - --local startTime = "2019 APR 16 12:03:00.00" - - openspace.scriptScheduler.load("${OPENSPACE_DATA}/scene/osirisrex/scheduled_scripts.lua") - - -- Removing the line below will cause all scripts prior to to be executed during initialization - -- openspace.scriptScheduler.skipTo(startTime); - -end - -function postInitialization() - --[[ - The scripts in this function are executed after all objects in the scene have been - created and initialized, but before the first render call. This is the place to set - graphical settings for the renderables. - ]]-- - openspace.printInfo("Setting default values") - openspace.setPropertyValue("Sun.renderable.enabled", false) - openspace.setPropertyValue("SunMarker.renderable.enabled", false) - openspace.setPropertyValue("EarthMarker.renderable.enabled", false) - --openspace.setPropertyValue("Constellation Bounds.renderable.enabled", false) - openspace.setPropertyValue("PlutoTrail.renderable.enabled", true) - openspace.setPropertyValue("PlutoTexture.renderable.enabled", false) - - openspace.setPropertyValue("MilkyWay.renderable.transparency", 0.55) - openspace.setPropertyValue("MilkyWay.renderable.segments", 50) - - -- Activate night textures and water masks - openspace.setPropertyValue("Earth.RenderableGlobe.WaterMasks", {0, 1}); - openspace.setPropertyValue("Earth.RenderableGlobe.NightTextures", {0, 1}); - openspace.setPropertyValue("Earth.RenderableGlobe.Atmosphere", true); - - openspace.printInfo("Done setting default values") - openspace.loadMission("${OPENSPACE_DATA}/scene/osirisrex/osirisrex/osirisrex.mission") - - openspace.time.setTime(startTime) - openspace.time.setDeltaTime(0) - - openspace.resetCameraDirection() -end - -return { - ScenePath = ".", - CommonFolder = "common", - Camera = { - Focus = "OsirisRex", - Position = {26974590199.661884, 76314608558.908020, -127086452897.101791}, - Rotation = {0.729548, -0.126024, 0.416827, 0.527382}, - }, - Modules = { - "sun", - "mercury", - -- "lodmercury", - "venus", - "earth", - "mars", - -- "lodearth", - -- "lodmoon", - -- "lodmars", - "jupiter", - "saturn", - "uranus", - "neptune", - "stars", - -- "stars-denver", - "milkyway", - -- "milkyway-eso", - --"imageplane", - "osirisrex", - } -} - diff --git a/data/scene/osirisrex.scene b/data/scene/osirisrex.scene index 44d4a4052e..d4ead85f7b 100644 --- a/data/scene/osirisrex.scene +++ b/data/scene/osirisrex.scene @@ -210,11 +210,11 @@ return { }, Modules = { "sun", - "lodmercury", + "mercury", "venus", "lodearth", - "lodmoon", - "lodmars", + "moon", + "mars", "jupiter", "saturn", "uranus", @@ -223,7 +223,6 @@ return { -- "stars-denver", "milkyway", -- "milkyway-eso", - --"imageplane", "osirisrex", } } diff --git a/scripts/bind_keys_newhorizons.lua b/scripts/bind_keys_newhorizons.lua index 246a526d3c..096a22eb3a 100644 --- a/scripts/bind_keys_newhorizons.lua +++ b/scripts/bind_keys_newhorizons.lua @@ -11,64 +11,126 @@ helper.setDeltaTimeKeys({ 2160, 4320, 8640 }) -openspace.bindKey("a", "openspace.setPropertyValue('Interaction.origin', 'NewHorizons')") -openspace.bindKey("s", "openspace.setPropertyValue('Interaction.origin', 'PlutoProjection')") -openspace.bindKey("d", "openspace.setPropertyValue('Interaction.origin', 'Charon')") -openspace.bindKey("z", "openspace.setPropertyValue('Interaction.origin', 'JupiterProjection')") -openspace.bindKey("x", "openspace.setPropertyValue('Interaction.origin', 'Europa')") - -openspace.bindKey("F5", "openspace.setPropertyValue('Interaction.coordinateSystem', 'Sun'); openspace.printInfo('Changing Viewpoint to Sun');"); -openspace.bindKey("F6", "openspace.setPropertyValue('Interaction.coordinateSystem', 'Jupiter'); openspace.printInfo('Changing Viewpoint to Jupiter');"); -openspace.bindKey("F7", "openspace.setPropertyValue('Interaction.coordinateSystem', 'Pluto'); openspace.printInfo('Changing Viewpoint to Pluto');"); - -openspace.bindKey("F8", "openspace.setPropertyValue('PlutoProjection.renderable.ProjectionComponent.clearAllProjections', true); openspace.setPropertyValue('Charon.renderable.ProjectionComponent.clearAllProjections', true);") - --- Quickfix backjumps in pluto sequence -openspace.bindKey("F9", "openspace.time.setTime('2015-07-14T09:00:00.00'); openspace.setPropertyValue('PlutoProjection.renderable.clearAllProjections', true); openspace.setPropertyValue('Charon.renderable.clearAllProjections', true);") -openspace.bindKey("F10", "openspace.time.setTime('2015-07-14T10:00:00.00'); openspace.setPropertyValue('PlutoProjection.renderable.clearAllProjections', true); openspace.setPropertyValue('Charon.renderable.clearAllProjections', true);") -openspace.bindKey("F11", "openspace.time.setTime('2015-07-14T11:17:00.00'); openspace.setPropertyValue('PlutoProjection.renderable.clearAllProjections', true); openspace.setPropertyValue('Charon.renderable.clearAllProjections', true);") -openspace.bindKey("F12", "openspace.time.setTime('2015-07-14T12:45:00.00'); openspace.setPropertyValue('PlutoProjection.renderable.clearAllProjections', true); openspace.setPropertyValue('Charon.renderable.clearAllProjections', true);") - -openspace.bindKey("r", helper.property.invert('PlutoProjection.renderable.fk')) - -openspace.bindKey("KP_8", helper.property.increment('PlutoProjection.renderable.heightExaggeration', 2)) -openspace.bindKey("KP_2", helper.property.decrement('PlutoProjection.renderable.heightExaggeration', 2)) - -openspace.bindKey("KP_9", helper.property.increment('Charon.renderable.heightExaggeration', 2)) -openspace.bindKey("KP_3", helper.property.decrement('Charon.renderable.heightExaggeration', 2)) - - -openspace.bindKey("g", "openspace.time.setTime('2007-02-28T11:40:00.00'); openspace.time.setDeltaTime(1);") - -openspace.bindKey("h", "openspace.time.setTime('2015-07-14T10:00:00.00'); openspace.time.setDeltaTime(1); openspace.setPropertyValue('Interaction.coordinateSystem', 'Pluto');openspace.setPropertyValue('Interaction.origin', 'PlutoProjection'); openspace.printInfo('Changing Viewpoint to Pluto-in-center');") - -openspace.bindKey("q", helper.property.invert('SunMarker.renderable.enabled')) -openspace.bindKey("e", helper.property.invert('EarthMarker.renderable.enabled')) -openspace.bindKey("o", helper.property.invert('PlutoTrail.renderable.enabled')) - -openspace.bindKey("k", - helper.renderable.toggle('HydraText') .. helper.renderable.toggle('NixText') .. helper.renderable.toggle('KerberosText') .. helper.renderable.toggle('StyxText') +openspace.bindKey( + "a", + "openspace.setPropertyValue('Interaction.origin', 'NewHorizons')", + "Sets the focus of the camera on 'NewHorizons'." +) +openspace.bindKey( + "s", + "openspace.setPropertyValue('Interaction.origin', 'PlutoProjection')", + "Sets the focus of the camera on 'Pluto'" +) +openspace.bindKey( + "d", + "openspace.setPropertyValue('Interaction.origin', 'Charon')", + "Sets the focus of the camera on 'Charon'." +) +openspace.bindKey( + "z", + "openspace.setPropertyValue('Interaction.origin', 'JupiterProjection')", + "Sets the focus of the camera on 'Jupiter'." +) +openspace.bindKey( + "x", + "openspace.setPropertyValue('Interaction.origin', 'Europa')", + "Sets the focus of the camera on 'Europa'." ) -openspace.bindKey("j", helper.renderable.toggle('PlutoText')) -openspace.bindKey("l", helper.property.invert('Labels.renderable.performFading')) +openspace.bindKey( + "F8", + "openspace.setPropertyValue('PlutoProjection.renderable.ProjectionComponent.clearAllProjections', true);" .. + "openspace.setPropertyValue('Charon.renderable.ProjectionComponent.clearAllProjections', true);", + "Removes all image projections from Pluto and Charon." +) + +openspace.bindKey( + "F9", + "openspace.time.setTime('2015-07-14T09:00:00.00');" .. + "openspace.setPropertyValue('PlutoProjection.renderable.clearAllProjections', true);" .. + "openspace.setPropertyValue('Charon.renderable.clearAllProjections', true);", + "Jumps to the 14th of July 2015 at 0900 UTC and clears all projections." +) + +openspace.bindKey( + "KP_8", + helper.property.increment('PlutoProjection.renderable.heightExaggeration', 2), + "Increases the height map exaggeration on Pluto." +) +openspace.bindKey( + "KP_2", + helper.property.decrement('PlutoProjection.renderable.heightExaggeration', 2), + "Decreases the height map exaggeration on Pluto." +) +openspace.bindKey( + "KP_9", + helper.property.increment('Charon.renderable.heightExaggeration', 2), + "Increases the height map exaggeration on Charon." +) +openspace.bindKey( + "KP_3", + helper.property.decrement('Charon.renderable.heightExaggeration', 2), + "Decreases the height map exaggeration on Charon." +) + +openspace.bindKey( + "q", + helper.property.invert('SunMarker.renderable.enabled'), + "Toggles the visibility of the text marking the location of the Sun." +) +openspace.bindKey( + "e", + helper.property.invert('EarthMarker.renderable.enabled'), + "Toggles the visibility of the text marking the location of the Earth." +) +openspace.bindKey( + "o", + helper.property.invert('PlutoTrail.renderable.enabled'), + "Toggles the visibility of the trail behind Pluto." +) + +openspace.bindKey( + "j", + helper.renderable.toggle('PlutoText') .. helper.renderable.toggle('CharonText') .. + helper.renderable.toggle('HydraText') .. helper.renderable.toggle('NixText') .. + helper.renderable.toggle('KerberosText') .. helper.renderable.toggle('StyxText'), + "Toggles the visibility of the text labels of Pluto, Charon, Hydra, Nix, Kerberos, and Styx." +) + +openspace.bindKey( + "l", + helper.property.invert('Labels.renderable.performFading'), + "Toggles the visibility of the labels for the New Horizons instruments." +) openspace.bindKey("m", - helper.property.invert('NH_LORRI.renderable.solidDraw') .. helper.property.invert('NH_RALPH_LEISA.renderable.solidDraw') .. - helper.property.invert('NH_RALPH_MVIC_PAN1.renderable.solidDraw') .. helper.property.invert('NH_RALPH_MVIC_PAN2.renderable.solidDraw') .. - helper.property.invert('NH_RALPH_MVIC_RED.renderable.solidDraw') .. helper.property.invert('NH_RALPH_MVIC_BLUE.renderable.solidDraw') .. - helper.property.invert('NH_RALPH_MVIC_FT.renderable.solidDraw') .. helper.property.invert('NH_RALPH_MVIC_METHANE.renderable.solidDraw') .. - helper.property.invert('NH_RALPH_MVIC_NIR.renderable.solidDraw') .. helper.property.invert('NH_ALICE_AIRGLOW.renderable.solidDraw') .. - helper.property.invert('NH_ALICE_SOC.renderable.solidDraw') + helper.property.invert('NH_LORRI.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_LEISA.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_PAN1.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_PAN2.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_RED.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_BLUE.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_FT.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_METHANE.renderable.solidDraw') .. + helper.property.invert('NH_RALPH_MVIC_NIR.renderable.solidDraw') .. + helper.property.invert('NH_ALICE_AIRGLOW.renderable.solidDraw') .. + helper.property.invert('NH_ALICE_SOC.renderable.solidDraw'), + "Draws the instrument field of views in a solid color or as lines." ) -openspace.bindKey("t", helper.renderable.toggle('PlutoShadow') .. helper.renderable.toggle('CharonShadow')) +openspace.bindKey( + "t", + helper.renderable.toggle('PlutoShadow') .. helper.renderable.toggle('CharonShadow'), + "Toggles the visibility of the shadow visualization of Pluto and Charon." +) openspace.bindKey("p", - helper.property.invert('JupiterProjection.renderable.performProjection') .. helper.property.invert('Io.renderable.performProjection') .. - helper.property.invert('Ganymede.renderable.performProjection') .. helper.property.invert('Europa.renderable.performProjection') .. - helper.property.invert('Callisto.renderable.performProjection') .. helper.property.invert('PlutoProjection.renderable.performProjection') .. - helper.property.invert('Charon.renderable.performProjection') + helper.property.invert('JupiterProjection.renderable.performProjection') .. + helper.property.invert('Io.renderable.performProjection') .. + helper.property.invert('Ganymede.renderable.performProjection') .. + helper.property.invert('Europa.renderable.performProjection') .. + helper.property.invert('Callisto.renderable.performProjection') .. + helper.property.invert('PlutoProjection.renderable.performProjection') .. + helper.property.invert('Charon.renderable.performProjection'), + "Enables or disables the image projection on the different available objects." ) - -openspace.bindKey("c", "openspace.parallel.setAddress('130.236.142.51');openspace.parallel.setPassword('newhorizons-20150714');openspace.parallel.connect();") diff --git a/scripts/bind_keys_osirisrex.lua b/scripts/bind_keys_osirisrex.lua index 536a63cd1a..0f51347a88 100644 --- a/scripts/bind_keys_osirisrex.lua +++ b/scripts/bind_keys_osirisrex.lua @@ -7,27 +7,55 @@ dofile(openspace.absPath('${SCRIPTS}/common.lua')) --helper.setCommonKeys() -- Set focuses -openspace.bindKey("o", "openspace.setPropertyValue('Interaction.origin', 'OsirisRex')") -openspace.bindKey("b", "openspace.setPropertyValue('Interaction.origin', 'Bennu2')") +openspace.bindKey( + "o", + "openspace.setPropertyValue('Interaction.origin', 'OsirisRex')", + "Sets the focus of the camera on 'Osiris Rex'." +) +openspace.bindKey( + "b", + "openspace.setPropertyValue('Interaction.origin', 'BennuBarycenter')", + "Sets the focus of the camera on 'Bennu'." +) +openspace.bindKey( + "F6" , + "openspace.printInfo('Set time: Launch');openspace.time.setTime('2016 SEP 08 23:05:00');", + "Sets the time to the launch." +) +openspace.bindKey( + "F7", + "openspace.printInfo('Set time: Gravity Assist');openspace.time.setTime('2017 SEP 22 15:00:00');", + "Sets the time to the Earth gravity assist." +) +openspace.bindKey( + "F8", + "openspace.printInfo('Set time: Approach');openspace.time.setTime('2018-SEP-11 21:31:01.183');", + "Sets the time to the approach at Bennu." +) +openspace.bindKey( + "F9", + "openspace.printInfo('Set time: Preliminary Survey');openspace.time.setTime('2018-NOV-20 01:13:12.183');", + "Sets the time to the preliminary survey of Bennu." +) +openspace.bindKey( + "F10", + "openspace.printInfo('Set time: Orbital B');openspace.time.setTime('2019-APR-08 10:35:27.186');", + "Sets the time to the orbital B event." +) +openspace.bindKey( + "F11", + "openspace.printInfo('Set time: Recon');openspace.time.setTime('2019-MAY-25 03:50:31.195');", + "Sets the time to the recon event." +) --- Quickfix backjumps in Osiris rex -openspace.bindKey("F6" , "openspace.printInfo('Set time: Launch'); openspace.time.setTime('2016 SEP 08 23:05:00');") -openspace.bindKey("F7" , "openspace.printInfo('Set time: Gravity Assist'); openspace.time.setTime('2017 SEP 22 15:00:00');") -openspace.bindKey("F8" , "openspace.printInfo('Set time: Approach'); openspace.time.setTime('2018-SEP-11 21:31:01.183');") -openspace.bindKey("F9" , "openspace.printInfo('Set time: Preliminary Survey'); openspace.time.setTime('2018-NOV-20 01:13:12.183');") -openspace.bindKey("F10", "openspace.printInfo('Set time: Orbital B'); openspace.time.setTime('2019-APR-08 10:35:27.186');") -openspace.bindKey("F11", "openspace.printInfo('Set time: Recon'); openspace.time.setTime('2019-MAY-25 03:50:31.195');") --- OBS!! Avoid key F12 --- Pressing F12 triggers a breakpoint on AMNH Windows machine, with with the following stack trace: --- ntdll.dll!DbgBreakPoint() --- ntdll.dll!DbgUiRemoteBreakin() --- kernel32.dll!BaseThreadInitThunk() --- ntdll.dll!RtUserThreadStart() - -openspace.bindKey("F4", "openspace.scriptScheduler.clear(); openspace.scriptScheduler.load('${OPENSPACE_DATA}/scene/osirisrex/scheduled_scripts.lua');") - -openspace.bindKey("q", helper.property.invert('SunMarker.renderable.enabled')) -openspace.bindKey("e", helper.property.invert('EarthMarker.renderable.enabled')) - -openspace.bindKey("c", "openspace.parallel.setAddress('130.236.142.51');openspace.parallel.setPassword('osiris2016');openspace.parallel.connect();") +openspace.bindKey( + "q", + helper.property.invert('SunMarker.renderable.enabled'), + "Toggles the visibility of the text marking the location of the Sun." +) +openspace.bindKey( + "e", + helper.property.invert('EarthMarker.renderable.enabled'), + "Toggles the visibility of the text marking the location of the Earth." +) diff --git a/scripts/common.lua b/scripts/common.lua index 26d55949df..66ba39b3bb 100644 --- a/scripts/common.lua +++ b/scripts/common.lua @@ -15,27 +15,58 @@ helper.setCommonKeys = function() openspace.bindKeyLocal( "F1", "openspace.gui.toggle()", - "Toggles the visibility of the on-screen GUI" + "Toggles the visibility of the on-screen GUI." ) openspace.bindKeyLocal( "F2", helper.property.invert("RenderEngine.performanceMeasurements"), - "Toogles performance measurements that shows rendering time informations" + "Toogles performance measurements that shows rendering time informations." ) - openspace.bindKeyLocal("ESC", "openspace.toggleShutdown()") + openspace.bindKeyLocal( + "ESC", + "openspace.toggleShutdown()", + "Toggles the shutdown that will stop OpenSpace after a grace period. Press again to cancel the shutdown during this period." + ) - openspace.bindKeyLocal("PRINT_SCREEN", "openspace.takeScreenshot()") - openspace.bindKey("SPACE", "openspace.time.togglePause()") + openspace.bindKeyLocal( + "PRINT_SCREEN", + "openspace.takeScreenshot()", + "Saves the contents of the screen to a file in the working directory." + ) + openspace.bindKey( + "SPACE", + "openspace.time.togglePause()", + "Starts and stops the simulation time." + ) - openspace.bindKey("COMMA", "openspace.setRenderer('Framebuffer');") - openspace.bindKey("PERIOD", "openspace.setRenderer('ABuffer');") + openspace.bindKey( + "COMMA", + "openspace.setRenderer('Framebuffer');", + "Changes the currently used renderer to use the 'Framebuffer' implementation." + ) + openspace.bindKey( + "PERIOD", + "openspace.setRenderer('ABuffer');", + "Changes the currently used renderer to use the 'ABuffer' implementation." + ) + openspace.bindKeyLocal( + "f", + helper.property.invert('Interaction.rotationalFriction'), + "Toggles the rotational friction on the camera. If it is disabled, the camera rotates around the focus object indefinitely." + ) + openspace.bindKeyLocal( + "Shift+f", + helper.property.invert('Interaction.zoomFriction'), + "Toggles the zoom friction on the camera." + ) - openspace.bindKeyLocal("f", helper.property.invert('Interaction.rotationalFriction')) - openspace.bindKeyLocal("Shift+f", helper.property.invert('Interaction.zoomFriction')) - - openspace.bindKey("w", "openspace.toggleFade(3)") + openspace.bindKey( + "w", + "openspace.toggleFade(3)", + "Toggles the fade to black within 3 seconds or shows the rendering after 3 seconds." + ) end helper.setDeltaTimeKeys = function(t) @@ -78,12 +109,6 @@ helper.property.decrement = function(property, value) return helper.property.increment(property, -value) end --- Function that sets a property to a specify value -helper.property.set = function(property, value) - local escaped_property = "'" .. property .. "'" - return "openspace.setPropertyValue(" .. escaped_property .. ", " .. value .. ");" -end - -- Function that returns the string that enables/disables the renderable 'renderable' helper.renderable.toggle = function(renderable) return helper.property.invert(renderable .. ".renderable.enabled") From 4caa3d25baa7601ec2ba76d3128601bbff4c9d14 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 10:34:19 +0100 Subject: [PATCH 14/18] Add documentation to the rosetta scene keyboard bindings --- data/scene/rosetta.scene | 6 +-- modules/iswa/rendering/iswadatagroup.h | 53 ++++++++++++---------- scripts/bind_keys_rosetta.lua | 63 +++++++++++++++++++++----- 3 files changed, 81 insertions(+), 41 deletions(-) diff --git a/data/scene/rosetta.scene b/data/scene/rosetta.scene index befa637e83..b1b1b707bb 100644 --- a/data/scene/rosetta.scene +++ b/data/scene/rosetta.scene @@ -18,10 +18,6 @@ function preInitialization() -- Shadow flyby -- openspace.time.setTime("2015-02-14T12:00:00.000") - - -- openspace.time.setTime("2015-07-29T06:02:10.000") - -- openspace.time.setTime("2014 AUG 21 18:00:00") - -- openspace.time.setTime("2015 SEP 10 19:39:00") dofile(openspace.absPath('${SCRIPTS}/bind_keys_rosetta.lua')) end @@ -59,7 +55,7 @@ return { "earth", "mars", "jupiter/jupiter", - "saturn", + "saturn/saturn", "uranus", "neptune", "stars", diff --git a/modules/iswa/rendering/iswadatagroup.h b/modules/iswa/rendering/iswadatagroup.h index d08b16506a..83d259a562 100644 --- a/modules/iswa/rendering/iswadatagroup.h +++ b/modules/iswa/rendering/iswadatagroup.h @@ -1,32 +1,37 @@ /***************************************************************************************** -* * -* OpenSpace * -* * -* Copyright (c) 2014-2015 * -* * -* 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. * -****************************************************************************************/ + * * + * OpenSpace * + * * + * Copyright (c) 2014-2015 * + * * + * 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 __ISWADATAGROUP_H__ #define __ISWADATAGROUP_H__ + #include -namespace openspace{ -class IswaDataGroup : public IswaBaseGroup{ +#include + +namespace openspace { + +class IswaDataGroup : public IswaBaseGroup { public: IswaDataGroup(std::string name, std::string type); ~IswaDataGroup(); diff --git a/scripts/bind_keys_rosetta.lua b/scripts/bind_keys_rosetta.lua index a81ff43db5..0afe5063b6 100644 --- a/scripts/bind_keys_rosetta.lua +++ b/scripts/bind_keys_rosetta.lua @@ -12,18 +12,57 @@ helper.setDeltaTimeKeys({ 28800, 57600, 115200, 230400, 460800, 921600, 1843200, 3686400, 7372800, 14745600 }) -openspace.bindKey("a", "openspace.setPropertyValue('Interaction.origin', '67P')") -openspace.bindKey("s", "openspace.setPropertyValue('Interaction.origin', 'Rosetta')") +openspace.bindKey( + "a", + "openspace.setPropertyValue('Interaction.origin', '67P')", + "Sets the focus of the camera on '67P'." +) +openspace.bindKey( + "s", + "openspace.setPropertyValue('Interaction.origin', 'Rosetta')", + "Sets the focus of the camera on 'Rosetta'." +) --- openspace.bindKey("F5", "openspace.setPropertyValue('Interaction.coordinateSystem', 'Sun'); openspace.printInfo('Changing Viewpoint to Sun');"); -openspace.bindKey("F6", "openspace.setPropertyValue('Interaction.coordinateSystem', '67P'); openspace.printInfo('Changing Viewpoint to 67P');"); -openspace.bindKey("F7", "openspace.time.setTime('2014-08-15T03:05:18.101')"); -openspace.bindKey("F8", "openspace.setPropertyValue('67P.renderable.ProjectionComponent.clearAllProjections', true);"); +openspace.bindKey( + "F5", + "openspace.time.setTime('2014-08-01T03:05:18.101')", + "Jumps to the time of initial approach of Rosetta to 67P." +) +openspace.bindKey( + "F6", + "openspace.time.setTime('2014-11-12T08:20:00.00')", + "Jumps to the time when the Philae lander is released." +) +openspace.bindKey( + "F8", + "openspace.setPropertyValue('67P.renderable.ProjectionComponent.clearAllProjections', true)", + "Removes all image projections from 67P." +) -openspace.bindKey("i", helper.renderable.toggle('ImagePlaneRosetta')) -openspace.bindKey("q", helper.renderable.toggle('SunMarker')) -openspace.bindKey("e", helper.renderable.toggle('JupiterTrail') .. helper.renderable.toggle('SaturnTrail') .. helper.renderable.toggle('UranusTrail') .. helper.renderable.toggle('NeptuneTrail')) -openspace.bindKey("f", helper.renderable.toggle('PhilaeTrail')) +openspace.bindKey( + "i", + helper.renderable.toggle('ImagePlaneRosetta'), + "Toggles the visibility of the free floating image plane." +) +openspace.bindKey( + "q", + helper.renderable.toggle('SunMarker'), + "Toggles the visibility of the text marking the location of the Sun." +) +openspace.bindKey( + "e", + helper.renderable.toggle('JupiterTrail') .. helper.renderable.toggle('SaturnTrail') .. + helper.renderable.toggle('UranusTrail') .. helper.renderable.toggle('NeptuneTrail'), + "Toggles the visibility of all trails further from the Sun than 67P." +) +openspace.bindKey( + "f", + helper.renderable.toggle('PhilaeTrail'), + "Toggles the visibility of Philae's trail." +) -openspace.bindKeyLocal("h", "openspace.parallel.setAddress('127.0.0.1');openspace.parallel.setPort('25001');openspace.parallel.setPassword('test');openspace.parallel.connect();openspace.parallel.requestHostship('test');") -openspace.bindKeyLocal("c", "openspace.parallel.setAddress('127.0.0.1');openspace.parallel.setPort('25001');openspace.parallel.setPassword('test');openspace.parallel.connect();") +openspace.bindKey( + "p", + helper.property.invert('67P.renderable.ProjectionComponent.performProjection'), + "Enables or disables the image projection on 67P." +) From af7e43c66a0b3bfa2f86ff7913ec72bd095edb1c Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 11:06:40 +0100 Subject: [PATCH 15/18] Rename bind_keys.lua script file to bind_common_keys.lua Move SPICE kernel declaration from osirisrex.scene into the osirisrex mod file --- data/scene/atmosphereearth.scene | 2 +- data/scene/dawn.scene | 2 +- data/scene/default.scene | 14 +- data/scene/fieldlines.scene | 2 +- data/scene/globebrowsing.scene | 9 +- data/scene/juno.scene | 3 +- data/scene/newhorizons.scene | 12 +- data/scene/osirisrex.scene | 157 +------------------ data/scene/osirisrex/bennu/bennu.mod | 2 +- data/scene/osirisrex/osirisrex/osirisrex.mod | 152 ++++++++++++++++++ scripts/bind_common_keys.lua | 20 +++ scripts/bind_keys.lua | 20 --- scripts/bind_keys_newhorizons.lua | 3 +- scripts/bind_keys_osirisrex.lua | 10 +- scripts/bind_keys_rosetta.lua | 2 +- 15 files changed, 193 insertions(+), 217 deletions(-) create mode 100644 scripts/bind_common_keys.lua delete mode 100644 scripts/bind_keys.lua diff --git a/data/scene/atmosphereearth.scene b/data/scene/atmosphereearth.scene index bc120bbd57..914c040ca7 100644 --- a/data/scene/atmosphereearth.scene +++ b/data/scene/atmosphereearth.scene @@ -10,7 +10,7 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/pck00010.tpc") openspace.time.setTime(openspace.time.currentWallTime()) - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) + dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) end function postInitialization() diff --git a/data/scene/dawn.scene b/data/scene/dawn.scene index 74ad519767..cd16a8b8a0 100644 --- a/data/scene/dawn.scene +++ b/data/scene/dawn.scene @@ -10,7 +10,7 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/pck00010.tpc") openspace.time.setTime("2011 AUG 06 00:00:00") - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) + dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) end function postInitialization() diff --git a/data/scene/default.scene b/data/scene/default.scene index 62b0705b20..65cfc9d82c 100644 --- a/data/scene/default.scene +++ b/data/scene/default.scene @@ -10,7 +10,7 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/pck00010.tpc") openspace.time.setTime(openspace.time.currentWallTime()) - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) + dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) end @@ -21,7 +21,7 @@ function postInitialization() graphical settings for the renderables. ]]-- openspace.printInfo("Setting default values") - openspace.setPropertyValue("Sun.renderable.enab`led", true) + openspace.setPropertyValue("Sun.renderable.enabled", true) openspace.setPropertyValue("SunGlare.renderable.enabled", false) openspace.setPropertyValue("SunMarker.renderable.enabled", false) openspace.setPropertyValue("EarthMarker.renderable.enabled", false) @@ -35,17 +35,7 @@ function postInitialization() openspace.printInfo("Done setting default values") if openspace.modules.isLoaded("ISWA") then - openspace.iswa.addCdfFiles("${OPENSPACE_DATA}/cdflist.json"); - - --openspace.iswa.addCygnet(7); - - --openspace.iswa.addCygnet(-4,"Data","Gm"); - --openspace.iswa.addCygnet(-5,"Data","Gm"); - --openspace.iswa.addCygnet(-6,"Data","Gm"); - --openspace.iswa.addCygnet(-7,"Data","Gm"); - --openspace.iswa.addCygnet(-8,"Data","Gm"); - --openspace.iswa.addCygnet(-9,"Data","Gm"); end end diff --git a/data/scene/fieldlines.scene b/data/scene/fieldlines.scene index 43068d7b75..3cee4bf1e3 100644 --- a/data/scene/fieldlines.scene +++ b/data/scene/fieldlines.scene @@ -10,7 +10,7 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/pck00010.tpc") openspace.time.setTime("2015 JAN 01 12:00:00.000") - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) + dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) end function postInitialization() diff --git a/data/scene/globebrowsing.scene b/data/scene/globebrowsing.scene index f1d2bc3e15..e3cf050e34 100644 --- a/data/scene/globebrowsing.scene +++ b/data/scene/globebrowsing.scene @@ -10,17 +10,16 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/naif0011.tls") openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - openspace.time.setTime("2015 NOV 24 00:00:00") + openspace.time.setTime(openspace.time.currentWallTime()) openspace.time.setTime(openspace.time.currentWallTime()) - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) + dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) end function postInitialization() openspace.printInfo("Setting default values") openspace.setInteractionMode('GlobeBrowsing') - --openspace.restoreCameraStateFromFile("camera_lookat_planet.lua") openspace.setPropertyValue("MilkyWay.renderable.transparency", 0.55) openspace.setPropertyValue("MilkyWay.renderable.segments", 50) @@ -28,10 +27,8 @@ function postInitialization() openspace.setPropertyValue("Sun.renderable.enabled", true) openspace.setPropertyValue("SunGlare.renderable.enabled", false) openspace.setPropertyValue("SunMarker.renderable.enabled", false) - openspace.resetCameraDirection() - openspace.time.setDeltaTime(0) openspace.printInfo("Done setting default values") end @@ -53,7 +50,7 @@ return { "lodmercury", "sun", "stars", - "milkyway", + "milkyway", } } diff --git a/data/scene/juno.scene b/data/scene/juno.scene index 947900614d..ba664121c1 100755 --- a/data/scene/juno.scene +++ b/data/scene/juno.scene @@ -9,7 +9,6 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/pck00010.tpc") openspace.time.setTime("2016-07-05T10:05:00.00") - openspace.time.setDeltaTime(0) dofile(openspace.absPath('${SCRIPTS}/common.lua')) openspace.clearKeys() @@ -53,7 +52,7 @@ return { "earth", "mars", "jupiter", - "saturn", + "saturn/saturn", "uranus", "neptune", "stars", diff --git a/data/scene/newhorizons.scene b/data/scene/newhorizons.scene index 812f30ee3d..7d88727cba 100644 --- a/data/scene/newhorizons.scene +++ b/data/scene/newhorizons.scene @@ -14,16 +14,8 @@ function preInitialization() openspace.spice.loadKernel("${SPICE}/naif0011.tls") openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - -- openspace.time.setTime("2007-02-28T11:40:00.000") - - -- openspace.time.setTime("2015-07-08T15:57:45.00") - -- openspace.time.setTime("2015-07-12T07:41:00.00") - -- openspace.time.setTime("2015-07-12T15:43:00.00") - -- openspace.time.setTime("2015-07-12T22:19:20.00") - -- openspace.time.setTime("2015-07-13T20:59:00.00") - -- openspace.time.setTime("2015-07-14T02:41:55.00") openspace.time.setTime("2015-07-14T10:05:00.00") - openspace.time.setDeltaTime(0) + dofile(openspace.absPath('${SCRIPTS}/bind_keys_newhorizons.lua')) end @@ -61,7 +53,7 @@ return { "venus", "earth", "mars", - "saturn", + "saturn/saturn", "uranus", "neptune", "newhorizons/pluto", diff --git a/data/scene/osirisrex.scene b/data/scene/osirisrex.scene index d4ead85f7b..d394a59154 100644 --- a/data/scene/osirisrex.scene +++ b/data/scene/osirisrex.scene @@ -1,8 +1,5 @@ --- TextureResolution = "low" -TextureResolution = "med" --- TextureResolution = "high" +local KernelCase = 2 -- Right now we only have the image times for case 2 -local startTime = "2016 SEP 8 23:05:00.50" function preInitialization() --[[ @@ -12,161 +9,16 @@ function preInitialization() critical objects. ]]-- - -- Load Spice Kernels - openspace.spice.loadKernel("${OPENSPACE_DATA}/spice/de430_1850-2150.bsp") - - -- background - -- SCLK kernels needs to be loaded before CK kernels (and generally first) - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/sclk/ORX_SCLKSCET.00000.tsc") - - -- This cannot be loaded correctly for some reason! - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/dsk/RQ36mod.oct12_CCv0001.bds") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/fk/orx_v04.tf") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_lidar_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ocams_v03.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_otes_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_rexis_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_struct_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_navcam_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ola_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_ovirs_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/ik/orx_stowcam_v00.ti") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/lsk/naif0011.tls") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/pck/bennu_SPH250m.tpc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/pck/bennu_v10.tpc") - - -- Low res SPK - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160917_231024_pgaa3_day15m60_v1.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160914_231024_pgaa3_day12m60_v1.bsp") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa3_day06m60_v1.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/spk_orx_160908_231024_pgaa2_day06m60_v3.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa2_day06m60.bsp") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/OREX_20160908_M60_complete.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/OREX_20160904_M45_complete.bsp") - - -- SPK - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/de421.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/spk/sb-101955-76.bsp") - - -- Nominal_Profile_LowRes - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_600s_20180816T230000_20181119T010000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_NominalProfile_600s_20180816T230000_20181119T010000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_600s_20190108T000000_20190317T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_NominalProfile_600s_20190108T000000_20190317T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_600s_20181203T230000_20190109T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_NominalProfile_600s_20181203T230000_20190109T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_600s_20190316T000000_20190521T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_NominalProfile600s_20190316T000000_20190521T000000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_600s_20181119T230000_20181204T010000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_NominalProfile_600s_20181119T230000_20181204T010000.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_600s_20190519T000000_20190830T000000.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_NominalProfile_600s_20190519T000000_20190830T000000.bc") - - -- Nominal_Observations_Science - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/DustSearch_v1/Phase03_AP_DustSearch_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/PhaseFunction_v1/Phase03_AP_PhaseFunction_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_6.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_7.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_8.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_9_Forced4x4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/SpectraMap_v1/Phase03_AP_SpectraMap_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_1_v1_1a.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_2_v1_1a.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_6.bc") - - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_info.TXT") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/README.txt") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_v2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_v2.bc") - - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_4.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_5.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_6.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_7.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_1.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_2.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_3.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_1.a") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_2.a") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_3.a") - - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case02_0Latitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case05_20negLatitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case08_40negLatitude.wmv") - --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case11_60negLatitude.wmv") - - local case = 2 -- Right now we only have the image times for case 2 - - if case == 2 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case02.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_0Latitude.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_atl_19145_04.atf") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case02.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case02_0Latitude.bc") - elseif case == 5 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case05.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_20negLatitude.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_atl_19145_04.atf") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_NominalProfile.bc") - - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case05.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case05_20negLatitude.bc") - elseif case == 8 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case08_NominalProfile.bc") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case08.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case08_40negLatitude.bc") - elseif case == 11 then - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case11.bsp") - openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case11_60negLatitude.bc") - end - - -- Load planetary constants + openspace.spice.loadKernel("${SPICE}/naif0011.tls") openspace.spice.loadKernel("${SPICE}/pck00010.tpc") - dofile(openspace.absPath('${SCRIPTS}/bind_keys.lua')) dofile(openspace.absPath('${SCRIPTS}/bind_keys_osirisrex.lua')) --local startTime = "2019 APR 16 12:03:00.00" + openspace.time.setTime("2016 SEP 8 23:05:00.500") openspace.scriptScheduler.load("${OPENSPACE_DATA}/scene/osirisrex/scheduled_scripts.lua") - -- Removing the line below will cause all scripts prior to to be executed during initialization - -- openspace.scriptScheduler.skipTo(startTime); - end function postInitialization() @@ -194,9 +46,6 @@ function postInitialization() openspace.printInfo("Done setting default values") openspace.loadMission("${OPENSPACE_DATA}/scene/osirisrex/osirisrex/osirisrex.mission") - openspace.time.setTime(startTime) - openspace.time.setDeltaTime(0) - openspace.resetCameraDirection() end diff --git a/data/scene/osirisrex/bennu/bennu.mod b/data/scene/osirisrex/bennu/bennu.mod index cbbfc05ad3..5835657356 100644 --- a/data/scene/osirisrex/bennu/bennu.mod +++ b/data/scene/osirisrex/bennu/bennu.mod @@ -16,7 +16,7 @@ return { }, }, { - Name = "Bennu2", + Name = "Bennu", Parent = "BennuBarycenter", Renderable = { diff --git a/data/scene/osirisrex/osirisrex/osirisrex.mod b/data/scene/osirisrex/osirisrex/osirisrex.mod index d8dded5250..83b3432517 100644 --- a/data/scene/osirisrex/osirisrex/osirisrex.mod +++ b/data/scene/osirisrex/osirisrex/osirisrex.mod @@ -1,5 +1,156 @@ local BENNU_BODY = "2101955" +local CaseDependentKernels +if KernelCase == 2 then + CaseDependentKernels = { + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case02.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_0Latitude.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case02_atl_19145_04.atf", + + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case02.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case02_0Latitude.bc" + } +elseif KernelCase == 5 then + CaseDependentKernels = { + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/ORX_Recon_525mSortie_Case05.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_20negLatitude.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_atl_19145_04.atf", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case05_NominalProfile.bc", + + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case05.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case05_20negLatitude.bc" + } +elseif KernelCase == 8 then + CaseDependentKernels = { + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/525m_Sortie_v2/Recon_525mSortie_Case08_NominalProfile.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case08.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case08_40negLatitude.bc" + } +elseif KernelCase == 11 then + CaseDependentKernels = { + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/ORX_Recon_225mSortie_Case11.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Recon_225mSortie_Case11_60negLatitude.bc" + } +end + +local OsirisRexKernels = { + -- background + -- SCLK kernels needs to be loaded before CK kernels (and generally first) + "${SPICE}/OsirisRexKernels/background/sclk/ORX_SCLKSCET.00000.tsc", + + -- This cannot be loaded correctly for some reason! + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/background/dsk/RQ36mod.oct12_CCv0001.bds") + + "${SPICE}/OsirisRexKernels/background/fk/orx_v04.tf", + "${SPICE}/OsirisRexKernels/background/ik/orx_lidar_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_ocams_v03.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_otes_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_rexis_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_struct_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_navcam_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_ola_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_ovirs_v00.ti", + "${SPICE}/OsirisRexKernels/background/ik/orx_stowcam_v00.ti", + "${SPICE}/OsirisRexKernels/background/lsk/naif0011.tls", + "${SPICE}/OsirisRexKernels/background/pck/bennu_SPH250m.tpc", + "${SPICE}/OsirisRexKernels/background/pck/bennu_v10.tpc", + + -- Low res SPK + "${SPICE}/OsirisRexKernels/background/spk/orx_160917_231024_pgaa3_day15m60_v1.bsp", + "${SPICE}/OsirisRexKernels/background/spk/orx_160914_231024_pgaa3_day12m60_v1.bsp", + + "${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa3_day06m60_v1.bsp", + "${SPICE}/OsirisRexKernels/background/spk/spk_orx_160908_231024_pgaa2_day06m60_v3.bsp", + "${SPICE}/OsirisRexKernels/background/spk/orx_160908_231024_pgaa2_day06m60.bsp", + + "${SPICE}/OsirisRexKernels/background/spk/OREX_20160908_M60_complete.bsp", + "${SPICE}/OsirisRexKernels/background/spk/OREX_20160904_M45_complete.bsp", + + -- SPK + "${SPICE}/OsirisRexKernels/background/spk/de421.bsp", + "${SPICE}/OsirisRexKernels/background/spk/sb-101955-76.bsp", + + -- Nominal_Profile_LowRes + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_600s_20180816T230000_20181119T010000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Approach_NominalProfile_600s_20180816T230000_20181119T010000.bc", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_600s_20190108T000000_20190317T000000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_600s_20181203T230000_20190109T000000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalA_NominalProfile_600s_20181203T230000_20190109T000000.bc", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_600s_20190316T000000_20190521T000000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/DetailedSurvey_NominalProfile_600s_20190108T000000_20190317T000000.bc", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/OrbitalB_NominalProfile600s_20190316T000000_20190521T000000.bc", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_600s_20181119T230000_20181204T010000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/PrelimSurvey_NominalProfile_600s_20181119T230000_20181204T010000.bc", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_600s_20190519T000000_20190830T000000.bsp", + "${SPICE}/OsirisRexKernels/Nominal_Profile_LowRes/Recon_NominalProfile_600s_20190519T000000_20190830T000000.bc", + + -- Nominal_Observations_Science + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/DustSearch_v1/Phase03_AP_DustSearch_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/LightCurve_v1/Phase03_AP_LightCurve_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/NatSatSearch_v1/Phase03_AP_SatSearch_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/PhaseFunction_v1/Phase03_AP_PhaseFunction_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_3.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_4.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_5.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_6.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_7.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_8.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/ShapeModel_v1/Phase03_AP_ShapeModel_9_Forced4x4.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/03_Approach/SpectraMap_v1/Phase03_AP_SpectraMap_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_1_v1_1a.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/MapCamOLA_v1/Phase04_PS_MC_2_v1_1a.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_3.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/OLA_v1/Phase04_PS_OLA_Nominal_4.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_3.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_4.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_5.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/04_PrelimSurvey/PolyCam_v1/Phase04_PS_PolyCam_6.bc", + + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_info.TXT") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_info.TXT") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_info.TXT") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_info.TXT") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/README.txt") + + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19013_18_BBD1_v2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19014_16_BBD2_v2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19020_18_BBD3_v2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/BaseballDiamond_v2/atl_19021_19_BBD4_v2.bc", + + + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_3.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_4.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_5.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_6.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/EquatorialStations_v1/Phase06_DS_Equatorial_Stations_7.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/06_DetailedSurvey/PlumeSearch_v1/Phase06_DS_Plume_Search_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_1.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_2.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v1/Phase07_OB_CSS_Mapping_3.bc", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_1.a", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_2.a", + "${SPICE}/OsirisRexKernels/Nominal_Observations_Science/07_OrbitalB/CandidateSampleSite_v2/CSS_Mapping_3.a", + + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case02_0Latitude.wmv") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case05_20negLatitude.wmv") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case08_40negLatitude.wmv") + --openspace.spice.loadKernel("${SPICE}/OsirisRexKernels/Nominal_Observations_Science/08_Recon/225m_Sortie_v2/Case11_60negLatitude.wmv") + + KernelCase +} + + return { ------------------------ -- Osiris Rex -- @@ -30,6 +181,7 @@ return { Type = "SpiceTranslation", Body = "OSIRIS-REX", Observer = "SUN", + Kernels = OsirisRexKernels }, Rotation = { Type = "SpiceRotation", diff --git a/scripts/bind_common_keys.lua b/scripts/bind_common_keys.lua new file mode 100644 index 0000000000..3101b7945e --- /dev/null +++ b/scripts/bind_common_keys.lua @@ -0,0 +1,20 @@ +--[[ OpenSpace keybinding script ]]-- + +-- Load the common helper functions +dofile(openspace.absPath('${SCRIPTS}/common.lua')) + +openspace.clearKeys() +helper.setCommonKeys() +helper.setDeltaTimeKeys({ +-- 1 2 3 4 5 6 7 8 9 0 +-------------------------------------------------------------------------------------------------------------------------- +-- 1s 2s 5s 10s 30s 1m 2m 5m 10m 30m + 1, 2, 5, 10, 30, 60, 120, 300, 600, 1800, + +-- 1h 2h 3h 6h 12h 1d 2d 4d 1w 2w + 3600, 7200, 10800, 21600, 43200, 86400, 172800, 345600, 604800, 1209600, + +-- 1mo 2mo 3mo 6mo 1yr 2y 5y 10y 20y 50y + 2592000, 5184000, 7776000, 15552000, 31536000, 63072000, 157680000, 315360000, 630720000, 1576800000 +}) +-- OBS: One month (1mo) is approximated by 30 days. diff --git a/scripts/bind_keys.lua b/scripts/bind_keys.lua deleted file mode 100644 index 2574db6b05..0000000000 --- a/scripts/bind_keys.lua +++ /dev/null @@ -1,20 +0,0 @@ ---[[ OpenSpace keybinding script ]]-- - --- Load the common helper functions -dofile(openspace.absPath('${SCRIPTS}/common.lua')) - -openspace.clearKeys() -helper.setCommonKeys() -helper.setDeltaTimeKeys({ --- 1 2 3 4 5 6 7 8 9 0 --------------------------------------------------------------------------------------------------------------------------- --- 1s 2s 5s 10s 30s 1m 2m 5m 10m 30 min - 1, 2, 5, 10, 30, 60, 120, 300, 600, 1800, - --- 1h 2h 3h 6h 12h 1d 2d 4d 1w 2w - 3600, 7200, 10800, 21600, 43200, 86400, 172800, 345600, 604800, 1209600, - --- 1mo 2mo 3mo 6mo 1yr 2y 5y 10y 20y 50y - 2592000, 5184000, 7776000, 15552000, 31536000, 63072000, 157680000, 315360000, 630720000, 1576800000 -}) --- OBS: One month (1mo) is approximated by 30 days. diff --git a/scripts/bind_keys_newhorizons.lua b/scripts/bind_keys_newhorizons.lua index 096a22eb3a..4d0310a146 100644 --- a/scripts/bind_keys_newhorizons.lua +++ b/scripts/bind_keys_newhorizons.lua @@ -1,11 +1,10 @@ ---[[ OpenSpace keybinding script ]]-- +--[[ OpenSpace keybinding script loaded from the newhorizons.scene file ]]-- -- Load the common helper functions dofile(openspace.absPath('${SCRIPTS}/common.lua')) openspace.clearKeys() helper.setCommonKeys() - helper.setDeltaTimeKeys({ 1, 5, 10, 20, 40, 60, 120, 360, 540, 1080, 2160, 4320, 8640 diff --git a/scripts/bind_keys_osirisrex.lua b/scripts/bind_keys_osirisrex.lua index 0f51347a88..1963734dad 100644 --- a/scripts/bind_keys_osirisrex.lua +++ b/scripts/bind_keys_osirisrex.lua @@ -1,19 +1,17 @@ ---[[ OpenSpace keybinding script ]]-- +--[[ OpenSpace keybinding script loaded from the osirisrex.scene file ]]-- -- Load the common helper functions dofile(openspace.absPath('${SCRIPTS}/common.lua')) - ---openspace.clearKeys() ---helper.setCommonKeys() +dofile(openspace.absPath('${SCRIPTS}/bind_common_keys.lua')) -- Set focuses openspace.bindKey( - "o", + "a", "openspace.setPropertyValue('Interaction.origin', 'OsirisRex')", "Sets the focus of the camera on 'Osiris Rex'." ) openspace.bindKey( - "b", + "s", "openspace.setPropertyValue('Interaction.origin', 'BennuBarycenter')", "Sets the focus of the camera on 'Bennu'." ) diff --git a/scripts/bind_keys_rosetta.lua b/scripts/bind_keys_rosetta.lua index 0afe5063b6..5683217018 100644 --- a/scripts/bind_keys_rosetta.lua +++ b/scripts/bind_keys_rosetta.lua @@ -1,4 +1,4 @@ ---[[ OpenSpace keybinding script ]]-- +--[[ OpenSpace keybinding script loaded from the rosetta.scene file ]]-- -- This script sets the default keybindings and is executed at startup -- Load the common helper functions From 921f5060c4621691fb6934031eec3be9187256e4 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 13:12:26 +0100 Subject: [PATCH 16/18] Move mission scene files into their own subdirectory missions --- .gitignore | 60 ++-- data/scene/dawn.scene | 10 +- data/scene/juno.scene | 2 +- .../dawn/ceres/DawnKernels.torrent | Bin .../{ => missions}/dawn/ceres/ceres.data | 0 .../scene/{ => missions}/dawn/ceres/ceres.mod | 0 .../dawn/dawn/DawnKernels.torrent | Bin data/scene/{ => missions}/dawn/dawn/dawn.data | 0 data/scene/{ => missions}/dawn/dawn/dawn.mod | 0 .../dawn/vestaprojection/VestaComet.torrent | Bin .../dawn/vestaprojection/vestaprojection.data | 0 .../dawn/vestaprojection/vestaprojection.mod | 0 data/scene/{ => missions}/juno/juno/juno.mod | 288 +++++++++--------- .../jupiter/callisto/callisto.data | 0 .../newhorizons/jupiter/callisto/callisto.mod | 0 .../callisto/textures/Callisto-Text.png | Bin .../jupiter/callisto/textures/defaultProj.png | Bin .../newhorizons/jupiter/europa/europa.data | 0 .../newhorizons/jupiter/europa/europa.mod | 0 .../jupiter/europa/textures/Europa-Text.png | Bin .../jupiter/europa/textures/defaultProj.png | Bin .../jupiter/ganymede/ganymede.data | 0 .../newhorizons/jupiter/ganymede/ganymede.mod | 0 .../ganymede/textures/Ganymede-Text.png | Bin .../jupiter/ganymede/textures/defaultProj.png | Bin .../newhorizons/jupiter/io/io.data | 0 .../newhorizons/jupiter/io/io.mod | 0 .../jupiter/io/textures/Io-Text.png | Bin .../jupiter/ProjectionsOfInterest.torrent | 0 .../newhorizons/jupiter/jupiter/jupiter.data | 0 .../newhorizons/jupiter/jupiter/jupiter.mod | 2 +- .../jupiter/jupiter/textures/1.jpg | Bin .../jupiter/jupiter/textures/2.jpg | Bin .../jupiter/jupiter/textures/3.jpg | Bin .../jupiter/jupiter/textures/Jupiter-text.png | Bin .../jupiter/jupiter}/textures/defaultProj.png | Bin .../jupiter/jupiter/textures/defaultProj2.png | Bin .../jupiter/jupiter/textures/europaRise1.jpg | Bin .../jupiter/jupiter/textures/europaRise2.jpg | Bin .../jupiter/jupiter/textures/grid.jpg | Bin .../jupiter/jupiter/textures/jupiter.jpg | Bin .../jupiter/textures/jupiterFlipped.jpg | Bin .../jupiter/textures/jupiterFlipped_low.jpg | Bin .../lor_0034817584_0x630_sci_1.fit.jpg | Bin .../lor_0034817654_0x630_sci_1.fit.jpg | Bin .../textures/lor_0034817724_0x630_sci_1.jpg | Bin .../lor_0034817794_0x630_sci_1.fit.jpg | Bin .../jupiter/jupiter/textures/lorriTest1.jpg | Bin .../jupiter/jupiter/textures/lorriTest2.jpg | Bin .../jupiter/jupiter/textures/scope.png | Bin .../jupiter/jupiter/textures/show.jpg | Bin .../jupiter/jupiter/textures/show_3072.jpg | Bin .../jupiter/jupiter/textures/small.jpg | Bin .../jupiter/jupiter/textures/small.png | Bin .../jupiter/jupiter/textures/test.jpg | Bin .../newhorizons/NewHorizonsKernels.torrent | Bin .../newhorizons/jup260.bsp.torrent | Bin .../newhorizons/newhorizons/newhorizons.data | 0 .../newhorizons/newhorizons/newhorizons.mod | 3 +- .../newhorizonsfov/newhorizonsfov.mod | 0 .../newhorizonsfov/textures/glare.png | Bin .../newhorizonsfov}/textures/glare_blue.png | Bin .../newhorizons/pluto/charon/charon.data | 0 .../newhorizons/pluto/charon/charon.mod | 0 .../newhorizons/pluto/hydra/hydra.mod | 0 .../pluto/hydra/textures/Hydra-Text.png | Bin .../newhorizons/pluto/hydra/textures/gray.jpg | Bin .../newhorizons/pluto/kerberos/kerberos.mod | 0 .../pluto/kerberos/textures/Kerberos-Text.png | Bin .../pluto/kerberos/textures/gray.jpg | Bin .../newhorizons/pluto/nix/nix.mod | 0 .../pluto/nix/textures/Nix-Text.png | Bin .../newhorizons/pluto/nix/textures/gray.jpg | Bin .../newhorizons/pluto/pluto/pluto.data | 0 .../newhorizons/pluto/pluto/pluto.mod | 4 +- .../newhorizons/pluto/styx/styx.mod | 0 .../pluto/styx/textures/Styx-Text.png | Bin .../newhorizons/pluto/styx/textures/gray.jpg | Bin .../BaseballDiamond_PolyCam.txt | 0 ...urvey_EquatorialStations_Spectrometers.txt | 0 .../OrbitalB_Site08_PolyCamImages.txt | 0 .../Recon_225m_Equatorial_PolyCam.txt | 0 .../Recon_225m_Equatorial_spectrometers.txt | 0 .../Recon_525m_Equatorial_spectrometers.txt | 0 .../{ => missions}/osirisrex/bennu/bennu.data | 0 .../{ => missions}/osirisrex/bennu/bennu.mod | 0 .../osirisrex/OsirisRexKernels.torrent | 0 .../osirisrex/osirisrex/osirisrex.data | 0 .../osirisrex/osirisrex/osirisrex.mission | 0 .../osirisrex/osirisrex/osirisrex.mod | 0 .../osirisrex/spice_kernel_times.mission | 0 .../osirisrex/scheduled_scripts.lua | 0 .../scene/{ => missions}/rosetta/67P/67P.data | 0 data/scene/{ => missions}/rosetta/67P/67P.mod | 0 .../rosetta/67P/67P_rotated_5_130.obj.torrent | Bin .../rosetta/67P/rosettaimages.torrent | 0 .../rosetta/rosetta/Rosetta.torrent | Bin .../rosetta/rosetta/rosetta.data | 0 .../rosetta/rosetta/rosetta.mod | 0 data/scene/newhorizons.scene | 8 +- .../jupiter/jupiter/textures/defaultProj.png | Bin 5753 -> 0 bytes .../newhorizonsfov/textures/glare_blue.png | Bin 83570 -> 0 bytes .../newhorizonspath/newhorizonspath.mod | 19 -- .../newhorizonspath/textures/glare.png | Bin 86262 -> 0 bytes .../newhorizonspath/textures/glare_blue.png | Bin 83570 -> 0 bytes .../newhorizonstrail/newhorizonstrail.mod | 22 -- .../newhorizonstrail/textures/glare.png | Bin 86262 -> 0 bytes .../newhorizonstrail/textures/glare_blue.png | Bin 83570 -> 0 bytes data/scene/osirisrex.scene | 8 +- data/scene/rosetta.scene | 2 +- 110 files changed, 191 insertions(+), 237 deletions(-) rename data/scene/{ => missions}/dawn/ceres/DawnKernels.torrent (100%) rename data/scene/{ => missions}/dawn/ceres/ceres.data (100%) rename data/scene/{ => missions}/dawn/ceres/ceres.mod (100%) rename data/scene/{ => missions}/dawn/dawn/DawnKernels.torrent (100%) rename data/scene/{ => missions}/dawn/dawn/dawn.data (100%) rename data/scene/{ => missions}/dawn/dawn/dawn.mod (100%) rename data/scene/{ => missions}/dawn/vestaprojection/VestaComet.torrent (100%) rename data/scene/{ => missions}/dawn/vestaprojection/vestaprojection.data (100%) rename data/scene/{ => missions}/dawn/vestaprojection/vestaprojection.mod (100%) rename data/scene/{ => missions}/juno/juno/juno.mod (98%) rename data/scene/{ => missions}/newhorizons/jupiter/callisto/callisto.data (100%) rename data/scene/{ => missions}/newhorizons/jupiter/callisto/callisto.mod (100%) rename data/scene/{ => missions}/newhorizons/jupiter/callisto/textures/Callisto-Text.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/callisto/textures/defaultProj.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/europa/europa.data (100%) rename data/scene/{ => missions}/newhorizons/jupiter/europa/europa.mod (100%) rename data/scene/{ => missions}/newhorizons/jupiter/europa/textures/Europa-Text.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/europa/textures/defaultProj.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/ganymede/ganymede.data (100%) rename data/scene/{ => missions}/newhorizons/jupiter/ganymede/ganymede.mod (100%) rename data/scene/{ => missions}/newhorizons/jupiter/ganymede/textures/Ganymede-Text.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/ganymede/textures/defaultProj.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/io/io.data (100%) rename data/scene/{ => missions}/newhorizons/jupiter/io/io.mod (100%) rename data/scene/{ => missions}/newhorizons/jupiter/io/textures/Io-Text.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/ProjectionsOfInterest.torrent (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/jupiter.data (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/jupiter.mod (97%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/1.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/2.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/3.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/Jupiter-text.png (100%) rename data/scene/{newhorizons/jupiter/io => missions/newhorizons/jupiter/jupiter}/textures/defaultProj.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/defaultProj2.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/europaRise1.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/europaRise2.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/grid.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/jupiter.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/jupiterFlipped.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/jupiterFlipped_low.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lor_0034817584_0x630_sci_1.fit.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lor_0034817654_0x630_sci_1.fit.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lor_0034817724_0x630_sci_1.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lor_0034817794_0x630_sci_1.fit.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lorriTest1.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/lorriTest2.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/scope.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/show.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/show_3072.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/small.jpg (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/small.png (100%) rename data/scene/{ => missions}/newhorizons/jupiter/jupiter/textures/test.jpg (100%) rename data/scene/{ => missions}/newhorizons/newhorizons/NewHorizonsKernels.torrent (100%) rename data/scene/{ => missions}/newhorizons/newhorizons/jup260.bsp.torrent (100%) rename data/scene/{ => missions}/newhorizons/newhorizons/newhorizons.data (100%) rename data/scene/{ => missions}/newhorizons/newhorizons/newhorizons.mod (99%) rename data/scene/{ => missions}/newhorizons/newhorizonsfov/newhorizonsfov.mod (100%) rename data/scene/{ => missions}/newhorizons/newhorizonsfov/textures/glare.png (100%) rename data/scene/{dawn/dawn => missions/newhorizons/newhorizonsfov}/textures/glare_blue.png (100%) rename data/scene/{ => missions}/newhorizons/pluto/charon/charon.data (100%) rename data/scene/{ => missions}/newhorizons/pluto/charon/charon.mod (100%) rename data/scene/{ => missions}/newhorizons/pluto/hydra/hydra.mod (100%) rename data/scene/{ => missions}/newhorizons/pluto/hydra/textures/Hydra-Text.png (100%) rename data/scene/{ => missions}/newhorizons/pluto/hydra/textures/gray.jpg (100%) rename data/scene/{ => missions}/newhorizons/pluto/kerberos/kerberos.mod (100%) rename data/scene/{ => missions}/newhorizons/pluto/kerberos/textures/Kerberos-Text.png (100%) rename data/scene/{ => missions}/newhorizons/pluto/kerberos/textures/gray.jpg (100%) rename data/scene/{ => missions}/newhorizons/pluto/nix/nix.mod (100%) rename data/scene/{ => missions}/newhorizons/pluto/nix/textures/Nix-Text.png (100%) rename data/scene/{ => missions}/newhorizons/pluto/nix/textures/gray.jpg (100%) rename data/scene/{ => missions}/newhorizons/pluto/pluto/pluto.data (100%) rename data/scene/{ => missions}/newhorizons/pluto/pluto/pluto.mod (97%) rename data/scene/{ => missions}/newhorizons/pluto/styx/styx.mod (100%) rename data/scene/{ => missions}/newhorizons/pluto/styx/textures/Styx-Text.png (100%) rename data/scene/{ => missions}/newhorizons/pluto/styx/textures/gray.jpg (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/BaseballDiamond_PolyCam.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/DetailedSurvey_EquatorialStations_Spectrometers.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/OrbitalB_Site08_PolyCamImages.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_PolyCam.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_spectrometers.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/InstrumentTimes/Recon_525m_Equatorial_spectrometers.txt (100%) rename data/scene/{ => missions}/osirisrex/bennu/bennu.data (100%) rename data/scene/{ => missions}/osirisrex/bennu/bennu.mod (100%) rename data/scene/{ => missions}/osirisrex/osirisrex/OsirisRexKernels.torrent (100%) rename data/scene/{ => missions}/osirisrex/osirisrex/osirisrex.data (100%) rename data/scene/{ => missions}/osirisrex/osirisrex/osirisrex.mission (100%) rename data/scene/{ => missions}/osirisrex/osirisrex/osirisrex.mod (100%) rename data/scene/{ => missions}/osirisrex/osirisrex/spice_kernel_times.mission (100%) rename data/scene/{ => missions}/osirisrex/scheduled_scripts.lua (100%) rename data/scene/{ => missions}/rosetta/67P/67P.data (100%) rename data/scene/{ => missions}/rosetta/67P/67P.mod (100%) rename data/scene/{ => missions}/rosetta/67P/67P_rotated_5_130.obj.torrent (100%) rename data/scene/{ => missions}/rosetta/67P/rosettaimages.torrent (100%) rename data/scene/{ => missions}/rosetta/rosetta/Rosetta.torrent (100%) rename data/scene/{ => missions}/rosetta/rosetta/rosetta.data (100%) rename data/scene/{ => missions}/rosetta/rosetta/rosetta.mod (100%) delete mode 100644 data/scene/newhorizons/jupiter/jupiter/textures/defaultProj.png delete mode 100644 data/scene/newhorizons/newhorizonsfov/textures/glare_blue.png delete mode 100644 data/scene/newhorizons/newhorizonspath/newhorizonspath.mod delete mode 100644 data/scene/newhorizons/newhorizonspath/textures/glare.png delete mode 100644 data/scene/newhorizons/newhorizonspath/textures/glare_blue.png delete mode 100644 data/scene/newhorizons/newhorizonstrail/newhorizonstrail.mod delete mode 100644 data/scene/newhorizons/newhorizonstrail/textures/glare.png delete mode 100644 data/scene/newhorizons/newhorizonstrail/textures/glare_blue.png diff --git a/.gitignore b/.gitignore index eed900b2fe..6d74e0d3f1 100644 --- a/.gitignore +++ b/.gitignore @@ -34,17 +34,8 @@ log.html ScriptLog.txt data/scene/atmosphereearth/textures -data/scene/dawn/ceres/textures -data/scene/dawn/dawn/obj -data/scene/dawn/dawn/textures -data/scene/dawn/vestaprojection/textures -data/scene/dawn/vestaprojection/VestaComet data/scene/debugglobe/textures data/scene/earth/textures -data/scene/juno/juno/Juno.mtl -data/scene/juno/juno/Juno.obj -data/scene/juno/juno/spice -data/scene/juno/juno/textures data/scene/jupiter/callisto/textures data/scene/jupiter/europa/textures data/scene/jupiter/ganymede/textures @@ -54,24 +45,38 @@ data/scene/mars/textures data/scene/mercury/textures data/scene/milkyway/textures data/scene/milkyway-eso/textures +data/scene/missions/dawn/ceres/textures +data/scene/missions/dawn/dawn/obj +data/scene/missions/dawn/dawn/textures +data/scene/missions/dawn/vestaprojection/textures +data/scene/missions/dawn/vestaprojection/VestaComet +data/scene/missions/juno/juno/Juno.mtl +data/scene/missions/juno/juno/Juno.obj +data/scene/missions/juno/juno/spice +data/scene/missions/juno/juno/textures +data/scene/missions/newhorizons/jupiter/callisto/textures +data/scene/missions/newhorizons/jupiter/europa/textures +data/scene/missions/newhorizons/jupiter/ganymede/textures +data/scene/missions/newhorizons/jupiter/io/textures +data/scene/missions/newhorizons/jupiter/jupiter/ProjectionsOfInterest +data/scene/missions/newhorizons/newhorizons/models +data/scene/missions/newhorizons/newhorizons/textures +data/scene/missions/newhorizons/pluto/charon/textures +data/scene/missions/newhorizons/pluto/pluto/assets +data/scene/missions/newhorizons/pluto/pluto/full_images +data/scene/missions/newhorizons/pluto/pluto/images +data/scene/missions/newhorizons/pluto/pluto/textures +data/scene/missions/osirisrex/bennu/models +data/scene/missions/osirisrex/bennu/textures +data/scene/missions/osirisrex/osirisrex/models +data/scene/missions/osirisrex/osirisrex/textures +data/scene/missions/rosetta/67P/obj +data/scene/missions/rosetta/67P/rosettaimages +data/scene/missions/rosetta/67P/textures +data/scene/missions/rosetta/rosetta/rosetta +data/scene/missions/rosetta/rosetta/textures data/scene/moon/textures data/scene/neptune/textures -data/scene/newhorizons/jupiter/callisto/textures -data/scene/newhorizons/jupiter/europa/textures -data/scene/newhorizons/jupiter/ganymede/textures -data/scene/newhorizons/jupiter/io/textures -data/scene/newhorizons/jupiter/jupiter/ProjectionsOfInterest -data/scene/newhorizons/newhorizons/models -data/scene/newhorizons/newhorizons/textures -data/scene/newhorizons/pluto/charon/textures -data/scene/newhorizons/pluto/pluto/assets -data/scene/newhorizons/pluto/pluto/full_images -data/scene/newhorizons/pluto/pluto/images -data/scene/newhorizons/pluto/pluto/textures -data/scene/osirisrex/bennu/models -data/scene/osirisrex/bennu/textures -data/scene/osirisrex/osirisrex/models -data/scene/osirisrex/osirisrex/textures data/scene/pluto/textures data/scene/saturn/dione/textures data/scene/saturn/enceladus/textures @@ -81,11 +86,6 @@ data/scene/saturn/rhea/textures data/scene/saturn/saturn/textures data/scene/saturn/tethys/textures data/scene/saturn/titan/textures -data/scene/rosetta/67P/obj -data/scene/rosetta/67P/rosettaimages -data/scene/rosetta/67P/textures -data/scene/rosetta/rosetta/rosetta -data/scene/rosetta/rosetta/textures data/scene/stars/colorbv.cmap data/scene/stars/speck data/scene/stars/textures diff --git a/data/scene/dawn.scene b/data/scene/dawn.scene index cd16a8b8a0..6ae70e3fb9 100644 --- a/data/scene/dawn.scene +++ b/data/scene/dawn.scene @@ -46,18 +46,14 @@ return { "venus", "earth", "mars", - "jupiter", - "saturn", + "jupiter/jupiter", + "saturn/saturn", "uranus", "neptune", "pluto", "stars", "milkyway", - "rosetta", - "67P", - "dawn", - "vestaprojection", - "ceres" + "missions/dawn" } } diff --git a/data/scene/juno.scene b/data/scene/juno.scene index ba664121c1..f63276e744 100755 --- a/data/scene/juno.scene +++ b/data/scene/juno.scene @@ -57,7 +57,7 @@ return { "neptune", "stars", "milkyway", - "juno" + "missions/juno" } } diff --git a/data/scene/dawn/ceres/DawnKernels.torrent b/data/scene/missions/dawn/ceres/DawnKernels.torrent similarity index 100% rename from data/scene/dawn/ceres/DawnKernels.torrent rename to data/scene/missions/dawn/ceres/DawnKernels.torrent diff --git a/data/scene/dawn/ceres/ceres.data b/data/scene/missions/dawn/ceres/ceres.data similarity index 100% rename from data/scene/dawn/ceres/ceres.data rename to data/scene/missions/dawn/ceres/ceres.data diff --git a/data/scene/dawn/ceres/ceres.mod b/data/scene/missions/dawn/ceres/ceres.mod similarity index 100% rename from data/scene/dawn/ceres/ceres.mod rename to data/scene/missions/dawn/ceres/ceres.mod diff --git a/data/scene/dawn/dawn/DawnKernels.torrent b/data/scene/missions/dawn/dawn/DawnKernels.torrent similarity index 100% rename from data/scene/dawn/dawn/DawnKernels.torrent rename to data/scene/missions/dawn/dawn/DawnKernels.torrent diff --git a/data/scene/dawn/dawn/dawn.data b/data/scene/missions/dawn/dawn/dawn.data similarity index 100% rename from data/scene/dawn/dawn/dawn.data rename to data/scene/missions/dawn/dawn/dawn.data diff --git a/data/scene/dawn/dawn/dawn.mod b/data/scene/missions/dawn/dawn/dawn.mod similarity index 100% rename from data/scene/dawn/dawn/dawn.mod rename to data/scene/missions/dawn/dawn/dawn.mod diff --git a/data/scene/dawn/vestaprojection/VestaComet.torrent b/data/scene/missions/dawn/vestaprojection/VestaComet.torrent similarity index 100% rename from data/scene/dawn/vestaprojection/VestaComet.torrent rename to data/scene/missions/dawn/vestaprojection/VestaComet.torrent diff --git a/data/scene/dawn/vestaprojection/vestaprojection.data b/data/scene/missions/dawn/vestaprojection/vestaprojection.data similarity index 100% rename from data/scene/dawn/vestaprojection/vestaprojection.data rename to data/scene/missions/dawn/vestaprojection/vestaprojection.data diff --git a/data/scene/dawn/vestaprojection/vestaprojection.mod b/data/scene/missions/dawn/vestaprojection/vestaprojection.mod similarity index 100% rename from data/scene/dawn/vestaprojection/vestaprojection.mod rename to data/scene/missions/dawn/vestaprojection/vestaprojection.mod diff --git a/data/scene/juno/juno/juno.mod b/data/scene/missions/juno/juno/juno.mod similarity index 98% rename from data/scene/juno/juno/juno.mod rename to data/scene/missions/juno/juno/juno.mod index ec95c0c83f..12c2d45131 100644 --- a/data/scene/juno/juno/juno.mod +++ b/data/scene/missions/juno/juno/juno.mod @@ -1,144 +1,144 @@ -return { - -- New Horizons Body module - { - Name = "Juno", - -- Parent = "PlutoBarycenter", - -- Parent = "JupiterBarycenter", - Parent = "JupiterBarycenter", - Renderable = { - Type = "RenderableModel", - Body = "JUNO", - Geometry = { - Type = "MultiModelGeometry", - GeometryFile = "Juno.obj", - Magnification = 4, - }, - Textures = { - Type = "simple", - Color = "textures/gray.png", - }, - Rotation = { - Source = "JUNO_SPACECRAFT", - Destination = "GALACTIC", - ModelTransform = { - 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, - 0.0, -1.0, 0.0 - } - }, - }, - - Ephemeris = { - Type = "Spice", - Body = "JUNO", - Observer = "JUPITER BARYCENTER", - Kernels = { - "spice/JNO_SCLKSCET.00039.tsc", - "spice/juno_jade_v00.ti", - "spice/juno_jedi_v00.ti", - "spice/juno_jiram_v01.ti", - "spice/juno_junocam_v00.ti", - "spice/juno_mag_v00.ti", - "spice/juno_mwr_v01.ti", - "spice/juno_struct_v01.ti", - "spice/juno_uvs_v00.ti", - "spice/juno_v08.tf", - "spice/juno_waves_v00.ti", - "spice/juno_mwr_v01.ti", - "spice/spk_merge_110805_171017_130515.bsp", - "spice/ck/juno_sc_prl_110930_111028_jc003c01_v01.bc", - "spice/ck/juno_sc_prl_111028_111125_jc004b00_v01.bc", - "spice/ck/juno_sc_prl_111125_111223_jc005b00_v01.bc", - "spice/ck/juno_sc_prl_111223_120127_jc006a02_v01.bc", - "spice/ck/juno_sc_prl_120127_120217_jc007a00_v01.bc", - "spice/ck/juno_sc_prl_120217_120316_jc008b00_v02.bc", - "spice/ck/juno_sc_prl_120316_120413_jc009a00_v01.bc", - "spice/ck/juno_sc_prl_120413_120511_jc010a04_v01.bc", - "spice/ck/juno_sc_prl_120511_120608_jc011a01_v02.bc", - "spice/ck/juno_sc_prl_120608_120706_jc012b01_v01.bc", - "spice/ck/juno_sc_prl_120706_120802_jc013a01_v01.bc", - "spice/ck/juno_sc_prl_120802_120824_jc014b01_v01.bc", - "spice/ck/juno_sc_prl_120824_120928_jc015m00_v01.bc", - "spice/ck/juno_sc_prl_120919_120928_jc015o00_v01.bc", - "spice/ck/juno_sc_prl_120928_121026_jc016c03_v01.bc", - "spice/ck/juno_sc_prl_121026_121123_jc017a01_v01.bc", - "spice/ck/juno_sc_prl_121123_121221_jc018b01_v01.bc", - "spice/ck/juno_sc_prl_121221_130118_jc019a01_v01.bc", - "spice/ck/juno_sc_prl_130118_130215_jc020b01_v01.bc", - "spice/ck/juno_sc_prl_130315_130412_jc022b01_v01.bc", - "spice/ck/juno_sc_prl_130412_130510_jc023b03_v01.bc", - "spice/ck/juno_sc_prl_130510_130607_jc024a01_v01.bc", - "spice/ck/juno_sc_prl_130607_130705_jc025a00_v01.bc", - "spice/ck/juno_sc_prl_130705_130802_jc026a01_v01.bc", - "spice/ck/juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc", - "spice/ck/juno_sc_prl_130802_130830_jc027a02_v01.bc", - "spice/ck/juno_sc_prl_130830_130927_jc028a01_v01.bc", - "spice/ck/juno_sc_prl_130926_131025_jc029a00_v01.bc", - "spice/ck/juno_sc_prl_130927_131025_jc029c01_v01.bc", - "spice/ck/juno_sc_prl_131022_131025_jc029f00_v01.bc", - "spice/ck/juno_sc_prl_131025_131122_jc030b04_v01.bc", - "spice/ck/juno_sc_prl_131122_131220_jc031b01_v01.bc", - "spice/ck/juno_sc_prl_131220_140124_jc032a01_v01.bc", - "spice/ck/juno_sc_prl_140124_140214_jc033a01_v01.bc", - "spice/ck/juno_sc_prl_140214_140314_jc034b01_v01.bc", - "spice/ck/juno_sc_prl_140314_140411_jc035a01_v01.bc", - "spice/ck/juno_sc_prl_140411_140509_jc036b01_v01.bc", - "spice/ck/juno_sc_prl_140509_140606_jc037b02_v01.bc", - "spice/ck/juno_sc_prl_140606_140704_jc038a01_v01.bc", - "spice/ck/juno_sc_prl_140704_140801_jc039b01_v01.bc", - "spice/ck/juno_sc_prl_140801_140829_jc040a01_v01.bc", - "spice/ck/juno_sc_prl_140829_140926_jc041a01_v01.bc", - "spice/ck/juno_sc_prl_140926_141024_jc042a01_v01.bc", - "spice/ck/juno_sc_prl_141024_141121_jc043a01_v01.bc", - "spice/ck/juno_sc_prl_141105_141121_jc043m01_v01.bc", - "spice/ck/juno_sc_prl_141107_141121_jc043s01_v01.bc", - "spice/ck/juno_sc_prl_141121_141219_jc044a01_v01.bc", - "spice/ck/juno_sc_prl_141219_150123_jc045a01_v01.bc", - "spice/ck/juno_sc_prl_150123_150213_jc046a01_v01.bc", - "spice/ck/juno_sc_prl_150213_150313_jc047a01_v01.bc", - "spice/ck/juno_sc_prl_150312_150409_jc048a01_v01.bc", - "spice/ck/juno_sc_prl_150410_150508_jc049a01_v01.bc", - "spice/ck/juno_sc_prl_150508_150605_jc050a01_v01.bc", - "spice/ck/juno_sc_prl_150605_150703_jc051a01_v01.bc", - "spice/ck/juno_sc_prl_150703_150731_jc052a01_v01.bc", - "spice/ck/juno_sc_prl_150731_150828_jc053a01_v01.bc", - "spice/ck/juno_sc_prl_150805_150828_jc053m00_v01.bc", - "spice/ck/juno_sc_prl_150807_150828_jc053s00_v01.bc", - "spice/ck/juno_sc_prl_150828_150924_jc054a00_v01.bc", - "spice/ck/juno_sc_prl_150924_151023_jc055a00_v01.bc", - "spice/ck/juno_sc_prl_151023_151120_jc056a00_v01.bc", - "spice/ck/juno_sc_prl_151120_151218_jc057a00_v01.bc", - "spice/ck/juno_sc_prl_151218_160115_jc058a00_v01.bc", - "spice/ck/juno_sc_prl_160115_160212_jc059a00_v01.bc", - "spice/ck/juno_sc_prl_160212_160311_jc060a00_v01.bc", - "spice/ck/juno_sc_prl_160311_160408_jc061a00_v01.bc", - "spice/ck/juno_sc_prl_160408_160506_jc062a00_v01.bc", - "spice/ck/juno_sc_prl_160506_160603_jc063a00_v01.bc", - "spice/ck/juno_sc_prl_160603_160630_jc064a00_v01.bc", - "spice/ck/juno_sc_prl_160708_160729_jm0001rp_v02.bc", - "spice/ck/juno_sc_prl_160729_160826_jm0002rp_v01.bc", - "spice/ck/juno_sc_prl_161115_161213_jx0405rp_v01.bc" - } - } - }, - --NewHorizonsTrail module - { - Name = "JunoTrail", - Parent = "JupiterBarycenter", - Renderable = { - Type = "RenderableTrail", - Body = "JUNO", - Frame = "GALACTIC", - Observer = "JUPITER BARYCENTER", - RGB = { 0.70,0.50,0.20 }, - TropicalOrbitPeriod = 394250.0, - EarthOrbitRatio = 4.5, - DayLength = 9.9259, - TimeStamps = false, - Textures = { - Type = "simple", - Color = "textures/glare_blue.png", - }, - }, - }, - } +return { + -- New Horizons Body module + { + Name = "Juno", + -- Parent = "PlutoBarycenter", + -- Parent = "JupiterBarycenter", + Parent = "JupiterBarycenter", + Renderable = { + Type = "RenderableModel", + Body = "JUNO", + Geometry = { + Type = "MultiModelGeometry", + GeometryFile = "Juno.obj", + Magnification = 4, + }, + Textures = { + Type = "simple", + Color = "textures/gray.png", + }, + Rotation = { + Source = "JUNO_SPACECRAFT", + Destination = "GALACTIC", + ModelTransform = { + 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, + 0.0, -1.0, 0.0 + } + }, + }, + + Ephemeris = { + Type = "Spice", + Body = "JUNO", + Observer = "JUPITER BARYCENTER", + Kernels = { + "spice/JNO_SCLKSCET.00039.tsc", + "spice/juno_jade_v00.ti", + "spice/juno_jedi_v00.ti", + "spice/juno_jiram_v01.ti", + "spice/juno_junocam_v00.ti", + "spice/juno_mag_v00.ti", + "spice/juno_mwr_v01.ti", + "spice/juno_struct_v01.ti", + "spice/juno_uvs_v00.ti", + "spice/juno_v08.tf", + "spice/juno_waves_v00.ti", + "spice/juno_mwr_v01.ti", + "spice/spk_merge_110805_171017_130515.bsp", + "spice/ck/juno_sc_prl_110930_111028_jc003c01_v01.bc", + "spice/ck/juno_sc_prl_111028_111125_jc004b00_v01.bc", + "spice/ck/juno_sc_prl_111125_111223_jc005b00_v01.bc", + "spice/ck/juno_sc_prl_111223_120127_jc006a02_v01.bc", + "spice/ck/juno_sc_prl_120127_120217_jc007a00_v01.bc", + "spice/ck/juno_sc_prl_120217_120316_jc008b00_v02.bc", + "spice/ck/juno_sc_prl_120316_120413_jc009a00_v01.bc", + "spice/ck/juno_sc_prl_120413_120511_jc010a04_v01.bc", + "spice/ck/juno_sc_prl_120511_120608_jc011a01_v02.bc", + "spice/ck/juno_sc_prl_120608_120706_jc012b01_v01.bc", + "spice/ck/juno_sc_prl_120706_120802_jc013a01_v01.bc", + "spice/ck/juno_sc_prl_120802_120824_jc014b01_v01.bc", + "spice/ck/juno_sc_prl_120824_120928_jc015m00_v01.bc", + "spice/ck/juno_sc_prl_120919_120928_jc015o00_v01.bc", + "spice/ck/juno_sc_prl_120928_121026_jc016c03_v01.bc", + "spice/ck/juno_sc_prl_121026_121123_jc017a01_v01.bc", + "spice/ck/juno_sc_prl_121123_121221_jc018b01_v01.bc", + "spice/ck/juno_sc_prl_121221_130118_jc019a01_v01.bc", + "spice/ck/juno_sc_prl_130118_130215_jc020b01_v01.bc", + "spice/ck/juno_sc_prl_130315_130412_jc022b01_v01.bc", + "spice/ck/juno_sc_prl_130412_130510_jc023b03_v01.bc", + "spice/ck/juno_sc_prl_130510_130607_jc024a01_v01.bc", + "spice/ck/juno_sc_prl_130607_130705_jc025a00_v01.bc", + "spice/ck/juno_sc_prl_130705_130802_jc026a01_v01.bc", + "spice/ck/juno_sc_prl_130726_131020_jx024a02_EFB_v03.bc", + "spice/ck/juno_sc_prl_130802_130830_jc027a02_v01.bc", + "spice/ck/juno_sc_prl_130830_130927_jc028a01_v01.bc", + "spice/ck/juno_sc_prl_130926_131025_jc029a00_v01.bc", + "spice/ck/juno_sc_prl_130927_131025_jc029c01_v01.bc", + "spice/ck/juno_sc_prl_131022_131025_jc029f00_v01.bc", + "spice/ck/juno_sc_prl_131025_131122_jc030b04_v01.bc", + "spice/ck/juno_sc_prl_131122_131220_jc031b01_v01.bc", + "spice/ck/juno_sc_prl_131220_140124_jc032a01_v01.bc", + "spice/ck/juno_sc_prl_140124_140214_jc033a01_v01.bc", + "spice/ck/juno_sc_prl_140214_140314_jc034b01_v01.bc", + "spice/ck/juno_sc_prl_140314_140411_jc035a01_v01.bc", + "spice/ck/juno_sc_prl_140411_140509_jc036b01_v01.bc", + "spice/ck/juno_sc_prl_140509_140606_jc037b02_v01.bc", + "spice/ck/juno_sc_prl_140606_140704_jc038a01_v01.bc", + "spice/ck/juno_sc_prl_140704_140801_jc039b01_v01.bc", + "spice/ck/juno_sc_prl_140801_140829_jc040a01_v01.bc", + "spice/ck/juno_sc_prl_140829_140926_jc041a01_v01.bc", + "spice/ck/juno_sc_prl_140926_141024_jc042a01_v01.bc", + "spice/ck/juno_sc_prl_141024_141121_jc043a01_v01.bc", + "spice/ck/juno_sc_prl_141105_141121_jc043m01_v01.bc", + "spice/ck/juno_sc_prl_141107_141121_jc043s01_v01.bc", + "spice/ck/juno_sc_prl_141121_141219_jc044a01_v01.bc", + "spice/ck/juno_sc_prl_141219_150123_jc045a01_v01.bc", + "spice/ck/juno_sc_prl_150123_150213_jc046a01_v01.bc", + "spice/ck/juno_sc_prl_150213_150313_jc047a01_v01.bc", + "spice/ck/juno_sc_prl_150312_150409_jc048a01_v01.bc", + "spice/ck/juno_sc_prl_150410_150508_jc049a01_v01.bc", + "spice/ck/juno_sc_prl_150508_150605_jc050a01_v01.bc", + "spice/ck/juno_sc_prl_150605_150703_jc051a01_v01.bc", + "spice/ck/juno_sc_prl_150703_150731_jc052a01_v01.bc", + "spice/ck/juno_sc_prl_150731_150828_jc053a01_v01.bc", + "spice/ck/juno_sc_prl_150805_150828_jc053m00_v01.bc", + "spice/ck/juno_sc_prl_150807_150828_jc053s00_v01.bc", + "spice/ck/juno_sc_prl_150828_150924_jc054a00_v01.bc", + "spice/ck/juno_sc_prl_150924_151023_jc055a00_v01.bc", + "spice/ck/juno_sc_prl_151023_151120_jc056a00_v01.bc", + "spice/ck/juno_sc_prl_151120_151218_jc057a00_v01.bc", + "spice/ck/juno_sc_prl_151218_160115_jc058a00_v01.bc", + "spice/ck/juno_sc_prl_160115_160212_jc059a00_v01.bc", + "spice/ck/juno_sc_prl_160212_160311_jc060a00_v01.bc", + "spice/ck/juno_sc_prl_160311_160408_jc061a00_v01.bc", + "spice/ck/juno_sc_prl_160408_160506_jc062a00_v01.bc", + "spice/ck/juno_sc_prl_160506_160603_jc063a00_v01.bc", + "spice/ck/juno_sc_prl_160603_160630_jc064a00_v01.bc", + "spice/ck/juno_sc_prl_160708_160729_jm0001rp_v02.bc", + "spice/ck/juno_sc_prl_160729_160826_jm0002rp_v01.bc", + "spice/ck/juno_sc_prl_161115_161213_jx0405rp_v01.bc" + } + } + }, + --NewHorizonsTrail module + { + Name = "JunoTrail", + Parent = "JupiterBarycenter", + Renderable = { + Type = "RenderableTrail", + Body = "JUNO", + Frame = "GALACTIC", + Observer = "JUPITER BARYCENTER", + RGB = { 0.70,0.50,0.20 }, + TropicalOrbitPeriod = 394250.0, + EarthOrbitRatio = 4.5, + DayLength = 9.9259, + TimeStamps = false, + Textures = { + Type = "simple", + Color = "textures/glare_blue.png", + }, + }, + }, + } diff --git a/data/scene/newhorizons/jupiter/callisto/callisto.data b/data/scene/missions/newhorizons/jupiter/callisto/callisto.data similarity index 100% rename from data/scene/newhorizons/jupiter/callisto/callisto.data rename to data/scene/missions/newhorizons/jupiter/callisto/callisto.data diff --git a/data/scene/newhorizons/jupiter/callisto/callisto.mod b/data/scene/missions/newhorizons/jupiter/callisto/callisto.mod similarity index 100% rename from data/scene/newhorizons/jupiter/callisto/callisto.mod rename to data/scene/missions/newhorizons/jupiter/callisto/callisto.mod diff --git a/data/scene/newhorizons/jupiter/callisto/textures/Callisto-Text.png b/data/scene/missions/newhorizons/jupiter/callisto/textures/Callisto-Text.png similarity index 100% rename from data/scene/newhorizons/jupiter/callisto/textures/Callisto-Text.png rename to data/scene/missions/newhorizons/jupiter/callisto/textures/Callisto-Text.png diff --git a/data/scene/newhorizons/jupiter/callisto/textures/defaultProj.png b/data/scene/missions/newhorizons/jupiter/callisto/textures/defaultProj.png similarity index 100% rename from data/scene/newhorizons/jupiter/callisto/textures/defaultProj.png rename to data/scene/missions/newhorizons/jupiter/callisto/textures/defaultProj.png diff --git a/data/scene/newhorizons/jupiter/europa/europa.data b/data/scene/missions/newhorizons/jupiter/europa/europa.data similarity index 100% rename from data/scene/newhorizons/jupiter/europa/europa.data rename to data/scene/missions/newhorizons/jupiter/europa/europa.data diff --git a/data/scene/newhorizons/jupiter/europa/europa.mod b/data/scene/missions/newhorizons/jupiter/europa/europa.mod similarity index 100% rename from data/scene/newhorizons/jupiter/europa/europa.mod rename to data/scene/missions/newhorizons/jupiter/europa/europa.mod diff --git a/data/scene/newhorizons/jupiter/europa/textures/Europa-Text.png b/data/scene/missions/newhorizons/jupiter/europa/textures/Europa-Text.png similarity index 100% rename from data/scene/newhorizons/jupiter/europa/textures/Europa-Text.png rename to data/scene/missions/newhorizons/jupiter/europa/textures/Europa-Text.png diff --git a/data/scene/newhorizons/jupiter/europa/textures/defaultProj.png b/data/scene/missions/newhorizons/jupiter/europa/textures/defaultProj.png similarity index 100% rename from data/scene/newhorizons/jupiter/europa/textures/defaultProj.png rename to data/scene/missions/newhorizons/jupiter/europa/textures/defaultProj.png diff --git a/data/scene/newhorizons/jupiter/ganymede/ganymede.data b/data/scene/missions/newhorizons/jupiter/ganymede/ganymede.data similarity index 100% rename from data/scene/newhorizons/jupiter/ganymede/ganymede.data rename to data/scene/missions/newhorizons/jupiter/ganymede/ganymede.data diff --git a/data/scene/newhorizons/jupiter/ganymede/ganymede.mod b/data/scene/missions/newhorizons/jupiter/ganymede/ganymede.mod similarity index 100% rename from data/scene/newhorizons/jupiter/ganymede/ganymede.mod rename to data/scene/missions/newhorizons/jupiter/ganymede/ganymede.mod diff --git a/data/scene/newhorizons/jupiter/ganymede/textures/Ganymede-Text.png b/data/scene/missions/newhorizons/jupiter/ganymede/textures/Ganymede-Text.png similarity index 100% rename from data/scene/newhorizons/jupiter/ganymede/textures/Ganymede-Text.png rename to data/scene/missions/newhorizons/jupiter/ganymede/textures/Ganymede-Text.png diff --git a/data/scene/newhorizons/jupiter/ganymede/textures/defaultProj.png b/data/scene/missions/newhorizons/jupiter/ganymede/textures/defaultProj.png similarity index 100% rename from data/scene/newhorizons/jupiter/ganymede/textures/defaultProj.png rename to data/scene/missions/newhorizons/jupiter/ganymede/textures/defaultProj.png diff --git a/data/scene/newhorizons/jupiter/io/io.data b/data/scene/missions/newhorizons/jupiter/io/io.data similarity index 100% rename from data/scene/newhorizons/jupiter/io/io.data rename to data/scene/missions/newhorizons/jupiter/io/io.data diff --git a/data/scene/newhorizons/jupiter/io/io.mod b/data/scene/missions/newhorizons/jupiter/io/io.mod similarity index 100% rename from data/scene/newhorizons/jupiter/io/io.mod rename to data/scene/missions/newhorizons/jupiter/io/io.mod diff --git a/data/scene/newhorizons/jupiter/io/textures/Io-Text.png b/data/scene/missions/newhorizons/jupiter/io/textures/Io-Text.png similarity index 100% rename from data/scene/newhorizons/jupiter/io/textures/Io-Text.png rename to data/scene/missions/newhorizons/jupiter/io/textures/Io-Text.png diff --git a/data/scene/newhorizons/jupiter/jupiter/ProjectionsOfInterest.torrent b/data/scene/missions/newhorizons/jupiter/jupiter/ProjectionsOfInterest.torrent similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/ProjectionsOfInterest.torrent rename to data/scene/missions/newhorizons/jupiter/jupiter/ProjectionsOfInterest.torrent diff --git a/data/scene/newhorizons/jupiter/jupiter/jupiter.data b/data/scene/missions/newhorizons/jupiter/jupiter/jupiter.data similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/jupiter.data rename to data/scene/missions/newhorizons/jupiter/jupiter/jupiter.data diff --git a/data/scene/newhorizons/jupiter/jupiter/jupiter.mod b/data/scene/missions/newhorizons/jupiter/jupiter/jupiter.mod similarity index 97% rename from data/scene/newhorizons/jupiter/jupiter/jupiter.mod rename to data/scene/missions/newhorizons/jupiter/jupiter/jupiter.mod index 317ac79798..b1d3377eac 100644 --- a/data/scene/newhorizons/jupiter/jupiter/jupiter.mod +++ b/data/scene/missions/newhorizons/jupiter/jupiter/jupiter.mod @@ -33,7 +33,7 @@ return { }, Projection = { --Sequence = "F:/JupiterFullSequence", - Sequence = "${OPENSPACE_DATA}/scene/newhorizons/jupiter/jupiter/ProjectionsOfInterest", + Sequence = "${OPENSPACE_DATA}/scene/missions/newhorizons/jupiter/jupiter/ProjectionsOfInterest", SequenceType = "image-sequence", Observer = "NEW HORIZONS", Target = "JUPITER", diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/1.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/1.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/1.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/1.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/2.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/2.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/2.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/2.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/3.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/3.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/3.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/3.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/Jupiter-text.png b/data/scene/missions/newhorizons/jupiter/jupiter/textures/Jupiter-text.png similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/Jupiter-text.png rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/Jupiter-text.png diff --git a/data/scene/newhorizons/jupiter/io/textures/defaultProj.png b/data/scene/missions/newhorizons/jupiter/jupiter/textures/defaultProj.png similarity index 100% rename from data/scene/newhorizons/jupiter/io/textures/defaultProj.png rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/defaultProj.png diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/defaultProj2.png b/data/scene/missions/newhorizons/jupiter/jupiter/textures/defaultProj2.png similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/defaultProj2.png rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/defaultProj2.png diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/europaRise1.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/europaRise1.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/europaRise1.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/europaRise1.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/europaRise2.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/europaRise2.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/europaRise2.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/europaRise2.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/grid.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/grid.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/grid.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/grid.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/jupiter.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiter.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/jupiter.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiter.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/jupiterFlipped.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiterFlipped.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/jupiterFlipped.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiterFlipped.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/jupiterFlipped_low.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiterFlipped_low.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/jupiterFlipped_low.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/jupiterFlipped_low.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817584_0x630_sci_1.fit.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817584_0x630_sci_1.fit.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817584_0x630_sci_1.fit.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817584_0x630_sci_1.fit.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817654_0x630_sci_1.fit.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817654_0x630_sci_1.fit.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817654_0x630_sci_1.fit.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817654_0x630_sci_1.fit.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817724_0x630_sci_1.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817724_0x630_sci_1.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817724_0x630_sci_1.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817724_0x630_sci_1.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817794_0x630_sci_1.fit.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817794_0x630_sci_1.fit.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lor_0034817794_0x630_sci_1.fit.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lor_0034817794_0x630_sci_1.fit.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lorriTest1.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lorriTest1.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lorriTest1.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lorriTest1.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/lorriTest2.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/lorriTest2.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/lorriTest2.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/lorriTest2.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/scope.png b/data/scene/missions/newhorizons/jupiter/jupiter/textures/scope.png similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/scope.png rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/scope.png diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/show.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/show.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/show.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/show.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/show_3072.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/show_3072.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/show_3072.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/show_3072.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/small.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/small.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/small.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/small.jpg diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/small.png b/data/scene/missions/newhorizons/jupiter/jupiter/textures/small.png similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/small.png rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/small.png diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/test.jpg b/data/scene/missions/newhorizons/jupiter/jupiter/textures/test.jpg similarity index 100% rename from data/scene/newhorizons/jupiter/jupiter/textures/test.jpg rename to data/scene/missions/newhorizons/jupiter/jupiter/textures/test.jpg diff --git a/data/scene/newhorizons/newhorizons/NewHorizonsKernels.torrent b/data/scene/missions/newhorizons/newhorizons/NewHorizonsKernels.torrent similarity index 100% rename from data/scene/newhorizons/newhorizons/NewHorizonsKernels.torrent rename to data/scene/missions/newhorizons/newhorizons/NewHorizonsKernels.torrent diff --git a/data/scene/newhorizons/newhorizons/jup260.bsp.torrent b/data/scene/missions/newhorizons/newhorizons/jup260.bsp.torrent similarity index 100% rename from data/scene/newhorizons/newhorizons/jup260.bsp.torrent rename to data/scene/missions/newhorizons/newhorizons/jup260.bsp.torrent diff --git a/data/scene/newhorizons/newhorizons/newhorizons.data b/data/scene/missions/newhorizons/newhorizons/newhorizons.data similarity index 100% rename from data/scene/newhorizons/newhorizons/newhorizons.data rename to data/scene/missions/newhorizons/newhorizons/newhorizons.data diff --git a/data/scene/newhorizons/newhorizons/newhorizons.mod b/data/scene/missions/newhorizons/newhorizons/newhorizons.mod similarity index 99% rename from data/scene/newhorizons/newhorizons/newhorizons.mod rename to data/scene/missions/newhorizons/newhorizons/newhorizons.mod index e9935d5906..c683779d8f 100644 --- a/data/scene/newhorizons/newhorizons/newhorizons.mod +++ b/data/scene/missions/newhorizons/newhorizons/newhorizons.mod @@ -172,8 +172,7 @@ return { }, } }, - - { + { Name = "NewHorizonsTrailPluto", Parent = "PlutoBarycenter", Renderable = { diff --git a/data/scene/newhorizons/newhorizonsfov/newhorizonsfov.mod b/data/scene/missions/newhorizons/newhorizonsfov/newhorizonsfov.mod similarity index 100% rename from data/scene/newhorizons/newhorizonsfov/newhorizonsfov.mod rename to data/scene/missions/newhorizons/newhorizonsfov/newhorizonsfov.mod diff --git a/data/scene/newhorizons/newhorizonsfov/textures/glare.png b/data/scene/missions/newhorizons/newhorizonsfov/textures/glare.png similarity index 100% rename from data/scene/newhorizons/newhorizonsfov/textures/glare.png rename to data/scene/missions/newhorizons/newhorizonsfov/textures/glare.png diff --git a/data/scene/dawn/dawn/textures/glare_blue.png b/data/scene/missions/newhorizons/newhorizonsfov/textures/glare_blue.png similarity index 100% rename from data/scene/dawn/dawn/textures/glare_blue.png rename to data/scene/missions/newhorizons/newhorizonsfov/textures/glare_blue.png diff --git a/data/scene/newhorizons/pluto/charon/charon.data b/data/scene/missions/newhorizons/pluto/charon/charon.data similarity index 100% rename from data/scene/newhorizons/pluto/charon/charon.data rename to data/scene/missions/newhorizons/pluto/charon/charon.data diff --git a/data/scene/newhorizons/pluto/charon/charon.mod b/data/scene/missions/newhorizons/pluto/charon/charon.mod similarity index 100% rename from data/scene/newhorizons/pluto/charon/charon.mod rename to data/scene/missions/newhorizons/pluto/charon/charon.mod diff --git a/data/scene/newhorizons/pluto/hydra/hydra.mod b/data/scene/missions/newhorizons/pluto/hydra/hydra.mod similarity index 100% rename from data/scene/newhorizons/pluto/hydra/hydra.mod rename to data/scene/missions/newhorizons/pluto/hydra/hydra.mod diff --git a/data/scene/newhorizons/pluto/hydra/textures/Hydra-Text.png b/data/scene/missions/newhorizons/pluto/hydra/textures/Hydra-Text.png similarity index 100% rename from data/scene/newhorizons/pluto/hydra/textures/Hydra-Text.png rename to data/scene/missions/newhorizons/pluto/hydra/textures/Hydra-Text.png diff --git a/data/scene/newhorizons/pluto/hydra/textures/gray.jpg b/data/scene/missions/newhorizons/pluto/hydra/textures/gray.jpg similarity index 100% rename from data/scene/newhorizons/pluto/hydra/textures/gray.jpg rename to data/scene/missions/newhorizons/pluto/hydra/textures/gray.jpg diff --git a/data/scene/newhorizons/pluto/kerberos/kerberos.mod b/data/scene/missions/newhorizons/pluto/kerberos/kerberos.mod similarity index 100% rename from data/scene/newhorizons/pluto/kerberos/kerberos.mod rename to data/scene/missions/newhorizons/pluto/kerberos/kerberos.mod diff --git a/data/scene/newhorizons/pluto/kerberos/textures/Kerberos-Text.png b/data/scene/missions/newhorizons/pluto/kerberos/textures/Kerberos-Text.png similarity index 100% rename from data/scene/newhorizons/pluto/kerberos/textures/Kerberos-Text.png rename to data/scene/missions/newhorizons/pluto/kerberos/textures/Kerberos-Text.png diff --git a/data/scene/newhorizons/pluto/kerberos/textures/gray.jpg b/data/scene/missions/newhorizons/pluto/kerberos/textures/gray.jpg similarity index 100% rename from data/scene/newhorizons/pluto/kerberos/textures/gray.jpg rename to data/scene/missions/newhorizons/pluto/kerberos/textures/gray.jpg diff --git a/data/scene/newhorizons/pluto/nix/nix.mod b/data/scene/missions/newhorizons/pluto/nix/nix.mod similarity index 100% rename from data/scene/newhorizons/pluto/nix/nix.mod rename to data/scene/missions/newhorizons/pluto/nix/nix.mod diff --git a/data/scene/newhorizons/pluto/nix/textures/Nix-Text.png b/data/scene/missions/newhorizons/pluto/nix/textures/Nix-Text.png similarity index 100% rename from data/scene/newhorizons/pluto/nix/textures/Nix-Text.png rename to data/scene/missions/newhorizons/pluto/nix/textures/Nix-Text.png diff --git a/data/scene/newhorizons/pluto/nix/textures/gray.jpg b/data/scene/missions/newhorizons/pluto/nix/textures/gray.jpg similarity index 100% rename from data/scene/newhorizons/pluto/nix/textures/gray.jpg rename to data/scene/missions/newhorizons/pluto/nix/textures/gray.jpg diff --git a/data/scene/newhorizons/pluto/pluto/pluto.data b/data/scene/missions/newhorizons/pluto/pluto/pluto.data similarity index 100% rename from data/scene/newhorizons/pluto/pluto/pluto.data rename to data/scene/missions/newhorizons/pluto/pluto/pluto.data diff --git a/data/scene/newhorizons/pluto/pluto/pluto.mod b/data/scene/missions/newhorizons/pluto/pluto/pluto.mod similarity index 97% rename from data/scene/newhorizons/pluto/pluto/pluto.mod rename to data/scene/missions/newhorizons/pluto/pluto/pluto.mod index 08eb750c1b..4434ec1cb0 100644 --- a/data/scene/newhorizons/pluto/pluto/pluto.mod +++ b/data/scene/missions/newhorizons/pluto/pluto/pluto.mod @@ -46,8 +46,8 @@ return { Height = "textures/pluto_shenk_heightmap.jpg", }, Projection = { - Sequence = "${OPENSPACE_DATA}/scene/newhorizons/pluto/pluto/images", - EventFile = "${OPENSPACE_DATA}/scene/newhorizons/pluto/pluto/assets/core_v9h_obs_getmets_v8_time_fix_nofrcd_mld.txt", + Sequence = "${OPENSPACE_DATA}/scene/missions/newhorizons/pluto/pluto/images", + EventFile = "${OPENSPACE_DATA}/scene/missions/newhorizons/pluto/pluto/assets/core_v9h_obs_getmets_v8_time_fix_nofrcd_mld.txt", SequenceType = "hybrid", Observer = "NEW HORIZONS", Target = "PLUTO", diff --git a/data/scene/newhorizons/pluto/styx/styx.mod b/data/scene/missions/newhorizons/pluto/styx/styx.mod similarity index 100% rename from data/scene/newhorizons/pluto/styx/styx.mod rename to data/scene/missions/newhorizons/pluto/styx/styx.mod diff --git a/data/scene/newhorizons/pluto/styx/textures/Styx-Text.png b/data/scene/missions/newhorizons/pluto/styx/textures/Styx-Text.png similarity index 100% rename from data/scene/newhorizons/pluto/styx/textures/Styx-Text.png rename to data/scene/missions/newhorizons/pluto/styx/textures/Styx-Text.png diff --git a/data/scene/newhorizons/pluto/styx/textures/gray.jpg b/data/scene/missions/newhorizons/pluto/styx/textures/gray.jpg similarity index 100% rename from data/scene/newhorizons/pluto/styx/textures/gray.jpg rename to data/scene/missions/newhorizons/pluto/styx/textures/gray.jpg diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/BaseballDiamond_PolyCam.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/BaseballDiamond_PolyCam.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/BaseballDiamond_PolyCam.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/BaseballDiamond_PolyCam.txt diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/DetailedSurvey_EquatorialStations_Spectrometers.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/DetailedSurvey_EquatorialStations_Spectrometers.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/DetailedSurvey_EquatorialStations_Spectrometers.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/DetailedSurvey_EquatorialStations_Spectrometers.txt diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/OrbitalB_Site08_PolyCamImages.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/OrbitalB_Site08_PolyCamImages.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/OrbitalB_Site08_PolyCamImages.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/OrbitalB_Site08_PolyCamImages.txt diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_PolyCam.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_PolyCam.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_PolyCam.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_PolyCam.txt diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_spectrometers.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_spectrometers.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_spectrometers.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_225m_Equatorial_spectrometers.txt diff --git a/data/scene/osirisrex/bennu/InstrumentTimes/Recon_525m_Equatorial_spectrometers.txt b/data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_525m_Equatorial_spectrometers.txt similarity index 100% rename from data/scene/osirisrex/bennu/InstrumentTimes/Recon_525m_Equatorial_spectrometers.txt rename to data/scene/missions/osirisrex/bennu/InstrumentTimes/Recon_525m_Equatorial_spectrometers.txt diff --git a/data/scene/osirisrex/bennu/bennu.data b/data/scene/missions/osirisrex/bennu/bennu.data similarity index 100% rename from data/scene/osirisrex/bennu/bennu.data rename to data/scene/missions/osirisrex/bennu/bennu.data diff --git a/data/scene/osirisrex/bennu/bennu.mod b/data/scene/missions/osirisrex/bennu/bennu.mod similarity index 100% rename from data/scene/osirisrex/bennu/bennu.mod rename to data/scene/missions/osirisrex/bennu/bennu.mod diff --git a/data/scene/osirisrex/osirisrex/OsirisRexKernels.torrent b/data/scene/missions/osirisrex/osirisrex/OsirisRexKernels.torrent similarity index 100% rename from data/scene/osirisrex/osirisrex/OsirisRexKernels.torrent rename to data/scene/missions/osirisrex/osirisrex/OsirisRexKernels.torrent diff --git a/data/scene/osirisrex/osirisrex/osirisrex.data b/data/scene/missions/osirisrex/osirisrex/osirisrex.data similarity index 100% rename from data/scene/osirisrex/osirisrex/osirisrex.data rename to data/scene/missions/osirisrex/osirisrex/osirisrex.data diff --git a/data/scene/osirisrex/osirisrex/osirisrex.mission b/data/scene/missions/osirisrex/osirisrex/osirisrex.mission similarity index 100% rename from data/scene/osirisrex/osirisrex/osirisrex.mission rename to data/scene/missions/osirisrex/osirisrex/osirisrex.mission diff --git a/data/scene/osirisrex/osirisrex/osirisrex.mod b/data/scene/missions/osirisrex/osirisrex/osirisrex.mod similarity index 100% rename from data/scene/osirisrex/osirisrex/osirisrex.mod rename to data/scene/missions/osirisrex/osirisrex/osirisrex.mod diff --git a/data/scene/osirisrex/osirisrex/spice_kernel_times.mission b/data/scene/missions/osirisrex/osirisrex/spice_kernel_times.mission similarity index 100% rename from data/scene/osirisrex/osirisrex/spice_kernel_times.mission rename to data/scene/missions/osirisrex/osirisrex/spice_kernel_times.mission diff --git a/data/scene/osirisrex/scheduled_scripts.lua b/data/scene/missions/osirisrex/scheduled_scripts.lua similarity index 100% rename from data/scene/osirisrex/scheduled_scripts.lua rename to data/scene/missions/osirisrex/scheduled_scripts.lua diff --git a/data/scene/rosetta/67P/67P.data b/data/scene/missions/rosetta/67P/67P.data similarity index 100% rename from data/scene/rosetta/67P/67P.data rename to data/scene/missions/rosetta/67P/67P.data diff --git a/data/scene/rosetta/67P/67P.mod b/data/scene/missions/rosetta/67P/67P.mod similarity index 100% rename from data/scene/rosetta/67P/67P.mod rename to data/scene/missions/rosetta/67P/67P.mod diff --git a/data/scene/rosetta/67P/67P_rotated_5_130.obj.torrent b/data/scene/missions/rosetta/67P/67P_rotated_5_130.obj.torrent similarity index 100% rename from data/scene/rosetta/67P/67P_rotated_5_130.obj.torrent rename to data/scene/missions/rosetta/67P/67P_rotated_5_130.obj.torrent diff --git a/data/scene/rosetta/67P/rosettaimages.torrent b/data/scene/missions/rosetta/67P/rosettaimages.torrent similarity index 100% rename from data/scene/rosetta/67P/rosettaimages.torrent rename to data/scene/missions/rosetta/67P/rosettaimages.torrent diff --git a/data/scene/rosetta/rosetta/Rosetta.torrent b/data/scene/missions/rosetta/rosetta/Rosetta.torrent similarity index 100% rename from data/scene/rosetta/rosetta/Rosetta.torrent rename to data/scene/missions/rosetta/rosetta/Rosetta.torrent diff --git a/data/scene/rosetta/rosetta/rosetta.data b/data/scene/missions/rosetta/rosetta/rosetta.data similarity index 100% rename from data/scene/rosetta/rosetta/rosetta.data rename to data/scene/missions/rosetta/rosetta/rosetta.data diff --git a/data/scene/rosetta/rosetta/rosetta.mod b/data/scene/missions/rosetta/rosetta/rosetta.mod similarity index 100% rename from data/scene/rosetta/rosetta/rosetta.mod rename to data/scene/missions/rosetta/rosetta/rosetta.mod diff --git a/data/scene/newhorizons.scene b/data/scene/newhorizons.scene index 7d88727cba..f2bacb012c 100644 --- a/data/scene/newhorizons.scene +++ b/data/scene/newhorizons.scene @@ -56,14 +56,14 @@ return { "saturn/saturn", "uranus", "neptune", - "newhorizons/pluto", - "newhorizons/jupiter", "stars", -- "stars-denver", "milkyway", -- "milkyway-eso", - "newhorizons/newhorizons", - "newhorizons/newhorizonsfov", + "missions/newhorizons/pluto", + "missions/newhorizons/jupiter", + "missions/newhorizons", + "missions/newhorizons/newhorizonsfov" } } diff --git a/data/scene/newhorizons/jupiter/jupiter/textures/defaultProj.png b/data/scene/newhorizons/jupiter/jupiter/textures/defaultProj.png deleted file mode 100644 index 1d48dc35f457893d0c55ee9b85f8b9009c6dc404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5753 zcmeHL&nrYx6h6=RF*8x5BnGcYp)`|~COjJP79=TTW2GojBt^MV;y;*$t)(gd!TTp{ zretX$Wotq1xo>lOz1}@%aW#v#c;}sN-~G;azkBB0+uX0ME_LMl@&M4`FIUz9nq}Gy z*;e_w8ko3|uiWwS_6fk`Fh0)tt)>3ebenm}-m<2cNUmk-ZjK z;i!K0J~M;_Um3-t!Hg-buu>+lMAA|;fD2UwqubzNFsIUEfKCixN|Xx?NVu*= diff --git a/data/scene/newhorizons/newhorizonsfov/textures/glare_blue.png b/data/scene/newhorizons/newhorizonsfov/textures/glare_blue.png deleted file mode 100644 index ebae6637e28f36270868ce88f7024c1ff84c3c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83570 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 diff --git a/data/scene/newhorizons/newhorizonspath/newhorizonspath.mod b/data/scene/newhorizons/newhorizonspath/newhorizonspath.mod deleted file mode 100644 index d11cb2a8bb..0000000000 --- a/data/scene/newhorizons/newhorizonspath/newhorizonspath.mod +++ /dev/null @@ -1,19 +0,0 @@ -return { - -- NewHorizonsPath module - { - Name = "NewHorizonsPath", - Parent = "Root", - Renderable = { - Type = "RenderablePath", - Body = "NEW HORIZONS", - Frame = "GALACTIC", - Observer = "SUN", - RGB = { 0.8, 0.7, 0.7 }, - Textures = { - Type = "simple", - Color = "textures/glare_blue.png", - -- need to add different texture - }, - }, - } -} \ No newline at end of file diff --git a/data/scene/newhorizons/newhorizonspath/textures/glare.png b/data/scene/newhorizons/newhorizonspath/textures/glare.png deleted file mode 100644 index 7b7aa34b33dacf7c23f466d0f42a76095e888bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86262 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 diff --git a/data/scene/newhorizons/newhorizonspath/textures/glare_blue.png b/data/scene/newhorizons/newhorizonspath/textures/glare_blue.png deleted file mode 100644 index ebae6637e28f36270868ce88f7024c1ff84c3c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83570 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 diff --git a/data/scene/newhorizons/newhorizonstrail/newhorizonstrail.mod b/data/scene/newhorizons/newhorizonstrail/newhorizonstrail.mod deleted file mode 100644 index e8a334b6ae..0000000000 --- a/data/scene/newhorizons/newhorizonstrail/newhorizonstrail.mod +++ /dev/null @@ -1,22 +0,0 @@ -return { - -- NewHorizonsTrail module - { - Name = "NewHorizonsTrail", - Parent = "Root", - Renderable = { - Type = "RenderableTrail", - Body = "NEW HORIZONS", - Frame = "GALACTIC", - Observer = "SUN", - RGB = { 0.1,0.01,0.30 }, - TropicalOrbitPeriod = 6330.595 , - EarthOrbitRatio = 0.857, - DayLength = 9.9259, - Textures = { - Type = "simple", - Color = "textures/glare_blue.png", - -- need to add different texture - }, - }, - } -} \ No newline at end of file diff --git a/data/scene/newhorizons/newhorizonstrail/textures/glare.png b/data/scene/newhorizons/newhorizonstrail/textures/glare.png deleted file mode 100644 index 7b7aa34b33dacf7c23f466d0f42a76095e888bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86262 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 diff --git a/data/scene/newhorizons/newhorizonstrail/textures/glare_blue.png b/data/scene/newhorizons/newhorizonstrail/textures/glare_blue.png deleted file mode 100644 index ebae6637e28f36270868ce88f7024c1ff84c3c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83570 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 diff --git a/data/scene/osirisrex.scene b/data/scene/osirisrex.scene index d394a59154..58eb859169 100644 --- a/data/scene/osirisrex.scene +++ b/data/scene/osirisrex.scene @@ -15,9 +15,9 @@ function preInitialization() dofile(openspace.absPath('${SCRIPTS}/bind_keys_osirisrex.lua')) --local startTime = "2019 APR 16 12:03:00.00" - openspace.time.setTime("2016 SEP 8 23:05:00.500") + openspace.time.setTime("2016 SEP 8 23:00:00.500") - openspace.scriptScheduler.load("${OPENSPACE_DATA}/scene/osirisrex/scheduled_scripts.lua") + openspace.scriptScheduler.load("${OPENSPACE_DATA}/scene/missions/osirisrex/scheduled_scripts.lua") end @@ -44,7 +44,7 @@ function postInitialization() openspace.setPropertyValue("Earth.RenderableGlobe.Atmosphere", true); openspace.printInfo("Done setting default values") - openspace.loadMission("${OPENSPACE_DATA}/scene/osirisrex/osirisrex/osirisrex.mission") + openspace.loadMission("${OPENSPACE_DATA}/scene/missions/osirisrex/osirisrex/osirisrex.mission") openspace.resetCameraDirection() end @@ -72,7 +72,7 @@ return { -- "stars-denver", "milkyway", -- "milkyway-eso", - "osirisrex", + "missions/osirisrex", } } diff --git a/data/scene/rosetta.scene b/data/scene/rosetta.scene index b1b1b707bb..1142961cc4 100644 --- a/data/scene/rosetta.scene +++ b/data/scene/rosetta.scene @@ -60,7 +60,7 @@ return { "neptune", "stars", "milkyway", - "rosetta", + "missions/rosetta", } } From 70af0f0073bdd91c0c2b162a69d58c769c1aa0a3 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 13:38:17 +0100 Subject: [PATCH 17/18] Add an option to the configuration manager to append the scene name to the cache directory (closing #159) --- .../openspace/engine/configurationmanager.h | 2 ++ openspace.cfg | 1 + src/engine/configurationmanager.cpp | 1 + src/engine/configurationmanager_doc.inl | 17 +++++++++--- src/engine/openspaceengine.cpp | 26 +++++++++++++++++-- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/include/openspace/engine/configurationmanager.h b/include/openspace/engine/configurationmanager.h index 3f57aa59d9..f63649a8b6 100644 --- a/include/openspace/engine/configurationmanager.h +++ b/include/openspace/engine/configurationmanager.h @@ -109,6 +109,8 @@ public: /// The key that stores the switch for enabling/disabling the rendering on a master /// computer static const std::string KeyRenderingMethod; + /// The key that determines whether a new cache folder is used for each scene file + static const std::string KeyPerSceneCache; /// The key that stores the http proxy settings for the downloadmanager static const std::string KeyHttpProxy; /// The key that stores the address of the http proxy diff --git a/openspace.cfg b/openspace.cfg index 26fb6f447d..995794fb20 100644 --- a/openspace.cfg +++ b/openspace.cfg @@ -66,6 +66,7 @@ return { File = "${DOCUMENTATION}/FactoryDocumentation.html" }, ShutdownCountdown = 3, + -- PerSceneCache = true, DownloadRequestURL = "http://data.openspaceproject.com/request.cgi", RenderingMethod = "Framebuffer" --RenderingMethod = "ABuffer" -- alternative: "Framebuffer" diff --git a/src/engine/configurationmanager.cpp b/src/engine/configurationmanager.cpp index 2e326d520c..6cdfc6d496 100644 --- a/src/engine/configurationmanager.cpp +++ b/src/engine/configurationmanager.cpp @@ -70,6 +70,7 @@ const string ConfigurationManager::KeyCapabilitiesVerbosity = const string ConfigurationManager::KeyShutdownCountdown = "ShutdownCountdown"; const string ConfigurationManager::KeyDisableMasterRendering = "DisableRenderingOnMaster"; const string ConfigurationManager::KeyDownloadRequestURL = "DownloadRequestURL"; +const string ConfigurationManager::KeyPerSceneCache = "PerSceneCache"; const string ConfigurationManager::KeyRenderingMethod = "RenderingMethod"; const string ConfigurationManager::KeyOnScreenTextScaling = "OnScreenTextScaling"; diff --git a/src/engine/configurationmanager_doc.inl b/src/engine/configurationmanager_doc.inl index 4e06d9dcef..e53fb1b464 100644 --- a/src/engine/configurationmanager_doc.inl +++ b/src/engine/configurationmanager_doc.inl @@ -199,8 +199,8 @@ Documentation ConfigurationManager::Documentation() { new StringInListVerifier( // List taken from ScriptEngine::writeLog { "text" } - ), - "The type of logfile that will be created." + ), + "The type of logfile that will be created." }, { ConfigurationManager::PartFile, @@ -211,8 +211,8 @@ Documentation ConfigurationManager::Documentation() { } }), "Contains a log of all Lua scripts that were executed in the last " - "session.", - Optional::Yes + "session.", + Optional::Yes }, { ConfigurationManager::KeyKeyboardShortcuts, @@ -292,6 +292,15 @@ Documentation ConfigurationManager::Documentation() { "shutdown is aborted.", Optional::Yes }, + { + ConfigurationManager::KeyPerSceneCache, + new BoolVerifier, + "If this is set to 'true', the name of the scene will be appended to the " + "cache directory, thus not reusing the same directory. This is useful in " + "cases where the same instance of OpenSpace is run with multiple scenes, but " + "the caches should be retained. This value defaults to 'false'.", + Optional::Yes + }, { ConfigurationManager::KeyOnScreenTextScaling, new StringInListVerifier({ diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 03f5521b02..b8a364cb65 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -289,10 +289,32 @@ bool OpenSpaceEngine::create(int argc, char** argv, return false; } - if (!commandlineArgumentPlaceholders.cacheFolder.empty()) { + bool hasCacheCommandline = !commandlineArgumentPlaceholders.cacheFolder.empty(); + bool hasCacheConfiguration = _engine->configurationManager().hasKeyAndValue( + ConfigurationManager::KeyPerSceneCache + ); + std::string cacheFolder = absPath("${CACHE}"); + if (hasCacheCommandline) { + cacheFolder = commandlineArgumentPlaceholders.cacheFolder; + //FileSys.registerPathToken( + // "${CACHE}", + // commandlineArgumentPlaceholders.cacheFolder, + // ghoul::filesystem::FileSystem::Override::Yes + //); + } + if (hasCacheConfiguration) { + std::string scene = _engine->configurationManager().value( + ConfigurationManager::KeyConfigScene + ); + cacheFolder += "-" + ghoul::filesystem::File(scene).baseName(); + } + + if (hasCacheCommandline || hasCacheConfiguration) { + LINFO("Old cache: " << absPath("${CACHE}")); + LINFO("New cache: " << cacheFolder); FileSys.registerPathToken( "${CACHE}", - commandlineArgumentPlaceholders.cacheFolder, + cacheFolder, ghoul::filesystem::FileSystem::Override::Yes ); } From f99513a976e7fe017c0a116d75ac072598c386e9 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 7 Nov 2016 16:15:28 +0100 Subject: [PATCH 18/18] Remove the km to m conversion in RenderableFoV (closing #156) --- data/scene/newhorizons.scene | 2 +- modules/newhorizons/rendering/renderablefov.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/scene/newhorizons.scene b/data/scene/newhorizons.scene index f2bacb012c..ca5e4106c9 100644 --- a/data/scene/newhorizons.scene +++ b/data/scene/newhorizons.scene @@ -62,7 +62,7 @@ return { -- "milkyway-eso", "missions/newhorizons/pluto", "missions/newhorizons/jupiter", - "missions/newhorizons", + "missions/newhorizons/newhorizons", "missions/newhorizons/newhorizonsfov" } } diff --git a/modules/newhorizons/rendering/renderablefov.cpp b/modules/newhorizons/rendering/renderablefov.cpp index aa29f631cb..eb7d419780 100644 --- a/modules/newhorizons/rendering/renderablefov.cpp +++ b/modules/newhorizons/rendering/renderablefov.cpp @@ -265,7 +265,7 @@ psc RenderableFov::checkForIntercept(glm::dvec3 ray) { ivec *= 0.9999;// because fov lands exactly on top of surface we need to move it out slightly _interceptVector = PowerScaledCoordinate::CreatePowerScaledCoordinate(ivec[0], ivec[1], ivec[2]); - _interceptVector[3] += 3; + //_interceptVector[3] += 3; return _interceptVector; } @@ -519,7 +519,7 @@ void RenderableFov::computeIntercepts(const RenderData& data) { if (_interceptTag[r]) { _interceptVector = PowerScaledCoordinate::CreatePowerScaledCoordinate(ivec[0], ivec[1], ivec[2]); - _interceptVector[3] += 3; + //_interceptVector[3] += 3; // INTERCEPTIONS insertPoint(_fovBounds, fovOrigin, col_start); insertPoint(_fovBounds, _interceptVector.vec4(), col_end);