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