cgv
Loading...
Searching...
No Matches
surfel_render_data.h
1#pragma once
2
3#include "surfel_renderer.h"
4#include "render_data_base.h"
5
6namespace cgv {
7namespace render {
8
11template <typename ColorType = rgb>
12class surfel_render_data : public render_data_base<surfel_renderer, surfel_render_style, ColorType> {
13private:
14 // Base class we're going to use virtual functions from
16
17 surfel_renderer& ref_renderer_singleton(context& ctx, int ref_count_change = 0) override {
18 return ref_surfel_renderer(ctx, ref_count_change);
19 }
20
21protected:
23 bool transfer(context& ctx, surfel_renderer& r) override {
24 if(super::transfer(ctx, r)) {
25 CGV_RDB_TRANSFER_ARRAY(normal, normals);
26 CGV_RDB_TRANSFER_ARRAY(point_size, diameters);
27 return true;
28 }
29 return false;
30 }
31
32public:
34 std::vector<vec3> normals;
36 std::vector<float> diameters;
37
38 void clear() {
40 normals.clear();
41 diameters.clear();
42 }
43
44 void add_normal(const vec3& normal) {
45 normals.push_back(normal);
46 }
47
48 void add_diameter(const float diameter) {
49 diameters.push_back(diameter);
50 }
51
52 // Explicitly use add from the base class since it is shadowed by the overloaded versions
53 using super::add;
54
55 void add(const vec3& position, const float diameter) {
56 super::add_position(position);
57 add_diameter(diameter);
58 }
59
60 void add(const vec3& position, const vec3& normal) {
61 super::add_position(position);
62 add_normal(normal);
63 }
64
65 void add(const vec3& position, const vec3& normal, const float diameter) {
66 super::add_position(position);
67 add_normal(normal);
68 add_diameter(diameter);
69 }
70
71 void add(const vec3& position, const ColorType& color, const float diameter) {
72 super::add(position, color);
73 add_diameter(diameter);
74 }
75
76 void fill_normals(const vec3& normal) {
77 super::fill(normals, normal);
78 }
79
80 void fill_diameters(const float diameter) {
81 super::fill(diameters, diameter);
82 }
83};
84
85}
86}
base class for all drawables, which is independent of the used rendering API.
Definition context.h:621
A base class for storing render data and style usable with the default renderers provided in the cgv:...
virtual bool transfer(context &ctx, RendererType &r)
Transfers the data stored in members to the attribute array.
void clear()
Clear the stored data and set state out of date.
void fill(std::vector< T > &vector, const T &value)
Template for filling a member array to the size of the render data.
Render data for surfel geometry with support for the surfel_renderer.
bool transfer(context &ctx, surfel_renderer &r) override
See render_data_base::transfer.
std::vector< vec3 > normals
array of normals
std::vector< float > diameters
array of diameters
renderer that supports point splatting
surfel_renderer & ref_surfel_renderer(context &ctx, int ref_count_change)
reference to a singleton surfel renderer that can be shared among drawables
the cgv namespace
Definition print.h:11
cgv::math::fvec< float, 3 > vec3
declare type of 3d single precision floating point vectors
Definition fvec.h:669