From c8e297a5b9f29a2f5b59c3e31be8ec987689c7f0 Mon Sep 17 00:00:00 2001 From: Jonathan Fransson Date: Wed, 12 Jun 2019 15:15:15 -0600 Subject: [PATCH] debris performanslogging, fixed spherical coords and asset clean-up --- apps/OpenSpace/ext/sgct | 2 +- .../debris/volume/cartesian_volume.asset | 38 ++++++++++++++++++ .../debris/volume/debris_volume.asset | 2 +- .../volume/generated/singleDebris0.dictionary | 1 - .../volume/generated/singleDebris0.rawvolume | Bin 87808 -> 0 bytes .../earth/satellites/satellites_debris.asset | 10 ++--- .../debristasks/generate_all_debris.task | 2 +- .../debristasks/generate_all_individual.task | 16 -------- .../generate_cartesian_volume.task | 13 ++++++ .../generate_single_debris_volume.task | 8 ++-- ext/ghoul | 2 +- .../performance/performancemanager.h | 1 + modules/space/spacemodule.cpp | 2 +- .../space/tasks/generatedebrisvolumetask.cpp | 33 ++++++++++++--- src/performance/performancemanager.cpp | 38 +++++++++++++++++- 15 files changed, 130 insertions(+), 38 deletions(-) create mode 100644 data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset delete mode 100644 data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.dictionary delete mode 100644 data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.rawvolume delete mode 100644 data/tasks/volume/debristasks/generate_all_individual.task create mode 100644 data/tasks/volume/debristasks/generate_cartesian_volume.task diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 8d672fd0a7..2c774af032 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 8d672fd0a7c7ef0e6c48e1d43bacbddce1f0a10d +Subproject commit 2c774af03285e57d0bdaf9f7ca60c71bb0c144bf diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset new file mode 100644 index 0000000000..27f651d20f --- /dev/null +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/cartesian_volume.asset @@ -0,0 +1,38 @@ +-- This asset requires OpenSpace to be built with the OPENSPACE_MODULE_VOLUME enabled + +-- Before using this asset, +-- the volume data itself needs to be generated, +-- using the task 'data/tasks/volume/debristasks/generate_debris_volume.task' + +local assetHelper = asset.require('util/asset_helper') +local transforms = asset.require("scene/solarsystem/planets/earth/transforms") + +local maxApogee = 2 * 10946320; + +local volume = { + Identifier = "DebrisVolume - Cartesian", + Parent = transforms.EarthInertial.Identifier, + Renderable = { + Type = "RenderableTimeVaryingVolume", + SourceDirectory = asset.localResource("generatedCartesian"), + TransferFunction = asset.localResource("transferfunction.txt"), + StepSize = 0.01, + MinValue = 0, + MaxValue = 1, + GridType = "Cartesian", + SecondsBefore = 50*365*24*60*60, + SecondsAfter = 50*365*24*60*60 + }, + GUI = { + Path = "/Volumes" + }, + Transform = { + Scale = { + Type = "StaticScale", + Scale = maxApogee -- do not multiply this. That will not show real representation. + } + } +} + +local objects = { volume } +assetHelper.registerSceneGraphNodes(asset, objects) diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/debris_volume.asset b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/debris_volume.asset index cf90a85626..059e82e821 100644 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/debris_volume.asset +++ b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/debris_volume.asset @@ -19,7 +19,7 @@ local volume = { StepSize = 0.01, MinValue = 0, MaxValue = 1, - GridType = "Cartesian", + GridType = "Spherical", SecondsBefore = 50*365*24*60*60, SecondsAfter = 50*365*24*60*60 }, diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.dictionary b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.dictionary deleted file mode 100644 index f35569e4c6..0000000000 --- a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.dictionary +++ /dev/null @@ -1 +0,0 @@ -return {Dimensions={2.800000E1,2.800000E1,2.800000E1},GridType="Spherical",LowerDomainBound={0,0,0},MaxValue=9.730000E2,MinValue=0,Time="2018-05-04T00:00:00.000",UpperDomainBound={1.000000E0,3.141593E0,6.283185E0}} \ No newline at end of file diff --git a/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.rawvolume b/data/assets/scene/solarsystem/planets/earth/satellites/debris/volume/generated/singleDebris0.rawvolume deleted file mode 100644 index 41a340da2d529931bedb253f23f295c08b06ba3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87808 zcmeI#u?>R&30E$TG%9UTf%1#sk0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0tDth& sceneNodes); void outputLogs(); + void debrisLog(); void writeData(std::ofstream& out, const std::vector& data); diff --git a/modules/space/spacemodule.cpp b/modules/space/spacemodule.cpp index e36881acec..37d741ed5e 100644 --- a/modules/space/spacemodule.cpp +++ b/modules/space/spacemodule.cpp @@ -97,7 +97,7 @@ void SpaceModule::internalInitialize(const ghoul::Dictionary&) { fTranslation->registerClass("HorizonsTranslation"); auto fTasks = FactoryManager::ref().factory(); - ghoul_assert(fTask, "No task factory existed"); + ghoul_assert(fTasks, "No task factory existed"); fTasks->registerClass("GenerateDebrisVolumeTask"); auto fRotation = FactoryManager::ref().factory(); diff --git a/modules/space/tasks/generatedebrisvolumetask.cpp b/modules/space/tasks/generatedebrisvolumetask.cpp index 33ad83e2d6..aa9fd0f44c 100644 --- a/modules/space/tasks/generatedebrisvolumetask.cpp +++ b/modules/space/tasks/generatedebrisvolumetask.cpp @@ -379,9 +379,13 @@ std::vector readTLEFile(const std::string& filename){ glm::dvec3 cartesianToSphericalCoord(glm::dvec3 position){ glm::dvec3 sphericalPosition; + //sphericalPosition.x = pow(pow(position.x,2)+pow(position.y,2)+pow(position.z,2) , 0.5); //abs(position.x + position.y + position.z); // r + //sphericalPosition.y = atan(position.y/position.x); // theta + //sphericalPosition.z = atan(pow(pow(position.x,2)+pow(position.y,2),0.5)/position.z); // abs(position.x + position.y) // p + sphericalPosition.x = pow(pow(position.x,2)+pow(position.y,2)+pow(position.z,2) , 0.5); //abs(position.x + position.y + position.z); // r - sphericalPosition.y = atan(position.y/position.x); // theta - sphericalPosition.z = atan(pow(pow(position.x,2)+pow(position.y,2),0.5)/position.z); // abs(position.x + position.y) // p + sphericalPosition.y = acos(position.z/sphericalPosition.x); // theta + sphericalPosition.z = atan(position.y/position.x); // abs(position.x + position.y) // p return sphericalPosition; } @@ -405,6 +409,8 @@ std::vector getPositionBuffer(std::vector tleData, glm::dvec3 position = keplerTranslator.debrisPos(timeInSeconds); if( gridType == "Spherical"){ position = cartesianToSphericalCoord(position); + //LINFO(fmt::format("pos: {} ", position)); + } positionBuffer.push_back(position); @@ -451,7 +457,7 @@ int getIndexFromPosition(glm::dvec3 position, glm::uvec3 dim, float maxApogee, s // epsilon is to make sure that for example if newPosition.x/maxApogee = 1, // then the index for that dimension will not exceed the range of the grid. float epsilon = static_cast(0.000000001); - if(gridType == "Cartesian" || gridType == "Spherical"){ + if(gridType == "Cartesian"){ //|| gridType == "Spherical"){ glm::dvec3 newPosition = glm::dvec3(position.x + maxApogee ,position.y + maxApogee ,position.z + maxApogee); @@ -463,15 +469,25 @@ int getIndexFromPosition(glm::dvec3 position, glm::uvec3 dim, float maxApogee, s return coordinateIndex.z * (dim.x * dim.y) + coordinateIndex.y * dim.x + coordinateIndex.x; } - //else if(gridType == "Spherical"){ + else if(gridType == "Spherical"){ + glm::dvec3 newPosition = glm::dvec3(position.x + maxApogee + ,position.y + maxApogee + ,position.z + maxApogee); + + glm::uvec3 coordinateIndex = glm::uvec3(static_cast(newPosition.x * dim.x / (2 * (maxApogee + epsilon))) + ,static_cast(newPosition.y * dim.y / (2 * (maxApogee + epsilon))) + ,static_cast(newPosition.z * dim.z / (2 * (maxApogee + epsilon)))); -// } + return coordinateIndex.z * (dim.x * dim.y) + coordinateIndex.y * dim.x + coordinateIndex.x; + } } int* mapDensityToVoxels(int* densityArray, std::vector positions, glm::uvec3 dim, float maxApogee, std::string gridType) { for(const glm::dvec3& position : positions) { + //LINFO(fmt::format("pos: {} ", position)); int index = getIndexFromPosition(position, dim, maxApogee, gridType); + //LINFO(fmt::format("index: {} ", index)); ++densityArray[index]; } @@ -577,7 +593,12 @@ void GenerateDebrisVolumeTask::perform(const Task::ProgressCallback& progressCal int *densityArrayp = new int[size](); //densityArrayp = mapDensityToVoxels(densityArrayp, generatedPositions, _dimensions, maxApogee); - densityArrayp = mapDensityToVoxels(densityArrayp, startPositionBuffer, _dimensions, _maxApogee, _gridType); + //densityArrayp = mapDensityToVoxels(densityArrayp, startPositionBuffer, _dimensions, _maxApogee, _gridType); + std::vector testBuffer; + testBuffer.push_back(glm::dvec3(0,0,0)); + testBuffer.push_back(glm::dvec3(100,100,100)); + + densityArrayp = mapDensityToVoxels(densityArrayp, testBuffer, _dimensions, _maxApogee, _gridType); // create object rawVolume volume::RawVolume rawVolume(_dimensions); diff --git a/src/performance/performancemanager.cpp b/src/performance/performancemanager.cpp index e4075bf055..2bef660288 100644 --- a/src/performance/performancemanager.cpp +++ b/src/performance/performancemanager.cpp @@ -210,6 +210,7 @@ void PerformanceManager::outputLogs() { PerformanceLayout* layout = performanceData(); const size_t writeStart = (PerformanceLayout::NumberValues - 1) - _currentTick; + // Log function performance for (int16_t n = 0; n < layout->nFunctionEntries; n++) { const PerformanceLayout::FunctionPerformanceLayout& function = @@ -255,6 +256,40 @@ void PerformanceManager::outputLogs() { } } +void PerformanceManager::debrisLog() { + PerformanceLayout* layout = performanceData(); + const size_t writeStart = (PerformanceLayout::NumberValues - 1) - _currentTick; + + //for (int16_t n = 0; n < layout->nScaleGraphEntries; n++) { + for (int16_t n = 7; n < 12; n++) { + //lol fult + const PerformanceLayout::SceneGraphPerformanceLayout node = + layout->sceneGraphEntries[n]; + + // Open file + std::string filename = formatLogName(node.name); + + std::ofstream out = std::ofstream( + absPath(std::move(filename)), + std::ofstream::out | std::ofstream::app + ); + + // Comma separate data + for (size_t i = writeStart; i < PerformanceLayout::NumberValues; i++) { + const std::vector data = { + node.renderTime[i], + node.updateRenderable[i], + node.updateRotation[i], + node.updateScaling[i], + node.updateTranslation[i] + }; + writeData(out, data); + } + out.close(); + } + +} + void PerformanceManager::writeData(std::ofstream& out, const std::vector& data) { for (size_t i = 0; i < data.size() - 1; i++) { out << data[i] << ","; @@ -450,7 +485,8 @@ void PerformanceManager::storeScenePerformanceMeasurements( _performanceMemory->releaseLock(); if (_loggingEnabled && _currentTick == PerformanceLayout::NumberValues - 1) { - outputLogs(); + //outputLogs(); + debrisLog(); } tick();