From 5370b9190e68e1c649713b9dee1f2ab604358840 Mon Sep 17 00:00:00 2001 From: GPayne Date: Tue, 6 Jul 2021 17:10:52 -0600 Subject: [PATCH 01/19] Fix for new hi-res Bennu projection model --- .../scene/solarsystem/missions/osirisrex/bennu_projection.asset | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset b/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset index afcfb529a7..c78fbef4b2 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/bennu_projection.asset @@ -34,7 +34,7 @@ local BennuProjection = { Enabled = true, Type = "RenderableModelProjection", Body = BENNU_BODY, - GeometryFile = models .. "/BennuTextured.obj", + GeometryFile = models .. "/Bennu_v20_200k_an.obj", Projection = { Sequence = { images, imagesA }, SequenceType = "image-sequence", From d4c06951da2af132b92ec970e469439baa5963b1 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Wed, 7 Jul 2021 05:37:53 +0200 Subject: [PATCH 02/19] Update faulty docs and function name for getGeoPosition (#1662) (#1677) New name: getLocalPositionFromGeo --- modules/globebrowsing/globebrowsingmodule.cpp | 14 ++++++++------ modules/globebrowsing/globebrowsingmodule_lua.inl | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/globebrowsing/globebrowsingmodule.cpp b/modules/globebrowsing/globebrowsingmodule.cpp index 89b7fe275b..b9253986b4 100644 --- a/modules/globebrowsing/globebrowsingmodule.cpp +++ b/modules/globebrowsing/globebrowsingmodule.cpp @@ -398,20 +398,22 @@ scripting::LuaLibrary GlobeBrowsingModule::luaLibrary() const { "the surface of the specified globe." }, { - "getGeoPosition", - &globebrowsing::luascriptfunctions::getGeoPosition, + "getLocalPositionFromGeo", + &globebrowsing::luascriptfunctions::getLocalPositionFromGeo, {}, "string, number, number, number", - "Returns the specified surface position on the globe identified by the first " - "argument, as three floating point values - latitude, longitude and altitude " - "(degrees and meters)." + "Returns a position in the local Cartesian coordinate system of the globe " + "identified by the first argument, that corresponds to the given geographic " + "coordinates: latitude, longitude and altitude (in degrees and meters). In " + "the local coordinate system, the position (0,0,0) corresponds to the " + "globe's center." }, { "getGeoPositionForCamera", &globebrowsing::luascriptfunctions::getGeoPositionForCamera, {}, "void", - "Get geographic coordinates of the camera poosition in latitude, " + "Get geographic coordinates of the camera position in latitude, " "longitude, and altitude (degrees and meters)." }, { diff --git a/modules/globebrowsing/globebrowsingmodule_lua.inl b/modules/globebrowsing/globebrowsingmodule_lua.inl index 4ed196188c..ec5d2d9374 100644 --- a/modules/globebrowsing/globebrowsingmodule_lua.inl +++ b/modules/globebrowsing/globebrowsingmodule_lua.inl @@ -287,8 +287,8 @@ int goToGeo(lua_State* L) { return 0; } -int getGeoPosition(lua_State* L) { - ghoul::lua::checkArgumentsAndThrow(L, 4, "lua::getGeoPosition"); +int getLocalPositionFromGeo(lua_State* L) { + ghoul::lua::checkArgumentsAndThrow(L, 4, "lua::getLocalPositionFromGeo"); const std::string& globeIdentifier = ghoul::lua::value(L, 1); const double latitude = ghoul::lua::value(L, 2); From c35ff0e8f211c8b58fafcd289d3f7d81e9b6c065 Mon Sep 17 00:00:00 2001 From: Micah Acinapura Date: Tue, 6 Jul 2021 23:38:36 -0400 Subject: [PATCH 03/19] adapt addFocusNodes for GlobeTranslation --- .../globebrowsing/scripts/layer_support.lua | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/modules/globebrowsing/scripts/layer_support.lua b/modules/globebrowsing/scripts/layer_support.lua index 82678d901c..0d3b94cc85 100644 --- a/modules/globebrowsing/scripts/layer_support.lua +++ b/modules/globebrowsing/scripts/layer_support.lua @@ -315,24 +315,25 @@ openspace.globebrowsing.addFocusNodesFromDirectory = function (dir, node_name) if file and file:find('.info') then local t = openspace.globebrowsing.parseInfoFile(file) - if t.Node and t.Location then - openspace.printInfo("Creating focus node for '" .. n .. "'") + if node_name and t.Location then + openspace.printInfo("Creating focus node for '" .. node_name .. "'") - local lat = t.Location.Center[2] - local long = t.Location.Center[1] - local a, b, c = openspace.globebrowsing.getGeoPosition(node_name, lat, long, 0.0) - local p = { a, b, c } + local lat = t.Location.Center[1] + local long = t.Location.Center[2] local identifier = node_name .. " - " .. t.Identifier - local name = node_name .. " - " .. t.Node + local name = node_name .. " - " .. t.Name openspace.addSceneGraphNode({ Identifier = identifier, Parent = node_name, Transform = { Translation = { - Type = "StaticTranslation", - Position = { p[1], p[2], p[3] } + Type = "GlobeTranslation", + Globe = node_name, + Latitude = lat, + Longitude = long, + UseHeightmap = true } }, GUI = { @@ -348,8 +349,6 @@ end openspace.globebrowsing.addFocusNodeFromLatLong = function (name, globe_identifier, lat, long, altitude) altitude = altitude or 0; - local a, b, c = openspace.globebrowsing.getGeoPosition(globe_identifier, lat, long, altitude) - local p = { a, b, c } local identifier = globe_identifier .. "-" .. name openspace.addSceneGraphNode({ From 85e7c6a1467bb05207de40254be51ef453f72261 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Wed, 7 Jul 2021 14:28:24 +0200 Subject: [PATCH 04/19] A few exponential slider updates * Add exponent to RenderableTrail period and resolution * Lower exponent of stereoscopic depth slider, to give better control --- modules/base/rendering/renderabletrailorbit.cpp | 2 ++ src/interaction/orbitalnavigator.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/base/rendering/renderabletrailorbit.cpp b/modules/base/rendering/renderabletrailorbit.cpp index a80152e3eb..fffd3effd8 100644 --- a/modules/base/rendering/renderabletrailorbit.cpp +++ b/modules/base/rendering/renderabletrailorbit.cpp @@ -158,10 +158,12 @@ RenderableTrailOrbit::RenderableTrailOrbit(const ghoul::Dictionary& dictionary) using namespace std::chrono; _period = p.period * duration_cast(hours(24)).count(); _period.onChange([&] { _needsFullSweep = true; _indexBufferDirty = true; }); + _period.setExponent(5.f); addProperty(_period); _resolution = p.resolution; _resolution.onChange([&] { _needsFullSweep = true; _indexBufferDirty = true; }); + _resolution.setExponent(3.5f); addProperty(_resolution); // We store the vertices with (excluding the wrapping) decending temporal order diff --git a/src/interaction/orbitalnavigator.cpp b/src/interaction/orbitalnavigator.cpp index 2e54fce454..7c91528ecd 100644 --- a/src/interaction/orbitalnavigator.cpp +++ b/src/interaction/orbitalnavigator.cpp @@ -391,7 +391,7 @@ OrbitalNavigator::OrbitalNavigator() addProperty(_useAdaptiveStereoscopicDepth); addProperty(_staticViewScaleExponent); - _stereoscopicDepthOfFocusSurface.setExponent(10.f); + _stereoscopicDepthOfFocusSurface.setExponent(3.f); addProperty(_stereoscopicDepthOfFocusSurface); addProperty(_retargetInterpolationTime); From 018207b718919cb8851d78f2c96cca149b1881bb Mon Sep 17 00:00:00 2001 From: Gene Payne Date: Wed, 7 Jul 2021 08:33:44 -0600 Subject: [PATCH 05/19] Issue/1669 (#1678) * Potential fix for pause during playback-with-screenshots * Fixed a typo that slipped in * Added code from Emma to allow pausing during playback-with-frames --- src/interaction/sessionrecording.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/interaction/sessionrecording.cpp b/src/interaction/sessionrecording.cpp index 59ec80a20b..6a0a80064f 100644 --- a/src/interaction/sessionrecording.cpp +++ b/src/interaction/sessionrecording.cpp @@ -1771,7 +1771,8 @@ void SessionRecording::moveAheadInTime() { using namespace std::chrono; bool paused = global::timeManager->isPaused(); - if (_state == SessionState::PlaybackPaused) { + bool playbackPaused = (_state == SessionState::PlaybackPaused); + if (playbackPaused) { _playbackPauseOffset += global::windowDelegate->applicationTime() - _previousTime; } @@ -1793,10 +1794,10 @@ void SessionRecording::moveAheadInTime() { global::navigationHandler->orbitalNavigator().anchorNode(); const Renderable* focusRenderable = focusNode->renderable(); if (!focusRenderable || focusRenderable->renderedWithDesiredData()) { - if (!paused) { + if (!playbackPaused) { _saveRenderingCurrentRecordedTime_interpolation += _saveRenderingDeltaTime_interpolation_usec; - _saveRenderingCurrentRecordedTime += _saveRenderingDeltaTime; + _saveRenderingCurrentRecordedTime += _saveRenderingDeltaTime; global::renderEngine->takeScreenshot(); } } From 5a29f1a27659d115244665f67a6c6d462b36ad59 Mon Sep 17 00:00:00 2001 From: Micah Acinapura Date: Wed, 7 Jul 2021 10:39:53 -0400 Subject: [PATCH 06/19] smaller value for adaptaive stereo hack --- src/interaction/orbitalnavigator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interaction/orbitalnavigator.cpp b/src/interaction/orbitalnavigator.cpp index 7c91528ecd..cbb2908a6d 100644 --- a/src/interaction/orbitalnavigator.cpp +++ b/src/interaction/orbitalnavigator.cpp @@ -256,7 +256,7 @@ OrbitalNavigator::OrbitalNavigator() , _useAdaptiveStereoscopicDepth(UseAdaptiveStereoscopicDepthInfo, true) , _stereoscopicDepthOfFocusSurface( StereoscopicDepthOfFocusSurfaceInfo, - 200000, + 21500, 0.25, 500000 ) From 95d008f69e8e3f92ab7ad73f12c8d2757f033a2c Mon Sep 17 00:00:00 2001 From: Micah Acinapura Date: Wed, 7 Jul 2021 11:16:15 -0400 Subject: [PATCH 07/19] update ghoul --- ext/ghoul | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/ghoul b/ext/ghoul index c5add410f3..2ffa7b7f7a 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit c5add410f3367890e2a2f91f6087001baf8f2152 +Subproject commit 2ffa7b7f7a9582f191e51d4f7b030ea764f86a4c From f067cfa63b00b33a6ed61ff96ba7cc906c22c725 Mon Sep 17 00:00:00 2001 From: Micah Acinapura Date: Wed, 7 Jul 2021 12:19:15 -0400 Subject: [PATCH 08/19] adding renderable type back to renderables --- src/rendering/renderable.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/rendering/renderable.cpp b/src/rendering/renderable.cpp index c9704ec821..53cb1b2f45 100644 --- a/src/rendering/renderable.cpp +++ b/src/rendering/renderable.cpp @@ -92,9 +92,6 @@ ghoul::mm_unique_ptr Renderable::createFromDictionary( documentation::testSpecificationAndThrow(Documentation(), dictionary, "Renderable"); std::string renderableType = dictionary.value(KeyType); - // Now we no longer need the type variable - dictionary.removeValue(KeyType); - auto factory = FactoryManager::ref().factory(); ghoul_assert(factory, "Renderable factory did not exist"); Renderable* result = factory->create( From 4493726aae4c0c66a4955c3794af8c198e588407 Mon Sep 17 00:00:00 2001 From: Micah Date: Thu, 8 Jul 2021 07:46:48 -0400 Subject: [PATCH 09/19] update sbs stereo config --- config/single_sbs_stereo.xml | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/config/single_sbs_stereo.xml b/config/single_sbs_stereo.xml index 595d92cafb..e0707559c1 100644 --- a/config/single_sbs_stereo.xml +++ b/config/single_sbs_stereo.xml @@ -1,22 +1,16 @@ - + + + + - - - - - - + + + + + - - - - - - - - - + @@ -24,7 +18,7 @@ - + From e00ae8a34d6a0c14fa3907bf10b72c69e8386b78 Mon Sep 17 00:00:00 2001 From: Micah Date: Thu, 8 Jul 2021 07:49:22 -0400 Subject: [PATCH 10/19] update version number for 0.17.0 release --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81d0833e7c..b4b73947d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,8 +28,8 @@ project(OpenSpace) set(OPENSPACE_VERSION_MAJOR 0) set(OPENSPACE_VERSION_MINOR 17) -set(OPENSPACE_VERSION_PATCH -1) -set(OPENSPACE_VERSION_STRING "Beta-10 [RC1]") +set(OPENSPACE_VERSION_PATCH 0) +set(OPENSPACE_VERSION_STRING "Beta-10") set(OPENSPACE_BASE_DIR "${PROJECT_SOURCE_DIR}") set(OPENSPACE_CMAKE_EXT_DIR "${OPENSPACE_BASE_DIR}/support/cmake") From 5da4f104e884f7ad620efde8c3285f3ded9facd9 Mon Sep 17 00:00:00 2001 From: Gene Payne Date: Thu, 8 Jul 2021 13:43:09 -0600 Subject: [PATCH 11/19] Small fix for linux gcc build error --- src/util/coordinateconversion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/coordinateconversion.cpp b/src/util/coordinateconversion.cpp index 041a126271..cc5e28aae4 100644 --- a/src/util/coordinateconversion.cpp +++ b/src/util/coordinateconversion.cpp @@ -222,7 +222,7 @@ glm::dvec2 icrsToDecimalDegrees(const std::string& ra, const std::string& dec) { } // Convert from hours/degrees, minutes, seconds to decimal degrees - double sign = signbit(static_cast(decDegrees)) ? -1.0 : 1.0; + double sign = std::signbit(static_cast(decDegrees)) ? -1.0 : 1.0; double raDeg = (raHours * 15.0) + (raMinutes * 15.0 / 60.0) + (raSeconds * 15.0 / 3600.0); From 7461303aa5e2072a090a2145a4d2ff3d06f3a496 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Tue, 13 Jul 2021 09:03:49 +0200 Subject: [PATCH 12/19] Fix to make slide deck work with new strict Lua --- data/assets/examples/slidedeck.asset | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/data/assets/examples/slidedeck.asset b/data/assets/examples/slidedeck.asset index fdd3756450..7d054dd2c1 100644 --- a/data/assets/examples/slidedeck.asset +++ b/data/assets/examples/slidedeck.asset @@ -15,17 +15,18 @@ asset.onInitialize(function () local interpolationDuration = 0.5 - function nextSlide() - helper.goToNextSlide(deck, interpolationDuration) - end + -- Add global functions for controlling slide deck and bind to keys + rawset(_G, "nextSlide", function() + helper.goToNextSlide(deck, interpolationDuration) + end) - function previousSlide() + rawset(_G, "previousSlide", function() helper.goToPreviousSlide(deck, interpolationDuration) - end + end) - function toggleSlides() + rawset(_G, "toggleSlides", function() helper.toggleSlides(deck, interpolationDuration) - end + end) helper.setCurrentSlide(deck, 1) openspace.bindKey("KP_6", "nextSlide()", "Next slide", "Next slide", "/Slides") From 3069457d674b71497b5fe1e361c3850672650e44 Mon Sep 17 00:00:00 2001 From: Micah Date: Wed, 14 Jul 2021 11:48:50 -0400 Subject: [PATCH 13/19] added new launcher images for v17 --- data/assets/util/launcher_images.asset | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/assets/util/launcher_images.asset b/data/assets/util/launcher_images.asset index 32098b0c64..d2fd2efe90 100644 --- a/data/assets/util/launcher_images.asset +++ b/data/assets/util/launcher_images.asset @@ -2,6 +2,6 @@ local DataPath = asset.syncedResource({ Name = "Launcher Images", Type = "HttpSynchronization", Identifier = "launcher_images", - Version = 1 + Version = 2 }) asset.export("DataPath", DataPath) From 3025fbc200ffdd8cf80f95c5f251d0daf793fbdf Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Thu, 15 Jul 2021 16:18:45 +0200 Subject: [PATCH 14/19] Initialize OpenGLCache to nullptr to prevent faulty memory access (thanks Marco S) --- include/openspace/rendering/renderengine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 28cee7e43a..d32734712c 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -194,7 +194,7 @@ private: ghoul::Dictionary _resolveData; ScreenLog* _log = nullptr; - ghoul::opengl::OpenGLStateCache* _openglStateCache; + ghoul::opengl::OpenGLStateCache* _openglStateCache = nullptr; properties::BoolProperty _showOverlayOnSlaves; properties::BoolProperty _showLog; From 58c216f45c42783253e43963489164bf47319a57 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Fri, 16 Jul 2021 14:18:10 +0200 Subject: [PATCH 15/19] Show an info message when asset is added by drag-and-drop --- scripts/drag_drop_handler.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/drag_drop_handler.lua b/scripts/drag_drop_handler.lua index 7042333633..fc51b0935c 100644 --- a/scripts/drag_drop_handler.lua +++ b/scripts/drag_drop_handler.lua @@ -37,7 +37,8 @@ if is_image_file(extension) then TexturePath = "]] .. filename .. [[" });]] elseif extension == ".asset" then - return [[openspace.asset.add("]] .. filename .. [[")]] + return [[openspace.printInfo("Adding asset: ']] .. filename .. [[' (drag-and-drop)"); + openspace.asset.add("]] .. filename .. [[");]] elseif extension == ".osrec" or extension == ".osrectxt" then return [[openspace.sessionRecording.startPlayback("]] .. basename .. [[")]] end From d8c5be734fb8043760839d0b6f970ae785a92f59 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 19 Jul 2021 14:01:14 +0200 Subject: [PATCH 16/19] Add a cropped version of the OpenSpace logo --- data/openspace-horiz-logo-crop.png | Bin 0 -> 62913 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/openspace-horiz-logo-crop.png diff --git a/data/openspace-horiz-logo-crop.png b/data/openspace-horiz-logo-crop.png new file mode 100644 index 0000000000000000000000000000000000000000..05ae6643e0070a33d0e1c4ddab7570874361e34e GIT binary patch literal 62913 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 Date: Mon, 19 Jul 2021 14:59:41 +0200 Subject: [PATCH 17/19] Update README.md --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 19d721dd2a..1e17b0e290 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,47 @@ -[OpenSpace](http://openspaceproject.com) is an open source, non-commercial, and freely available interactive data visualization software designed to visualize the entire known universe and portray our ongoing efforts to investigate the cosmos. Bringing the latest techniques from data visualization research to the general public, OpenSpace supports interactive presentation of dynamic data from observations, simulations, and space mission planning and operations. The software works on multiple operating systems (Windows, Linux, MacOS) with an extensible architecture powering high resolution tiled displays and planetarium domes, making use of the latest graphic card technologies for rapid data throughput. In addition, OpenSpace enables simultaneous connections across the globe creating opportunity for shared experiences among audiences worldwide. +![OpenSpace Logo](/data/openspace-horiz-logo-crop.png) +[OpenSpace](http://openspaceproject.com) is an open source, non-commercial, and freely available interactive data visualization software designed to visualize the entire known universe and portray our ongoing efforts to investigate the cosmos. Bringing the latest techniques from data visualization research to the general public, OpenSpace supports interactive presentation of dynamic data from observations, simulations, and space mission planning and operations. The software works on multiple operating systems (Windows, Linux, MacOS) with an extensible architecture capable of powering both personal computers and also high resolution tiled displays and planetarium domes. In addition, OpenSpace enables simultaneous connections across the globe creating opportunity for shared experiences among audiences worldwide. The target audience of the software reaches from the general public who wishes to explore our universe, enthusiasts interested in hacking the underlying components in OpenSpace to create unique experiences, informal science institutions wishing to create a low-cost, yet powerful exhibition piece, but also scientists desiring to visualize their datasets in a contextualized, powerful software. -The project stems from the same academic collaboration between Sweden’s [Linköping University](https://www.liu.se) (LiU) and the [American Museum of Natural History](https://www.amnh.org) (AMNH) that led to the creation of Uniview and its parent company [SCISS](http://sciss.se). Development of the software began several years ago through a close collaboration with NASA Goddard’s [Community Coordinated Modeling Center](https://ccmc.gsfc.nasa.gov) (CCMC) to model space weather forecasting and continued with visualizations of NASA’s New Horizons mission to Pluto and ESA’s Rosetta mission. This promising set of preliminary work provided a foundation for recent NASA funding, which has extended the collaboration to include the University of Utah’s [Scientific Computing and Imaging](https://www.sci.utah.edu) (SCI) Institute, [New York University](https://www.nyu.edu)’s Tandon School of Engineering, multiple informal science institutions across the United States, and multiple, international vendors. Current areas of focus within OpenSpace include: +[![License](https://img.shields.io/badge/License-MIT-purple.svg?style=flat-square)](LICENSE) +[![Download](https://img.shields.io/github/v/tag/OpenSpace/OpenSpace?label=Version&color=maroon&style=flat-square)](https://www.openspaceproject.com/installation) +![Size](https://img.shields.io/github/repo-size/OpenSpace/OpenSpace?style=flat-square&color=red) -- Visualization of dynamic simulations via interactive volumetric rendering, as a priority for communicating research in astrophysics. -- Utilization of NASA’s SPICE observational geometry system with its Planetary Data Service (PDS) to enable space mission visualizations that reveal how missions are designed to gather science. -- Globe browsing techniques across spatial and temporal scales to examine scientific campaigns on multiple planets, including close up surface exploration. +[![System Paper](https://img.shields.io/badge/System%20Paper-10.1109%2FTVCG.2019.2934259-blue?style=flat-square)](https://doi.org/10.1109/TVCG.2019.2934259) +[![GlobeBrowsing Paper](https://img.shields.io/badge/GlobeBrowsing%20Paper-https%3A%2F%2Fdoi.org%2F10.1109%2FTVCG.2017.2743958-blue?style=flat-square)](https://doi.org/10.1109/TVCG.2017.2743958) -OpenSpace requires graphics support for [OpenGL](https://www.opengl.org/) version 3.3. +![Contributors](https://img.shields.io/github/contributors/OpenSpace/OpenSpace?style=flat-square) +![Commits](https://img.shields.io/github/commit-activity/m/OpenSpace/OpenSpace?color=green&style=flat-square) -This repository contains the source code and example scenes for OpenSpace, but does not contain any data. To build and install the client, we refer to the [OpenSpace Wiki](http://wiki.openspaceproject.com/), specifically [building](http://wiki.openspaceproject.com/docs/developers/compiling/general) for [Windows](http://wiki.openspaceproject.com/docs/developers/compiling/windows), [Linux (Ubuntu)](http://wiki.openspaceproject.com/docs/developers/compiling/ubuntu), and [MacOS](http://wiki.openspaceproject.com/docs/developers/compiling/macos). Required preexisting dependencies are: [Boost](http://www.boost.org/) and [Qt](http://www.qt.io/download). Feel free to create issues for missing features, bug reports, or compile problems or contact us via [email](mailto:alexander.bock@me.com?subject=OpenSpace:). +![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/collection.jpg) -Regarding any issues, you are very welcome on our [Slack support channel](https://openspacesupport.slack.com) to which you can freely [sign-up](https://join.slack.com/t/openspacesupport/shared_invite/zt-37niq6y9-T0JaCIk4UoFLI4VF5U9Vsw). +# Background +OpenSpace started as a collaboration between Sweden's [Linköping University](https://scivis.github.io) (LiU) and the [American Museum of Natural History](https://www.amnh.org) (AMNH). Development of the software began several years ago through a close collaboration with NASA Goddard's [Community Coordinated Modeling Center](https://ccmc.gsfc.nasa.gov) (CCMC) to model space weather forecasting and continued with visualizations of NASA's New Horizons mission to Pluto and ESA's Rosetta mission to 67P/Churyumov–Gerasimenko. This promising set of preliminary work provided a foundation for continued funding from NASA, the Swedish eScience Research Centre, and the Knut and Alice Wallenberg foundation, which has extended the collaboration to include the University of Utah's [Scientific Computing and Imaging](https://www.sci.utah.edu) (SCI) Institute, [New York University](https://www.nyu.edu)'s Tandon School of Engineering, multiple informal science institutions across the world, and multiple, international vendors. + +![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/presentation.jpg) + +# Features +Some of the high-level features supported in OpenSpace are: + - AMNH's Digital Universe catalog of extrasolar datasets (stars, galaxies, quasars, ...) + - High-resolution planetary images for major objects in the solar system (Earth, Moon, Mars, Venus, ...) + - Animated 3D models representing space missions (ISS, New Horizons, JWST, ...) + - Support for custom profiles with arbitrary user-defined content + - Ability to drive any type of display environment (flat screen, multi-projector, planetariums, ...) + - Lua and JavaScript interface into the engine allowing highly customized controls + - Native support to export an interactive sessions as individual frames for video export + - much much more (see our [Changelog](http://wiki.openspaceproject.com/docs/general/releases)) + +OpenSpace requires at least support for [OpenGL](https://www.opengl.org/) version 3.3, some custom components require at least version 4.2. + +![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/display-systems.jpg) + +# Getting Started +This repository contains the source code and example profiles for OpenSpace, but does not contain any data. To build and install the application, please check out the [OpenSpace Wiki](http://wiki.openspaceproject.com/). Here, you will find two pages, a [build instruction](http://wiki.openspaceproject.com/docs/developers/compiling/general) for all operating systems and then additional instructions for [Windows](http://wiki.openspaceproject.com/docs/developers/compiling/windows), [Linux (Ubuntu)](http://wiki.openspaceproject.com/docs/developers/compiling/ubuntu), and [MacOS](http://wiki.openspaceproject.com/docs/developers/compiling/macos). + +Requirements for compiling are: + - CMake version 3.10 or above + - C++ compiler supporting C++17 (MSVC 16.10, GCC9, Clang10) + - [Boost](http://www.boost.org/) + - [Qt](http://www.qt.io/download) + +Feel free to create issues for missing features, bug reports, or compile problems or contact us via [email](mailto:openspace@amnh.org?subject=OpenSpace:). Regarding any issues, you are very welcome on our [Slack support channel](https://openspacesupport.slack.com) to which you can freely [sign-up](https://join.slack.com/t/openspacesupport/shared_invite/zt-37niq6y9-T0JaCIk4UoFLI4VF5U9Vsw). + +![Image](https://github.com/OpenSpace/openspace.github.io/raw/master/assets/images/himalaya-nkpg-dome.jpg) From 385bafeb3aba5d0d3c34c3c95226d8ed5eaa0df5 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 19 Jul 2021 16:24:07 +0200 Subject: [PATCH 18/19] Clean up the language detection on GitHub --- .gitattributes | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitattributes b/.gitattributes index 6f15cde045..e19106b7fe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,14 @@ * text=auto +# Correct GitHub's language detection shenanigans + +# Asset files are not Unity, but Lua instead +*.asset linguist-language=Lua +# We have some SPICE frame kernels that get misclassified as code +.tf -linguist-detectable +# We don't want to index the GDAL csv and xml files +modules/globebrowsing/gdal_data/* linguist-vendored + # GitHub files ATTRIBUTION text AUTHORS text From ae339823e8e887212b581b7e8a9ed3c418343912 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 19 Jul 2021 16:26:31 +0200 Subject: [PATCH 19/19] Some refinement --- .gitattributes | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index e19106b7fe..1be02425ca 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,9 +5,13 @@ # Asset files are not Unity, but Lua instead *.asset linguist-language=Lua # We have some SPICE frame kernels that get misclassified as code -.tf -linguist-detectable +*.tf -linguist-detectable # We don't want to index the GDAL csv and xml files modules/globebrowsing/gdal_data/* linguist-vendored +# No need to index any external files +*/ext/* linguist-vendored +# No C allowed +*.h linguist-language=C++ # GitHub files ATTRIBUTION text