cgv
volume_renderer.h
1 #pragma once
2 
3 #include "surface_renderer.h"
4 
5 #include "gl/lib_begin.h"
6 
7 namespace cgv { // @<
8  namespace render { // @<
9 
12  IP_NEAREST = 0,
13  IP_LINEAR = 1,
14  IP_SMOOTH = 2,
15  IP_CUBIC = 3
16  };
17 
18  class CGV_API volume_renderer;
19 
21 
24  extern CGV_API volume_renderer& ref_volume_renderer(context& ctx, int ref_count_change = 0);
25 
27  struct CGV_API volume_render_style : public render_style {
28  /*@name global volume rendering options*/
30  int transfer_function_texture_unit;
33  float alpha;
37  float step_size;
40 
45  };
46 
48  class CGV_API volume_renderer : public renderer
49  {
50  protected:
60  std::string shader_defines;
62  render_style* create_render_style() const;
63  public:
67  bool init(context& ctx);
69  bool set_volume_texture(texture* _volume_texture);
71  void set_eye_position(vec3 _eye_position);
73  std::string build_define_string();
75  bool build_shader(context& ctx, std::string defines = "");
77  bool enable(context& ctx);
79  bool validate_attributes(const context& ctx) const;
81  bool disable(context& ctx);
83  void draw(context& ctx, size_t start, size_t count,
84  bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
85  };
86  }
87 }
88 
89 #include <cgv/config/lib_end.h>
cgv::render::render_style
base class for all render styles
Definition: renderer.h:16
cgv::math::fmat< float, 4, 4 >
cgv::render::volume_render_style::interpolation_mode
InterpolationMode interpolation_mode
the interpolation method used
Definition: volume_renderer.h:42
cgv::render::volume_render_style::step_size
float step_size
length of one step for the ray casting
Definition: volume_renderer.h:37
cgv::render::ref_volume_renderer
volume_renderer & ref_volume_renderer(context &ctx, int ref_count_change)
reference to a singleton volume renderer that is shared among drawables
Definition: volume_renderer.cxx:7
cgv::math::fvec< float, 3 >
cgv::render::volume_renderer::volume_texture_size
vec3 volume_texture_size
the size of the volume texture
Definition: volume_renderer.h:56
cgv::render::renderer
abstract base class for all renderers that handles a shader program and position / color attribute
Definition: renderer.h:177
cgv::render::texture
Definition: texture.h:15
cgv::render::volume_renderer::volume_texture
texture * volume_texture
the 3D texture used for rendering
Definition: volume_renderer.h:54
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::render::volume_render_style
Definition: volume_renderer.h:27
cgv::render::volume_renderer
renderer that supports point splatting
Definition: volume_renderer.h:49
cgv::render::volume_render_style::transformation_matrix
mat4 transformation_matrix
transformation matrix for the volume; original volume renders from (0,0,0) to (1,1,...
Definition: volume_renderer.h:39
cgv::render::InterpolationMode
InterpolationMode
volume texture can have different interpolation methods
Definition: volume_renderer.h:11
cgv::render::volume_render_style::level_of_detail
float level_of_detail
level of detail for mipmap textures
Definition: volume_renderer.h:35
cgv::render::volume_render_style::alpha
float alpha
transparency scaling parameter
Definition: volume_renderer.h:33
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::volume_renderer::eye_position
vec3 eye_position
the eye position in world space
Definition: volume_renderer.h:58
cgv::render::context
Definition: context.h:525
cgv::render::volume_renderer::shader_defines
std::string shader_defines
whether the shader should be rebuilt after a define update
Definition: volume_renderer.h:60