gtsam_points
Loading...
Searching...
No Matches
shader_setting.hpp
Go to the documentation of this file.
1#ifndef GUIK_SHADER_SETTING_HPP
2#define GUIK_SHADER_SETTING_HPP
3
4#include <memory>
5#include <optional>
6#include <unordered_map>
7
8#include <glk/drawable.hpp>
9#include <glk/make_shared.hpp>
10#include <guik/gl_canvas.hpp>
12
13namespace guik {
14
21struct ColorMode {
23};
24
29 enum MODE { SCREENSPACE = 0, METRIC = 1 };
30};
31
36 enum MODE { RECTANGLE = 0, CIRCLE = 1 };
37};
38
41
43template <typename T>
45 if constexpr (std::is_same<T, int>::value) {
47 } else if constexpr (std::is_same<T, Eigen::Vector2i>::value) {
49 } else if constexpr (std::is_same<T, Eigen::Vector3i>::value) {
51 } else if constexpr (std::is_same<T, Eigen::Vector4i>::value) {
53 } else if constexpr (std::is_same<T, float>::value) {
55 } else if constexpr (std::is_same<T, Eigen::Vector2f>::value) {
57 } else if constexpr (std::is_same<T, Eigen::Vector3f>::value) {
59 } else if constexpr (std::is_same<T, Eigen::Vector4f>::value) {
61 } else if constexpr (std::is_same<T, Eigen::Matrix4f>::value) {
63 } else if constexpr (std::is_same<T, std::vector<int>>::value) {
65 } else if constexpr (std::is_same<T, std::vector<float>>::value) {
67 } else {
69 }
70}
71
75public:
77 ShaderParameter() : type(ShaderDataType::INVALID), name(0), mat4f(Eigen::Matrix4f::Zero()) {}
78
80 template <typename T>
81 ShaderParameter(std::uint64_t name, const T& v) : type(deduce_data_type<T>()),
82 name(name) {
83 set_value<T>(v);
84 }
85
87 bool valid() const { return type != ShaderDataType::INVALID && name != 0; }
88
90 void invalidate() {
92 name = 0;
93 mat4f.setZero();
94 }
95
97 template <typename T>
98 T get_value() const {
99 if (type != deduce_data_type<T>()) {
100 std::cerr << "error: type mismatch when getting shader parameter " << name << std::endl;
101 abort();
102 }
103
104 if constexpr (std::is_same<T, std::vector<int>>::value || std::is_same<T, std::vector<float>>::value) {
105 const int* ptr = reinterpret_cast<const int*>(&mat4f);
106 int num_data = ptr[0];
107
108 T v(num_data);
109 memcpy(v.data(), &ptr[1], sizeof(typename T::value_type) * num_data);
110 return v;
111 } else {
112 return *reinterpret_cast<const T*>(&mat4f);
113 }
114 }
115
117 template <typename T>
118 void set_value(const T& value) {
119 if (type != deduce_data_type<T>()) {
120 std::cerr << "error: type mismatch when getting shader parameter " << name << std::endl;
121 abort();
122 }
123
124 if constexpr (std::is_same<T, std::vector<int>>::value || std::is_same<T, std::vector<float>>::value) {
125 if (value.size() > 15) {
126 std::cerr << "error: array size exceeds the maximum limit of 15 for shader parameter " << name << std::endl;
127 abort();
128 }
129
130 int* ptr = reinterpret_cast<int*>(&mat4f);
131 ptr[0] = static_cast<int>(value.size());
132 memcpy(&ptr[1], value.data(), sizeof(typename T::value_type) * value.size());
133 } else {
134 *reinterpret_cast<T*>(&mat4f) = value;
135 }
136 }
137
139 void set(glk::GLSLShader& shader) const {
140 switch (type) {
142 shader.set_uniform(name, get_value<int>());
143 break;
145 shader.set_uniform(name, get_value<Eigen::Vector2i>());
146 break;
148 shader.set_uniform(name, get_value<Eigen::Vector3i>());
149 break;
151 shader.set_uniform(name, get_value<Eigen::Vector4i>());
152 break;
154 shader.set_uniform(name, get_value<float>());
155 break;
157 shader.set_uniform(name, get_value<Eigen::Vector2f>());
158 break;
160 shader.set_uniform(name, get_value<Eigen::Vector3f>());
161 break;
163 shader.set_uniform(name, get_value<Eigen::Vector4f>());
164 break;
166 shader.set_uniform(name, get_value<Eigen::Matrix4f>());
167 break;
169 shader.set_uniform(name, get_value<std::vector<int>>());
170 break;
172 shader.set_uniform(name, get_value<std::vector<float>>());
173 break;
174 default:
175 std::cerr << "error: invalid shader parameter type for " << name << std::endl;
176 break;
177 }
178 }
179
180public:
182 std::uint64_t name;
183 Eigen::Matrix4f mat4f;
184};
185
188public:
189 using Ptr = std::shared_ptr<ShaderSetting>;
190 using ConstPtr = std::shared_ptr<const ShaderSetting>;
191
198
202
206 ShaderSetting(int color_mode, const Eigen::Matrix4f& transform);
207
211 template <typename Transform>
212 ShaderSetting(int color_mode, const Transform& transform) : ShaderSetting(color_mode, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {}
213
216
219
221 virtual ~ShaderSetting() {}
222
225
230 template <typename T>
231 ShaderSetting& add(const std::string& name_, const T& value) {
232 const std::uint64_t name = glk::hash(name_);
233
234 for (int i = 0; i < params.size() && params[i].valid(); i++) {
235 if (params[i].name == name) {
236 params[i] = ShaderParameter(name, value);
237 return *this;
238 }
239 }
240
241 params.emplace_back(ShaderParameter(name, value));
242 return *this;
243 }
244
248 template <typename T>
249 std::optional<T> get(const std::string& name_) {
250 const std::uint64_t name = glk::hash(name_);
251
252 for (const auto& param : params) {
253 if (!param.valid() || param.name != name) {
254 continue;
255 }
256
257 if (param.type != deduce_data_type<T>()) {
258 std::cerr << "warning: type mismatch for shader parameter " << name_ << std::endl;
259 return std::nullopt;
260 }
261
262 return param.get_value<T>();
263 }
264
265 return std::nullopt;
266 }
267
271 template <typename T>
272 std::optional<T> get(const std::string& name_) const {
273 const std::uint64_t name = glk::hash(name_);
274
275 for (const auto& param : params) {
276 if (!param.valid() || param.name != name) {
277 continue;
278 }
279
280 if (param.type != deduce_data_type<T>()) {
281 std::cerr << "warning: type mismatch for shader parameter " << name_ << std::endl;
282 return std::nullopt;
283 }
284
285 return param.get_value<T>();
286 }
287
288 return std::nullopt;
289 }
290
294 template <typename T>
295 T cast(const std::string& name_) const {
296 const std::uint64_t name = glk::hash(name_);
297
298 for (const auto& param : params) {
299 if (!param.valid() || param.name != name) {
300 continue;
301 }
302
303 if (param.type != deduce_data_type<T>()) {
304 std::cerr << "error: type mismatch for shader parameter " << name << std::endl;
305 abort();
306 }
307
308 return param.get_value<T>();
309 }
310
311 std::cerr << "error: " << name << " not found in the param list" << std::endl;
312 abort();
313 }
314
317 void set(glk::GLSLShader& shader) const;
318
319 // Object type (static/dynamic)
324
325 // Color
327 Eigen::Vector4f material_color() const;
329 ShaderSetting& set_color(float r, float g, float b, float a);
330
333 template <typename Color>
334 ShaderSetting& set_color(const Color& color_) {
335 const Eigen::Vector4f color = color_.template cast<float>();
336 if (color.w() < 0.999f) {
337 transparent = true;
338 }
339 return add("material_color", color);
340 }
341
346
348 ShaderSetting& set_rainbow_range(const Eigen::Vector2f& minmax_z);
350 ShaderSetting& set_rainbow_axis(const Eigen::Vector3f& axis);
351
352 // Point size and scale
354 float point_scale() const;
357
359 float point_size() const;
364
365 // Point shape mode
372
373 // Point scale mode
380
385 ShaderSetting& set_point_shape(float point_size, bool metric, bool circle);
386
389
390 // Calling `remove_model_matrix` invalidates model matrix operations (translate, rotate, and scale)
392
394 int color_mode() const;
397
399 Eigen::Matrix4f model_matrix() const;
401 Eigen::Vector3f translation() const;
403 Eigen::Matrix3f rotation() const;
404
407 template <typename Transform>
409 Eigen::Matrix4f mat = (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix();
410
411 auto& p = params[2];
412 p.set_value<Eigen::Matrix4f>(mat);
413 return *this;
414 }
415
419 template <typename Transform>
420 ShaderSetting& transform(const Transform& transform) {
421 auto& p = params[2];
422 Eigen::Matrix4f current = p.get_value<Eigen::Matrix4f>();
423 Eigen::Matrix4f trans_mat = (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix();
424 p.set_value<Eigen::Matrix4f>(current * trans_mat);
425 return *this;
426 }
427
429 ShaderSetting& translate(float tx, float ty, float tz);
431 ShaderSetting& translate(const Eigen::Vector3f& translation);
434 template <typename Vector>
436 auto& p = params[2];
437 const auto trans = translation.eval();
438 p.mat4f.block<3, 1>(0, 3) += trans.template cast<float>().template head<3>();
439 return *this;
440 }
441
443 ShaderSetting& rotate(const float angle, const Eigen::Vector3f& axis);
445 template <typename Vector>
446 ShaderSetting& rotate(const float angle, const Vector& axis) {
447 const Eigen::Vector3f ax = axis.eval().template cast<float>();
448 auto& p = params[2];
449 p.mat4f = p.mat4f * (Eigen::Isometry3f::Identity() * Eigen::AngleAxisf(angle, ax)).matrix();
450 return *this;
451 }
454 template <typename Scalar>
455 ShaderSetting& rotate(const Eigen::Quaternion<Scalar>& quat) {
456 auto& p = params[2];
457 p.mat4f = p.mat4f * (Eigen::Isometry3f::Identity() * quat.template cast<float>()).matrix();
458 return *this;
459 }
462 template <typename Scalar, int Dim>
463 ShaderSetting& rotate(const Eigen::Matrix<Scalar, Dim, Dim>& rot) {
464 Eigen::Isometry3f R = Eigen::Isometry3f::Identity();
465 R.linear() = rot.template cast<float>().template block<3, 3>(0, 0);
466
467 auto& p = params[2];
468 p.mat4f = p.mat4f * R.matrix();
469 return *this;
470 }
471
473 ShaderSetting& scale(float scaling);
475 ShaderSetting& scale(float sx, float sy, float sz);
477 ShaderSetting& scale(const Eigen::Vector3f& scaling);
480 template <typename Vector>
481 std::enable_if_t<!std::is_arithmetic_v<Vector>, ShaderSetting&> scale(const Vector& scaling) {
482 auto& p = params[2];
483 const auto s = scaling.eval();
484 p.mat4f.col(0) *= s[0];
485 p.mat4f.col(1) *= s[1];
486 p.mat4f.col(2) *= s[2];
487 return *this;
488 }
489
490public:
492 std::vector<ShaderParameter> params;
493};
494
495template <>
496inline ShaderSetting& ShaderSetting::add(const std::string& name, const Eigen::Isometry3f& value) {
497 return add<Eigen::Matrix4f>(name, value.matrix());
498}
499
500template <>
501inline ShaderSetting& ShaderSetting::add(const std::string& name, const Eigen::Affine3f& value) {
502 return add<Eigen::Matrix4f>(name, value.matrix());
503}
504
508struct Rainbow : public ShaderSetting {
509public:
511
512 template <typename Transform>
513 Rainbow(const Transform& transform) : ShaderSetting(ColorMode::RAINBOW, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {}
514
515 virtual ~Rainbow() override {}
516};
517
520struct FlatColor : public ShaderSetting {
521public:
522 explicit FlatColor(float r, float g, float b, float a = 1.0f) : ShaderSetting(ColorMode::FLAT_COLOR) {
523 add("material_color", Eigen::Vector4f(r, g, b, a));
524 transparent = a < 0.999f;
525 }
526
527 explicit FlatColor(const Eigen::Vector4f& color) : ShaderSetting(ColorMode::FLAT_COLOR) {
528 add("material_color", color);
529 transparent = color.w() < 0.999f;
530 }
531
532 template <typename Transform>
533 explicit FlatColor(const Eigen::Vector4f& color, const Transform& transform)
534 : ShaderSetting(ColorMode::FLAT_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {
535 add("material_color", color);
536 transparent = color.w() < 0.999f;
537 }
538
539 template <typename Color>
540 explicit FlatColor(const Color& color) : ShaderSetting(ColorMode::FLAT_COLOR) {
541 const Eigen::Vector4f c = color.eval().template cast<float>();
542 add("material_color", c);
543 transparent = color.w() < 0.999f;
544 }
545
546 template <typename Transform>
547 explicit FlatColor(float r, float g, float b, float a, const Transform& transform)
548 : ShaderSetting(ColorMode::FLAT_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {
549 add("material_color", Eigen::Vector4f(r, g, b, a));
550 transparent = a < 0.999f;
551 }
552
553 template <typename Color, typename Transform>
554 explicit FlatColor(const Color& color, const Transform& transform)
555 : ShaderSetting(ColorMode::FLAT_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {
556 const Eigen::Vector4f c = color.eval().template cast<float>();
557 add("material_color", c);
558 transparent = color.w() < 0.999f;
559 }
560
561 template <typename T>
562 explicit FlatColor(std::initializer_list<T> i) : ShaderSetting(ColorMode::FLAT_COLOR) {
563 Eigen::Vector4f color = Eigen::Vector4f::Zero();
564 std::copy(i.begin(), i.end(), color.data());
565 add("material_color", color);
566 transparent = color.w() < 0.999f;
567 }
568
569 template <typename T, typename Transform>
570 explicit FlatColor(std::initializer_list<T> i, const Transform& transform)
571 : ShaderSetting(ColorMode::FLAT_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {
572 Eigen::Vector4f color = Eigen::Vector4f::Zero();
573 std::copy(i.begin(), i.end(), color.data());
574 add("material_color", color);
575 transparent = color.w() < 0.999f;
576 }
577
578 virtual ~FlatColor() override {}
579};
580
581/* primitive colors */
583struct FlatRed : public FlatColor {
584 FlatRed() : FlatColor(1.0f, 0.0f, 0.0f, 1.0f) {}
585
586 template <typename Transform>
587 FlatRed(const Transform& transform) : FlatColor(1.0f, 0.0f, 0.0f, 1.0f, transform) {}
588};
589
591struct FlatGreen : public FlatColor {
592 FlatGreen() : FlatColor(0.0f, 1.0f, 0.0f, 1.0f) {}
593
594 template <typename Transform>
595 FlatGreen(const Transform& transform) : FlatColor(0.0f, 1.0f, 0.0f, 1.0f, transform) {}
596};
597
599struct FlatBlue : public FlatColor {
600 FlatBlue() : FlatColor(0.0f, 0.0f, 1.0f, 1.0f) {}
601
602 template <typename Transform>
603 FlatBlue(const Transform& transform) : FlatColor(0.0f, 0.0f, 1.0f, 1.0f, transform) {}
604};
605
607struct FlatOrange : public FlatColor {
608 FlatOrange() : FlatColor(1.0f, 0.5f, 0.0f, 1.0f) {}
609
610 template <typename Transform>
611 FlatOrange(const Transform& transform) : FlatColor(1.0f, 0.5f, 0.0f, 1.0f, transform) {}
612};
613
615struct FlatWhite : public FlatColor {
616 FlatWhite() : FlatColor(1.0f, 1.0f, 1.0f, 1.0f) {}
617
618 template <typename Transform>
619 FlatWhite(const Transform& transform) : FlatColor(1.0f, 1.0f, 1.0f, 1.0f, transform) {}
620};
621
623struct FlatGray : public FlatColor {
624 FlatGray() : FlatColor(0.7f, 0.7f, 0.7f, 1.0f) {}
625
626 template <typename Transform>
627 FlatGray(const Transform& transform) : FlatColor(0.7f, 0.7f, 0.7f, 1.0f, transform) {}
628};
629
631struct FlatDarkGray : public FlatColor {
632 FlatDarkGray() : FlatColor(0.3f, 0.3f, 0.3f, 1.0f) {}
633
634 template <typename Transform>
635 FlatDarkGray(const Transform& transform) : FlatColor(0.3f, 0.3f, 0.3f, 1.0f, transform) {}
636};
637
639struct FlatBlack : public FlatColor {
640 FlatBlack() : FlatColor(0.0f, 0.0f, 0.0f, 1.0f) {}
641
642 template <typename Transform>
643 FlatBlack(const Transform& transform) : FlatColor(0.0f, 0.0f, 0.0f, 1.0f, transform) {}
644};
645
647struct VertexColor : public ShaderSetting {
648public:
649 VertexColor() : ShaderSetting(ColorMode::VERTEX_COLOR) {}
650
651 template <typename Transform>
652 VertexColor(const Transform& transform) : ShaderSetting(ColorMode::VERTEX_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {}
653
654 virtual ~VertexColor() override {}
655};
656
659public:
660 TextureColor() : ShaderSetting(ColorMode::TEXTURE_COLOR) {}
661
662 template <typename Transform>
663 TextureColor(const Transform& transform) : ShaderSetting(ColorMode::TEXTURE_COLOR, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {}
664
665 virtual ~TextureColor() override {}
666};
667
670public:
671 VertexColorMap() : ShaderSetting(ColorMode::VERTEX_COLORMAP) {}
672
673 template <typename Transform>
674 VertexColorMap(const Transform& transform) : ShaderSetting(ColorMode::VERTEX_COLORMAP, (transform.template cast<float>() * Eigen::Isometry3f::Identity()).matrix()) {}
675
676 virtual ~VertexColorMap() override {}
677};
678
679} // namespace guik
680
681#endif
Definition glsl_shader.hpp:20
void set_uniform(std::uint64_t name, int value, const char *debug_msg=nullptr)
std::uint64_t hash(const void *data, std::size_t size, std::uint64_t seed=0)
RapidHash (https://github.com/Nicoshev/rapidhash)
Definition drawable_container.hpp:9
ShaderDataType
Data type of shader parameter.
Definition shader_setting.hpp:40
ShaderDataType deduce_data_type()
Deduce shader data type from C++ type.
Definition shader_setting.hpp:44
Fragment color mode. RAINBOW : Color mapped by 3D coordinates of pixels (by default,...
Definition shader_setting.hpp:21
MODE
Definition shader_setting.hpp:22
@ VERTEX_COLOR
Definition shader_setting.hpp:22
@ FLAT_COLOR
Definition shader_setting.hpp:22
@ TEXTURE_COLOR
Definition shader_setting.hpp:22
@ VERTEX_COLORMAP
Definition shader_setting.hpp:22
@ RAINBOW
Definition shader_setting.hpp:22
Flat black color.
Definition shader_setting.hpp:639
FlatBlack(const Transform &transform)
Definition shader_setting.hpp:643
FlatBlack()
Definition shader_setting.hpp:640
Flat blue color.
Definition shader_setting.hpp:599
FlatBlue()
Definition shader_setting.hpp:600
FlatBlue(const Transform &transform)
Definition shader_setting.hpp:603
Flat coloring scheme that assigns a single color to the object. If the alpha value is less than 0....
Definition shader_setting.hpp:520
FlatColor(const Eigen::Vector4f &color, const Transform &transform)
Definition shader_setting.hpp:533
FlatColor(float r, float g, float b, float a=1.0f)
Definition shader_setting.hpp:522
FlatColor(std::initializer_list< T > i, const Transform &transform)
Definition shader_setting.hpp:570
FlatColor(const Eigen::Vector4f &color)
Definition shader_setting.hpp:527
FlatColor(std::initializer_list< T > i)
Definition shader_setting.hpp:562
FlatColor(float r, float g, float b, float a, const Transform &transform)
Definition shader_setting.hpp:547
virtual ~FlatColor() override
Definition shader_setting.hpp:578
FlatColor(const Color &color)
Definition shader_setting.hpp:540
FlatColor(const Color &color, const Transform &transform)
Definition shader_setting.hpp:554
Flat dark gray color.
Definition shader_setting.hpp:631
FlatDarkGray()
Definition shader_setting.hpp:632
FlatDarkGray(const Transform &transform)
Definition shader_setting.hpp:635
Flat light gray color.
Definition shader_setting.hpp:623
FlatGray(const Transform &transform)
Definition shader_setting.hpp:627
FlatGray()
Definition shader_setting.hpp:624
Flat green color.
Definition shader_setting.hpp:591
FlatGreen()
Definition shader_setting.hpp:592
FlatGreen(const Transform &transform)
Definition shader_setting.hpp:595
Flat orange color.
Definition shader_setting.hpp:607
FlatOrange()
Definition shader_setting.hpp:608
FlatOrange(const Transform &transform)
Definition shader_setting.hpp:611
Flat red color.
Definition shader_setting.hpp:583
FlatRed()
Definition shader_setting.hpp:584
FlatRed(const Transform &transform)
Definition shader_setting.hpp:587
Flat white color.
Definition shader_setting.hpp:615
FlatWhite()
Definition shader_setting.hpp:616
FlatWhite(const Transform &transform)
Definition shader_setting.hpp:619
Point size scale mode. SCREENSPACE : Screen space size METRIC : Metric size (in meters)
Definition shader_setting.hpp:28
MODE
Definition shader_setting.hpp:29
@ SCREENSPACE
Definition shader_setting.hpp:29
@ METRIC
Definition shader_setting.hpp:29
Point shape mode. RECTANGLE : Square/rectangle shape CIRCLE : Circle shape.
Definition shader_setting.hpp:35
MODE
Definition shader_setting.hpp:36
@ CIRCLE
Definition shader_setting.hpp:36
@ RECTANGLE
Definition shader_setting.hpp:36
Rainbow coloring scheme that assigns colors to the height (z-value) of pixels of the object....
Definition shader_setting.hpp:508
virtual ~Rainbow() override
Definition shader_setting.hpp:515
Rainbow(const Transform &transform)
Definition shader_setting.hpp:513
Rainbow()
Definition shader_setting.hpp:510
Shader parameter class that holds a single parameter for shader setting.
Definition shader_setting.hpp:74
std::uint64_t name
Name of the parameter (hashed)
Definition shader_setting.hpp:182
ShaderParameter(std::uint64_t name, const T &v)
Constructor.
Definition shader_setting.hpp:81
Eigen::Matrix4f mat4f
Value of the parameter (stored as 4x4 float matrix)
Definition shader_setting.hpp:183
ShaderDataType type
Data type of the parameter.
Definition shader_setting.hpp:181
void set(glk::GLSLShader &shader) const
Set the parameter to the shader.
Definition shader_setting.hpp:139
ShaderParameter()
Default constructor.
Definition shader_setting.hpp:77
T get_value() const
Get the parameter value.
Definition shader_setting.hpp:98
void invalidate()
Invalidate the parameter.
Definition shader_setting.hpp:90
bool valid() const
Check if the parameter is valid.
Definition shader_setting.hpp:87
void set_value(const T &value)
Get the parameter value.
Definition shader_setting.hpp:118
Shader setting class that holds rendering settings.
Definition shader_setting.hpp:187
ShaderSetting & scale(float scaling)
Apply uniform scaling to the model matrix.
ShaderSetting & add(const std::string &name_, const T &value)
Add a new parameter to the shader setting.
Definition shader_setting.hpp:231
ShaderSetting & set_point_shape(float point_size, bool metric, bool circle)
Set point shape with common settings.
ShaderSetting & set_color_mode(int color_mode)
Set color mode.
std::enable_if_t<!std::is_arithmetic_v< Vector >, ShaderSetting & > scale(const Vector &scaling)
Apply scaling to the model matrix (non-uniform).
Definition shader_setting.hpp:481
ShaderSetting & remove_model_matrix()
ShaderSetting & set_old_default_point_shape()
Set old (v0.1.9) default point shape (rectangle + screenspace)
ShaderSetting & make_transparent()
Make the object transparent (alpha blending).
ShaderSetting clone() const
Clone the shader setting.
ShaderSetting(int color_mode)
Constructor.
ShaderSetting & set_point_scale_screenspace()
Set point size scale to screen space.
ShaderSetting & set_color(const Color &color_)
Set material color (for FLAT_COLOR).
Definition shader_setting.hpp:334
std::optional< T > get(const std::string &name_) const
Get a parameter value from the shader setting.
Definition shader_setting.hpp:272
ShaderSetting & operator=(const ShaderSetting &other)
Copy assignment operator.
ShaderSetting & translate(const Vector &translation)
Apply translation to the model matrix.
Definition shader_setting.hpp:435
Eigen::Matrix4f model_matrix() const
Get model matrix.
virtual ~ShaderSetting()
Destructor.
Definition shader_setting.hpp:221
ShaderSetting & set_rainbow_axis(const Eigen::Vector3f &axis)
Set RAINBOW coloring axis.
ShaderSetting & set_point_size(float size)
Set point size.
ShaderSetting & dynamic_object()
Set dynamic object flag.
ShaderSetting & scale(const Eigen::Vector3f &scaling)
Apply scaling to the model matrix (non-uniform).
ShaderSetting & set_point_shape_rectangle()
Set point shape to rectangle.
std::shared_ptr< const ShaderSetting > ConstPtr
Definition shader_setting.hpp:190
ShaderSetting & set_rainbow_range(const Eigen::Vector2f &minmax_z)
Set RAINBOW color range.
ShaderSetting & static_object()
Set static object flag.
ShaderSetting & transform(const Transform &transform)
Apply transformation to the model matrix.
Definition shader_setting.hpp:420
ShaderSetting & translate(float tx, float ty, float tz)
Apply translation to the model matrix.
ShaderSetting & translate(const Eigen::Vector3f &translation)
Apply translation to the model matrix.
ShaderSetting & set_model_matrix(const Transform &transform)
Set model matrix.
Definition shader_setting.hpp:408
ShaderSetting & set_alpha(float alpha)
Set alpha value of the material color.
ShaderSetting & set_point_size_offset(float offset)
Set point size offset.
Eigen::Vector3f translation() const
Get translation vector from the model matrix.
ShaderSetting & set_point_scale_mode(guik::PointScaleMode::MODE mode)
Set point size scale mode.
ShaderSetting(int color_mode, const Transform &transform)
Constructor.
Definition shader_setting.hpp:212
Eigen::Vector4f material_color() const
Get material color (FLAT_COLOR).
ShaderSetting & set_point_scale_metric()
Set point size scale to metric.
ShaderSetting & set_color(float r, float g, float b, float a)
Set material color (FLAT_COLOR).
ShaderSetting & rotate(const Eigen::Quaternion< Scalar > &quat)
Apply rotation to the model matrix.
Definition shader_setting.hpp:455
ShaderSetting & rotate(const float angle, const Vector &axis)
Apply rotation to the model matrix.
Definition shader_setting.hpp:446
ShaderSetting()
Default constructor.
Eigen::Matrix3f rotation() const
Get rotation matrix from the model matrix.
ShaderSetting & set_point_shape_mode(guik::PointShapeMode::MODE mode)
Set point shape mode.
int color_mode() const
Get color mode.
std::shared_ptr< ShaderSetting > Ptr
Definition shader_setting.hpp:189
ShaderSetting & set_point_scale(float scaling)
Set point size scale factor.
float point_scale() const
Get point size scale factor.
void set(glk::GLSLShader &shader) const
Set shader parameters to the shader program.
ShaderSetting(const ShaderSetting &other)
Copy constructor.
T cast(const std::string &name_) const
Get a parameter value from the shader setting. This method avoid type checking. Fast but unsafe.
Definition shader_setting.hpp:295
ShaderSetting & rotate(const float angle, const Eigen::Vector3f &axis)
Apply rotation to the model matrix.
ShaderSetting & rotate(const Eigen::Matrix< Scalar, Dim, Dim > &rot)
Apply rotation to the model matrix.
Definition shader_setting.hpp:463
float point_size() const
Get point size.
ShaderSetting(int color_mode, const Eigen::Matrix4f &transform)
Constructor.
bool transparent
If true, the object is rendered as transparent.
Definition shader_setting.hpp:491
ShaderSetting & scale(float sx, float sy, float sz)
Apply scaling to the model matrix (non-uniform).
ShaderSetting & set_point_shape_circle()
Set point shape to circle.
std::vector< ShaderParameter > params
Shader parameters.
Definition shader_setting.hpp:492
std::optional< T > get(const std::string &name_)
Get a parameter value from the shader setting.
Definition shader_setting.hpp:249
Texture color scheme that assigns colors based on the binded texture.
Definition shader_setting.hpp:658
TextureColor(const Transform &transform)
Definition shader_setting.hpp:663
virtual ~TextureColor() override
Definition shader_setting.hpp:665
TextureColor()
Definition shader_setting.hpp:660
Vertex colormap scheme that assigns colors based on vertex colormap attributes.
Definition shader_setting.hpp:669
virtual ~VertexColorMap() override
Definition shader_setting.hpp:676
VertexColorMap()
Definition shader_setting.hpp:671
VertexColorMap(const Transform &transform)
Definition shader_setting.hpp:674
Vertex color scheme that assigns colors based on vertex color attributes.
Definition shader_setting.hpp:647
VertexColor(const Transform &transform)
Definition shader_setting.hpp:652
virtual ~VertexColor() override
Definition shader_setting.hpp:654
VertexColor()
Definition shader_setting.hpp:649