From c87d78465655f577b17d8cb3ade431a3201c6a60 Mon Sep 17 00:00:00 2001 From: Matthias Berg Date: Wed, 18 Apr 2018 11:12:42 -0400 Subject: [PATCH] Test MAS model rendering with existing functionality --- data/assets/masTest.scene | 53 +++++++++++++++++++ data/assets/scene/solarsystem/model.asset | 1 + .../scene/solarsystem/model/mas/mas.asset | 36 +++++++++++++ .../model/mas/transferfunctions/basic.tf | 9 ++++ data/tasks/batchConversion.task | 21 ++++++++ data/tasks/conversion.task | 12 +++++ data/tasks/inspect.task | 8 +++ .../openspace/rendering/transferfunction.h | 2 +- .../rendering/renderablemultiresvolume.cpp | 2 +- .../rendering/renderabletimevaryingvolume.cpp | 2 +- modules/volume/transferfunctionhandler.cpp | 3 +- modules/volume/transferfunctionhandler.h | 1 - src/rendering/transferfunction.cpp | 16 +++--- 13 files changed, 153 insertions(+), 13 deletions(-) create mode 100644 data/assets/masTest.scene create mode 100644 data/assets/scene/solarsystem/model.asset create mode 100644 data/assets/scene/solarsystem/model/mas/mas.asset create mode 100644 data/assets/scene/solarsystem/model/mas/transferfunctions/basic.tf create mode 100644 data/tasks/batchConversion.task create mode 100644 data/tasks/conversion.task create mode 100644 data/tasks/inspect.task diff --git a/data/assets/masTest.scene b/data/assets/masTest.scene new file mode 100644 index 0000000000..e65e63ae2a --- /dev/null +++ b/data/assets/masTest.scene @@ -0,0 +1,53 @@ +local assetHelper = asset.require('util/asset_helper') +local sceneHelper = asset.require('util/scene_helper') +local propertyHelper = asset.require('util/property_helper') + +-- Specifying which other assets should be loaded in this scene +asset.require('spice/base') + +assetHelper.requestAll(asset, 'scene/solarsystem/sun') +assetHelper.requestAll(asset, 'scene/digitaluniverse') + +-- Load default key bindings applicable to most scenes +asset.require('util/default_keybindings') +asset.request('customization/globebrowsing') + + +local sunAsset = asset.require('scene/solarsystem/sun/sun') +local earthAsset = asset.require('scene/solarsystem/planets/earth/earth') +local masAsset = asset.require('scene/solarsystem/model/mas/mas') + +asset.onInitialize(function () + -- openspace.time.setTime("2017 JUN 01 00:00:00") + openspace.time.setTime(openspace.time.currentWallTime()) + + openspace.setDefaultDashboard() + openspace.setDefaultGuiSorting() + + openspace.globebrowsing.loadWMSServersFromFile( + openspace.absPath("${DATA}/globebrowsing_servers.lua") + ) + + openspace.addVirtualProperty( + "BoolProperty", + "Show Trails", + "Scene.*Trail.renderable.Enabled", + "Disable or enable all trails of the sHmmcene at the same time", + true, + nil, + nil + ) + + openspace.navigation.setCameraState({ + Focus = masAsset.Mas.Identifier, + Position = { 10000000000, 10000000000, 10000000000 }, + Rotation = { 0.758797, 0.221490, -0.605693, -0.091135 }, + }) + +end) + +asset.onDeinitialize(function () + sceneHelper.unbindKeys(Keybindings) + + openspace.removeVirtualProperty("*Trail.renderable.Enabled") +end) diff --git a/data/assets/scene/solarsystem/model.asset b/data/assets/scene/solarsystem/model.asset new file mode 100644 index 0000000000..5287bc4071 --- /dev/null +++ b/data/assets/scene/solarsystem/model.asset @@ -0,0 +1 @@ +asset.request('.model/mas') \ No newline at end of file diff --git a/data/assets/scene/solarsystem/model/mas/mas.asset b/data/assets/scene/solarsystem/model/mas/mas.asset new file mode 100644 index 0000000000..86dd875560 --- /dev/null +++ b/data/assets/scene/solarsystem/model/mas/mas.asset @@ -0,0 +1,36 @@ +local assetHelper = asset.require("util/asset_helper") +local sunTransforms = asset.require('scene/solarsystem/sun/transforms') +asset.require("spice/base") + +-- Volume module + +local Mas = { + Identifier = "Mas", + Parent = sunTransforms.SolarSystemBarycenter.Identifier, + Renderable = { + Type = "RenderableTimeVaryingVolume", + Dimensions = {699, 315, 295}, + StepSize = "0.01", + TransferFunction = "${DATA}/mas-data/raw/basic.tf", + SourceDirectory = "${DATA}/mas-data/raw", + LowerValueBound = 1, + UpperValueBound = 1000, + MinValue = 0.0, + MaxValue = 56000.0, + GridType = "Spherical", + SecondsBefore = 24*60*60, + SecondsAfter = 5.0, + Time = "2012-07-01T00:00:00.001", + VisUnit = "rho", + }, + Translation = { + Type = "StaticTranslation", + Position = {10000.0, 10000.0, 10000.0}, + }, + GUI = { + Path = "/Solar System/Mas", + Hidden = true + }, +} + +assetHelper.registerSceneGraphNodesAndExport(asset, {Mas}) diff --git a/data/assets/scene/solarsystem/model/mas/transferfunctions/basic.tf b/data/assets/scene/solarsystem/model/mas/transferfunctions/basic.tf new file mode 100644 index 0000000000..6e507ed525 --- /dev/null +++ b/data/assets/scene/solarsystem/model/mas/transferfunctions/basic.tf @@ -0,0 +1,9 @@ +width 1024 +lower 0.0 +upper 1.0 +mappingkey 0.15 250 0 0 0 +mappingkey 0.20 250 0 0 20 +mappingkey 0.35 250 20 0 20 +mappingkey 0.40 250 0 0 0 +mappingkey 0.60 250 0 0 0 +mappingkey 0.80 0 0 200 255 \ No newline at end of file diff --git a/data/tasks/batchConversion.task b/data/tasks/batchConversion.task new file mode 100644 index 0000000000..1882f5b8fa --- /dev/null +++ b/data/tasks/batchConversion.task @@ -0,0 +1,21 @@ +-- This is the BATSRUS batch conversion example.. + +path = "${DATA}/mas-sampledata/CORHEL_MAS/rawdata/"; +baseNames = {"3d__var_1_e20120714-060000-000.out", "3d__var_1_e20120714-061015-031.out"} + +tasks = {} + +for i=1,#baseNames do + tasks[#tasks+1] = { + Type = "KameleonVolumeToRawTask", + Input = path .. baseNames[i] .. ".cdf", + Variable = "T", + Dimensions = {129, 101, 101}, + LowerDomainBound = {-224, -32, -32}, + UpperDomainBound = {32, 32, 32}, + RawVolumeOutput = path .. baseNames[i] .. ".rawvolume", + DictionaryOutput = path .. baseNames[i] .. ".dictionary" + } +end + +return tasks; \ No newline at end of file diff --git a/data/tasks/conversion.task b/data/tasks/conversion.task new file mode 100644 index 0000000000..23603d39ab --- /dev/null +++ b/data/tasks/conversion.task @@ -0,0 +1,12 @@ + +return {{ + Type = "KameleonVolumeToRawTask", + Input = "${DATA}/mas-data/mas_merged_step_101.cdf", + Variable = "rho", + Dimensions = {699, 315, 295}, + LowerDomainBound = {0, -90, 0}, + UpperDomainBound = {2.5, 90, 360}, + Time = "2017-06-01T00:00:00.001", + RawVolumeOutput = "${DATA}/mas-data/raw/mas_merged_step_101.cdf.rawvolume", + DictionaryOutput = "${DATA}/mas-data/raw/mas_merged_step_101.cdf.dictionary" +}} \ No newline at end of file diff --git a/data/tasks/inspect.task b/data/tasks/inspect.task new file mode 100644 index 0000000000..99ba7a8c8a --- /dev/null +++ b/data/tasks/inspect.task @@ -0,0 +1,8 @@ + +return { + { + Type = "KameleonDocumentationTask", + Input = "${DATA}/mas-data/mas_merged_step_101.cdf", + Output = "${DATA}/mas-data/output.html" + } +} diff --git a/include/openspace/rendering/transferfunction.h b/include/openspace/rendering/transferfunction.h index 4f88260d6c..c7688e75e3 100644 --- a/include/openspace/rendering/transferfunction.h +++ b/include/openspace/rendering/transferfunction.h @@ -43,7 +43,7 @@ public: void setPath(const std::string& filepath); ghoul::opengl::Texture& getTexture(); void bind(); - void update(); + void updateTexture(); glm::vec4 sample(size_t t); size_t width(); void setCallback(TfChangedCallback callback); diff --git a/modules/multiresvolume/rendering/renderablemultiresvolume.cpp b/modules/multiresvolume/rendering/renderablemultiresvolume.cpp index f23dd643e2..0f24b36c0e 100644 --- a/modules/multiresvolume/rendering/renderablemultiresvolume.cpp +++ b/modules/multiresvolume/rendering/renderablemultiresvolume.cpp @@ -463,7 +463,7 @@ void RenderableMultiresVolume::initializeGL() { success &= _atlasManager && _atlasManager->initialize(); - _transferFunction->update(); + _transferFunction->updateTexture(); success &= isReady(); diff --git a/modules/volume/rendering/renderabletimevaryingvolume.cpp b/modules/volume/rendering/renderabletimevaryingvolume.cpp index 09f331c3d3..1b4d6849b8 100644 --- a/modules/volume/rendering/renderabletimevaryingvolume.cpp +++ b/modules/volume/rendering/renderabletimevaryingvolume.cpp @@ -278,7 +278,6 @@ void RenderableTimeVaryingVolume::initializeGL() { t.texture->uploadTexture(); } - _transferFunctionHandler->initialize(); _clipPlanes->initialize(); _raycaster = std::make_unique(nullptr, _transferFunctionHandler, _clipPlanes); @@ -360,6 +359,7 @@ void RenderableTimeVaryingVolume::loadTimestepMetadata(const std::string& path) std::string timeString = dictionary.value(KeyTime); t.time = Time::convertTime(timeString); + // t.time = Time::convertTime("2012-07-01T00:00:00.001"); t.inRam = false; t.onGpu = false; diff --git a/modules/volume/transferfunctionhandler.cpp b/modules/volume/transferfunctionhandler.cpp index 4e30c6c35b..1467df0031 100644 --- a/modules/volume/transferfunctionhandler.cpp +++ b/modules/volume/transferfunctionhandler.cpp @@ -115,13 +115,13 @@ namespace openspace { } void TransferFunctionHandler::setHistogramProperty(std::shared_ptr histogram) { + // histogram->print(); _histogramProperty.setValue(histogram->getBinaryData()); } void TransferFunctionHandler::setTexture() { if (_transferFunctionProperty.value().createTexture(_texture)) { uploadTexture(); - useTxtTexture = false; } } @@ -156,6 +156,7 @@ namespace openspace { void TransferFunctionHandler::setFilepath(const std::string& path) { _filePath = path; + _transferFunction->updateTexture(); } ghoul::opengl::Texture& TransferFunctionHandler::getTexture() { diff --git a/modules/volume/transferfunctionhandler.h b/modules/volume/transferfunctionhandler.h index cdfaaa567e..8f2bccf979 100644 --- a/modules/volume/transferfunctionhandler.h +++ b/modules/volume/transferfunctionhandler.h @@ -67,7 +67,6 @@ public: std::shared_ptr getTransferFunction(); private: - bool useTxtTexture = true; properties::StringProperty _transferFunctionPath; properties::StringProperty _dataUnit; properties::StringProperty _minValue; diff --git a/src/rendering/transferfunction.cpp b/src/rendering/transferfunction.cpp index 4d3800be54..ff5888ae46 100644 --- a/src/rendering/transferfunction.cpp +++ b/src/rendering/transferfunction.cpp @@ -87,13 +87,13 @@ void TransferFunction::setPath(const std::string& filepath) { ghoul::opengl::Texture& TransferFunction::getTexture() { ghoul_assert(_texture != nullptr, "Transfer function is null"); - update(); + updateTexture(); return *_texture.get(); } -void TransferFunction::update() { - /* if (_needsUpdate) { - if (hasExtension(_filepath, "txt")) { +void TransferFunction::updateTexture() { + if (_needsUpdate) { + if (hasExtension(_filepath, "tf")) { setTextureFromTxt(); } else { setTextureFromImage(); @@ -103,7 +103,7 @@ void TransferFunction::update() { if (_tfChangedCallback) { _tfChangedCallback(*this); } - }*/ + } } void TransferFunction::setCallback(TfChangedCallback callback) { @@ -131,7 +131,7 @@ void TransferFunction::setTextureFromTxt(std::shared_ptr std::string key; iss >> key; - if(key == "width") { + if(key == "width") { iss >> width; } else if(key == "lower") { iss >> lower; @@ -240,12 +240,12 @@ glm::vec4 TransferFunction::sample(size_t offset) { } size_t TransferFunction::width() { - update(); + updateTexture(); return _texture->width(); } void TransferFunction::bind() { - update(); + updateTexture(); _texture->bind(); } }