libVFRendering  0.14.0

A vector field rendering library
CoordinateSystemRenderer.hxx
1 #ifndef VFRENDERING_COORDINATE_SYSTEM_RENDERER_HXX
2 #define VFRENDERING_COORDINATE_SYSTEM_RENDERER_HXX
3 
4 #include <VFRendering/RendererBase.hxx>
5 
6 namespace VFRendering {
8 public:
9  enum Option {
10  AXIS_LENGTH = 500,
11  ORIGIN,
12  LEVEL_OF_DETAIL,
13  CONE_HEIGHT,
14  CONE_RADIUS,
15  CYLINDER_HEIGHT,
16  CYLINDER_RADIUS,
17  NORMALIZE
18  };
19 
20  CoordinateSystemRenderer(const View& view);
21  virtual ~CoordinateSystemRenderer();
22  virtual void draw(float aspect_ratio) override;
23  virtual void optionsHaveChanged(const std::vector<int>& changed_options) override;
24 
25 protected:
26  virtual void update(bool keep_geometry) override;
27 
28 private:
29  void updateShaderProgram();
30  void updateVertexData();
31  void initialize();
32 
33  bool m_is_initialized = false;
34 
35  unsigned int m_program = 0;
36  unsigned int m_vao = 0;
37  unsigned int m_vbo = 0;
38  unsigned int m_num_vertices = 0;
39 };
40 
41 namespace Utilities {
42 template<>
43 struct Options::Option<CoordinateSystemRenderer::Option::AXIS_LENGTH> {
44  glm::vec3 default_value = {0.5, 0.5, 0.5};
45 };
46 
47 
48 template<>
49 struct Options::Option<CoordinateSystemRenderer::Option::ORIGIN> {
50  glm::vec3 default_value = {0.0, 0.0, 0.0};
51 };
52 
53 
54 template<>
55 struct Options::Option<CoordinateSystemRenderer::Option::CONE_RADIUS> {
56  float default_value = 0.1f;
57 };
58 
59 
60 template<>
61 struct Options::Option<CoordinateSystemRenderer::Option::CONE_HEIGHT> {
62  float default_value = 0.3f;
63 };
64 
65 
66 template<>
67 struct Options::Option<CoordinateSystemRenderer::Option::CYLINDER_RADIUS> {
68  float default_value = 0.07f;
69 };
70 
71 
72 template<>
73 struct Options::Option<CoordinateSystemRenderer::Option::CYLINDER_HEIGHT> {
74  float default_value = 0.7f;
75 };
76 
77 
78 template<>
79 struct Options::Option<CoordinateSystemRenderer::Option::LEVEL_OF_DETAIL> {
80  unsigned int default_value = 100;
81 };
82 
83 
84 template<>
85 struct Options::Option<CoordinateSystemRenderer::Option::NORMALIZE> {
86  bool default_value = false;
87 };
88 }
89 }
90 
91 #endif
VFRendering::RendererBase
Definition: RendererBase.hxx:12
VFRendering::View
Definition: View.hxx:23
VFRendering::CoordinateSystemRenderer
Definition: CoordinateSystemRenderer.hxx:7