From cbb4f55ed9a02ecc1f28965167ecdcd37e95e454 Mon Sep 17 00:00:00 2001
From: acdemiralp <demiralpali@gmail.com>
Date: Sat, 20 Feb 2021 21:07:45 +0100
Subject: [PATCH] Geometry and volume are optional.
---
offline_ray_tracer/include/settings.hpp | 18 +++++++------
offline_ray_tracer/source/main.cpp | 34 +++++++++++++++----------
2 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/offline_ray_tracer/include/settings.hpp b/offline_ray_tracer/include/settings.hpp
index 90655bd..41d7a5f 100644
--- a/offline_ray_tracer/include/settings.hpp
+++ b/offline_ray_tracer/include/settings.hpp
@@ -40,13 +40,15 @@ struct settings
if (iteratee.isMember("volume" )) entry.volume = iteratee["volume" ].asString();
}
- transfer_function = root["transfer_function"] .asString();
- time_scale = root["time_scale" ] .asFloat ();
- loop = root["loop" ] .asBool ();
- image_size = {root["image_size" ][0].asUInt (),
- root["image_size" ][1].asUInt ()};
- samples = root["samples" ] .asUInt ();
- update_rate = root["update_rate" ] .asFloat ();
+ if (root.isMember("transfer_function"))
+ transfer_function = root["transfer_function"] .asString();
+
+ time_scale = root["time_scale" ] .asFloat ();
+ loop = root["loop" ] .asBool ();
+ image_size = {root["image_size" ][0].asUInt (),
+ root["image_size" ][1].asUInt ()};
+ samples = root["samples" ] .asUInt ();
+ update_rate = root["update_rate" ] .asFloat ();
for (auto& iteratee : root["key_frames"])
{
@@ -74,7 +76,7 @@ struct settings
// Input settings.
std::vector<data_filepath> data_filepaths = {};
- std::string transfer_function = "";
+ std::string transfer_function = std::string();
float time_scale = 1000.0f;
bool loop = true;
diff --git a/offline_ray_tracer/source/main.cpp b/offline_ray_tracer/source/main.cpp
index 432b1d5..3724831 100644
--- a/offline_ray_tracer/source/main.cpp
+++ b/offline_ray_tracer/source/main.cpp
@@ -25,8 +25,7 @@
std::int32_t main(std::int32_t argc, char** argv)
{
std::cout << "Parsing settings.\n";
- auto settings = rt::settings(argv[1]);
- auto transfer_function = rt::transfer_function(settings.transfer_function);
+ auto settings = rt::settings(argv[1]);
std::cout << "Setting up renderer.\n";
auto renderer = vtkSmartPointer<vtkRenderer> ::New();
@@ -52,17 +51,26 @@ std::int32_t main(std::int32_t argc, char** argv)
interpolator->AddCamera (key_frame.time, camera);
}
- std::cout << "Setting up actors and volumes.\n";
- auto pd_mapper = vtkSmartPointer<vtkPolyDataMapper> ::New();
- auto ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>::New();
- auto pd_actor = vtkSmartPointer<vtkActor> ::New();
- auto ug_volume = vtkSmartPointer<vtkVolume> ::New();
- pd_actor ->SetMapper (pd_mapper);
- ug_volume->SetMapper (ug_mapper);
- renderer ->AddActor (pd_actor );
- renderer ->AddVolume (ug_volume);
- ug_volume->GetProperty()->SetScalarOpacity(transfer_function.opacity_function);
- ug_volume->GetProperty()->SetColor (transfer_function.color_function );
+ std::cout << "Setting up geometry.\n";
+ auto pd_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+ auto pd_actor = vtkSmartPointer<vtkActor> ::New();
+ if (!settings.data_filepaths[0].geometry.empty())
+ {
+ pd_actor->SetMapper(pd_mapper);
+ renderer->AddActor (pd_actor );
+ }
+
+ std::cout << "Setting up volume.\n";
+ auto ug_mapper = vtkSmartPointer<vtkUnstructuredGridVolumeRayCastMapper>::New();
+ auto ug_volume = vtkSmartPointer<vtkVolume> ::New();
+ if (!settings.data_filepaths[0].volume.empty())
+ {
+ auto tf = rt::transfer_function(settings.transfer_function);
+ ug_volume->GetProperty()->SetScalarOpacity(tf.opacity_function);
+ ug_volume->GetProperty()->SetColor (tf.color_function );
+ ug_volume->SetMapper (ug_mapper);
+ renderer ->AddVolume (ug_volume);
+ }
std::cout << "Setting up video writer.\n";
auto window_to_image = vtkSmartPointer<vtkWindowToImageFilter>::New();
--
GitLab