Skip to content

Commit

Permalink
Add wavelength slider to brdf options window
Browse files Browse the repository at this point in the history
  • Loading branch information
4str0m committed Aug 18, 2018
1 parent 00bfd26 commit f4fbf82
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 18 deletions.
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ add_executable(tekari
include/tekari/slider_2d.h src/slider_2d.cpp
include/tekari/powitacq.h include/tekari/powitacq.inl
include/tekari/bsdf_data_sample.h src/bsdf_data_sample.cpp
include/tekari/wavelength_slider.h src/wavelength_slider.cpp
include/tekari/standard_data_sample.h
include/tekari/matrix_xx.h
include/tekari/raw_measurement.h
Expand All @@ -215,7 +216,8 @@ add_executable(tekari
)

add_executable(tests
"src/tests.cpp"
include/tekari/powitacq.h include/tekari/powitacq.inl
src/tests.cpp
)

if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Emscripten")
Expand Down
9 changes: 7 additions & 2 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ TODO SORTED:


1. Fix bugs:
1.1 add spectral plot
1.3 fix rendering update
1.5 metadata for bsdf format <- done
1.6 make better logo

2. make a release
3. luminance height field

4. rgb visualization
5. nice spectral widget
5. nice spectral widget
2 changes: 0 additions & 2 deletions include/tekari/bsdf_application.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,8 @@ class BSDFApplication : public Screen {
// bsdf settings
Button* m_display_as_log;
Button* m_view_toggles[DataSample::Views::VIEW_COUNT];
Slider* m_wavelength_slider;
FloatBox<float>* m_phi_float_box;
FloatBox<float>* m_theta_float_box;
Label* m_wavelength_label;
Slider2D* m_incident_angle_slider;

// dialog windows
Expand Down
3 changes: 3 additions & 0 deletions include/tekari/bsdf_data_sample.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class BSDFDataSample : public DataSample
virtual void init() override;
virtual void set_incident_angle(const Vector2f& incident_angle) override;
virtual void set_intensity_index(size_t displayed_wavelength) override;

virtual inline const float* wavelengths() const override { return &m_brdf.wavelengths()[0]; }

virtual inline string wavelength_str() override
{
if (m_intensity_index == 0)
Expand Down
27 changes: 14 additions & 13 deletions src/bsdf_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <tekari/arrow.h>
#include <tekari/bsdf_data_sample.h>
#include <tekari/standard_data_sample.h>
#include <tekari/wavelength_slider.h>
#include <tekari_resources.h>

#define FOOTER_HEIGHT 25
Expand Down Expand Up @@ -876,27 +877,25 @@ void BSDFApplication::toggle_brdf_options_window()

size_t wavelength_index = m_selected_ds ? m_selected_ds->intensity_index() : 0;
string wavelength_str = m_selected_ds ? m_selected_ds->wavelength_str() : "0 nm";
m_wavelength_label = add_text("Wavelength:", wavelength_str);

m_wavelength_slider = new Slider{ window };
m_wavelength_slider->set_range(make_pair(0, m_selected_ds ? m_selected_ds->intensity_count()-1 : 1));
m_wavelength_slider->set_callback([this](float value) {
int int_val = static_cast<int>(round(value));
m_wavelength_slider->set_value(int_val);
m_selected_ds->set_intensity_index(int_val);
m_wavelength_label->set_caption(m_selected_ds->wavelength_str());
auto wavelength_label = add_text("Wavelength:", wavelength_str);

auto wavelength_slider = new WavelengthSlider{ window, m_selected_ds->wavelengths(), m_selected_ds->intensity_count()-1 };
wavelength_slider->set_callback([this, wavelength_label, wavelength_slider](float /*unused*/) {
int wavelength_index = wavelength_slider->wavelength_index();
m_selected_ds->set_intensity_index(wavelength_index);
wavelength_label->set_caption(m_selected_ds->wavelength_str());
reprint_footer();
});
m_wavelength_slider->set_enabled(m_selected_ds != nullptr);
m_wavelength_slider->set_value(wavelength_index);
wavelength_slider->set_enabled(m_selected_ds != nullptr);
wavelength_slider->set_value(wavelength_index);

return window;
});
}

void BSDFApplication::update_selection_info_window()
{
m_selected_ds->update_point_selection();
if (m_selected_ds) m_selected_ds->update_point_selection();
if(m_selection_info_window) toggle_selection_info_window();
toggle_selection_info_window();
}
Expand Down Expand Up @@ -1032,7 +1031,6 @@ void BSDFApplication::select_data_sample(shared_ptr<DataSample> data_sample)
m_bsdf_canvas->select_data_sample(data_sample);

reprint_footer();
update_selection_info_window();
if (m_metadata_window)
{
toggle_metadata_window();
Expand All @@ -1041,7 +1039,10 @@ void BSDFApplication::select_data_sample(shared_ptr<DataSample> data_sample)
if (m_brdf_options_window)
toggle_brdf_options_window();
if (m_selected_ds)
{
update_selection_info_window();
toggle_brdf_options_window();
}

request_layout_update();

Expand Down
28 changes: 28 additions & 0 deletions src/tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <tekari/matrix_xx.h>
#define POWITACQ_IMPLEMENTATION
#include <tekari/powitacq.h>
#include <tekari/cie1931.h>

using namespace tekari;

Expand Down Expand Up @@ -125,5 +126,32 @@ int main(int argc, char const* argv[])
// }
// cout << "Float array version " << time_string(t.reset()) << endl;

const size_t n_wavelengths = 20;

for(size_t w = 0; w < n_wavelengths; ++w)
{
float lambda = CIE_LAMBDA_MIN + (CIE_LAMBDA_MAX - CIE_LAMBDA_MIN) * w / (n_wavelengths-1);

Vector3f XYZ = Vector3f{ cie_interp(cie_x, lambda), cie_interp(cie_y, lambda), cie_interp(cie_z, lambda) }
* cie_interp(cie_d65, lambda) * (1.f / (CIE_LAMBDA_MAX - CIE_LAMBDA_MIN));

Vector3f rgb{ 0.0f };
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
rgb[i] += xyz_to_srgb[i][j] * XYZ[j];

rgb[0] = to_srgb(rgb[0] * lambda);
rgb[1] = to_srgb(rgb[1] * lambda);
rgb[2] = to_srgb(rgb[2] * lambda);

rgb = enoki::max(enoki::normalize(rgb), Vector3f{ 0.0f });

Log(Error, "%fnm -> xyz[%f, %f, %f] -> rgb[%f, %f, %f]\n",
lambda,
XYZ[0], XYZ[1], XYZ[2],
rgb[0], rgb[1], rgb[2]);
}


return 0;
}

0 comments on commit f4fbf82

Please sign in to comment.