1#ifndef TATOOINE_FLOWEXPLORER_NODES_RANDOM_PATHLINES_H
2#define TATOOINE_FLOWEXPLORER_NODES_RANDOM_PATHLINES_H
7#include <tatooine/gpu/line_shader.h>
49 m_shader{std::make_unique<gpu::line_shader>(
72 this->
template insert_input_pin<vectorfield_t>(
"3D Vector Field");
73 this->
template insert_input_pin<axis_aligned_bounding_box<N>>(
86 void update(std::chrono::duration<double>
const& dt)
override {
87 auto ms =
static_cast<float>(
88 std::chrono::duration_cast<std::chrono::milliseconds>(dt).count());
105 ImGui::SliderFloat(
"line width", &
m_line_width, 0.0f, 0.1f);
111 ImGui::SliderFloat(
"shininess", &
m_shininess, 1.0f, 80.0f);
116 ImGui::Checkbox(
"play", &
m_play);
119 ImGui::SliderFloat(
"fade_length", &
m_fade_length, 0.1f, 10.0f);
120 ImGui::SliderFloat(
"speed", &
m_speed, 0.1f, 10.0f);
129 m_shader->set_modelview_matrix(view_matrix);
130 m_shader->set_projection_matrix(projection_matrix);
152 auto work = [rp =
this] {
154 bool insert_segment =
false;
155 auto callback = [rp, &
index, &insert_segment](
auto const& y,
auto const t,
158 rp->m_gpu_data.vertexbuffer().push_back(
160 static_cast<GLfloat
>(y(1)),
161 static_cast<GLfloat
>(y(2))},
163 static_cast<GLfloat
>(dy(1)),
164 static_cast<GLfloat
>(dy(2))},
165 static_cast<GLfloat
>(t));
166 if (insert_segment) {
167 rp->m_gpu_data.indexbuffer().push_back(
index - 1);
168 rp->m_gpu_data.indexbuffer().push_back(
index);
170 insert_segment =
true;
176 rp->m_gpu_data.clear();
178 for (
size_t i = 0; i < static_cast<size_t>(rp->m_num_pathlines); ++i) {
179 auto const x0 = rp->m_boundingbox->random_point();
181 insert_segment =
false;
182 rp->m_integrator.solve(*rp->m_v, x0, t0, rp->m_btau, callback);
183 insert_segment =
false;
184 rp->m_integrator.solve(*rp->m_v, x0, t0, rp->m_ftau, callback);
186 rp->m_integration_going_on =
false;
189 this->
scene().window().do_async(work);
219 TATOOINE_REFLECTION_INSERT_METHOD(number_of_path_lines, m_num_pathlines),
220 TATOOINE_REFLECTION_INSERT_METHOD(backward_tau, m_btau),
221 TATOOINE_REFLECTION_INSERT_METHOD(forward_tau, m_ftau),
222 TATOOINE_REFLECTION_INSERT_METHOD(line_width, m_line_width),
223 TATOOINE_REFLECTION_INSERT_METHOD(contour_width, m_contour_width),
224 TATOOINE_REFLECTION_INSERT_METHOD(ambient_factor, m_ambient_factor),
225 TATOOINE_REFLECTION_INSERT_METHOD(diffuse_factor, m_diffuse_factor),
226 TATOOINE_REFLECTION_INSERT_METHOD(specular_factor, m_specular_factor),
227 TATOOINE_REFLECTION_INSERT_METHOD(shininess, m_shininess),
228 TATOOINE_REFLECTION_INSERT_METHOD(line_color, m_line_color),
229 TATOOINE_REFLECTION_INSERT_METHOD(contour_color, m_contour_color),
230 TATOOINE_REFLECTION_INSERT_METHOD(animate, m_animate),
231 TATOOINE_REFLECTION_INSERT_METHOD(play, m_play),
232 TATOOINE_REFLECTION_INSERT_METHOD(animation_min_alpha,
233 m_animation_min_alpha),
234 TATOOINE_REFLECTION_INSERT_METHOD(fade_length, m_fade_length),
235 TATOOINE_REFLECTION_INSERT_METHOD(speed, m_speed),
236 TATOOINE_REFLECTION_INSERT_METHOD(time, m_time),
237 TATOOINE_REFLECTION_INSERT_METHOD(general_alpha, m_general_alpha))
Definition: indexeddata.h:13
TATOOINE_FLOWEXPLORER_REGISTER_RENDERABLE(tatooine::flowexplorer::nodes::aabb2d, TATOOINE_REFLECTION_INSERT_GETTER(min), TATOOINE_REFLECTION_INSERT_GETTER(max), TATOOINE_REFLECTION_INSERT_GETTER(line_width), TATOOINE_REFLECTION_INSERT_GETTER(line_color))
DLL_API auto DragDouble(const char *label, double *v, double v_speed=1.0, double v_min=0.0, double v_max=0.0, const char *format="%.3lf", float power=1.0) -> bool
auto constexpr index(handle< Child, Int > const h)
Definition: handle.h:119
Definition: axis_aligned_bounding_box.h:15
Definition: random_pathlines.h:14
float m_line_color[3]
Definition: random_pathlines.h:30
bool m_animate
Definition: random_pathlines.h:38
std::unique_ptr< gpu::line_shader > m_shader
Definition: random_pathlines.h:25
void on_pin_connected(ui::input_pin &, ui::output_pin &other_pin) override
Definition: random_pathlines.h:192
bool m_play
Definition: random_pathlines.h:39
gl::indexeddata< vec< float, 3 >, vec< float, 3 >, float > m_gpu_data
Definition: random_pathlines.h:26
int m_num_pathlines
Definition: random_pathlines.h:29
void update(std::chrono::duration< double > const &dt) override
Definition: random_pathlines.h:86
float m_fade_length
Definition: random_pathlines.h:40
float m_ambient_factor
Definition: random_pathlines.h:34
float m_time
Definition: random_pathlines.h:43
axis_aligned_bounding_box< N > * m_boundingbox
Definition: random_pathlines.h:23
float m_shininess
Definition: random_pathlines.h:37
float m_contour_width
Definition: random_pathlines.h:33
void update_shader(mat4f const &projection_matrix, mat4f const &view_matrix)
Definition: random_pathlines.h:128
vectorfield_t const * m_v
Definition: random_pathlines.h:22
float m_speed
Definition: random_pathlines.h:44
float m_contour_color[3]
Definition: random_pathlines.h:31
float m_line_width
Definition: random_pathlines.h:32
float m_specular_factor
Definition: random_pathlines.h:36
float m_animation_min_alpha
Definition: random_pathlines.h:42
float m_general_alpha
Definition: random_pathlines.h:41
void on_pin_disconnected(ui::input_pin &) override
Definition: random_pathlines.h:205
void render(mat< float, 4, 4 > const &projection_matrix, mat< float, 4, 4 > const &view_matrix) override
Definition: random_pathlines.h:77
double m_ftau
Definition: random_pathlines.h:28
double m_btau
Definition: random_pathlines.h:28
void integrate_lines()
Definition: random_pathlines.h:147
bool m_integration_going_on
Definition: random_pathlines.h:45
bool is_transparent() const override
Definition: random_pathlines.h:209
float m_diffuse_factor
Definition: random_pathlines.h:35
auto draw_properties() -> bool override
Definition: random_pathlines.h:101
integrator_t m_integrator
Definition: random_pathlines.h:24
random_pathlines(flowexplorer::scene &s)
Definition: random_pathlines.h:47
Definition: renderable.h:42
auto scene() const -> auto const &
Definition: node.h:72
virtual auto type() const -> std::type_info const &=0
auto node() const -> auto const &
Definition: pin.h:29