1#ifndef GLK_POINTCLOUD_BUFFER_HPP
2#define GLK_POINTCLOUD_BUFFER_HPP
24 using Ptr = std::shared_ptr<PointCloudBuffer>;
33 template <
typename Scalar,
int Dim,
typename Allocator>
44 template <
int N,
typename Allocator>
46 template <
int N,
typename Allocator>
49 void add_normals(
const Eigen::Matrix<float, N, 1>* normals,
int num_points);
51 void add_normals(
const Eigen::Matrix<double, N, 1>* normals,
int num_points);
53 template <
typename Scalar,
typename Allocator>
55 void add_color(
const Eigen::Vector4f* colors,
int num_points);
56 void add_color(
const Eigen::Vector4d* colors,
int num_points);
63 void add_normals(
const float* data,
int stride,
int num_points);
64 void add_color(
const float* data,
int stride,
int num_points);
70 void add_colormap(
const float* data,
int stride,
int num_points,
float scale = 1.0f);
72 void add_buffer(
const std::string& attribute_name,
const std::vector<float>& data);
73 void add_buffer(
const std::string& attribute_name,
const std::vector<double>& data);
74 template <
typename Scalar,
int D,
typename Allocator>
75 void add_buffer(
const std::string& attribute_name,
const std::vector<Eigen::Matrix<Scalar, D, 1>,
Allocator>& data);
76 void add_buffer(
const std::string& attribute_name,
int dim,
const float* data,
int stride,
int num_points);
80 void update_buffer_with_indices(
const std::string& attribute_name,
int dim,
const float* data,
int stride,
const unsigned int* indices,
int num_indices);
82 template <
typename Scalar,
int D,
typename Allocator>
90 template <
typename Scalar,
typename Allocator>
110 int size()
const {
return num_points; }
115 mutable std::atomic_uint rendering_count;
116 int points_rendering_budget;
126 std::vector<AuxBufferData> aux_buffers;
130template <
typename Scalar,
int Dim,
typename Allocator>
133template <
int N,
typename Allocator>
135 add_normals(normals[0].data(),
sizeof(
float) *
N, normals.size());
138template <
int N,
typename Allocator>
140 std::vector<Eigen::Vector3f>
normals_f(normals.size());
141 std::transform(normals.begin(), normals.end(),
normals_f.begin(), [](
const Eigen::Matrix<double, N, 1>&
n) { return n.template head<3>().template cast<float>(); });
147 add_normals(normals->data(),
sizeof(
float) *
N, num_points);
152 std::vector<Eigen::Matrix<float, N, 1>>
normals_f(num_points);
153 std::transform(normals, normals + num_points,
normals_f.begin(), [](
const Eigen::Matrix<double, N, 1>&
p) { return p.template cast<float>(); });
157template <
typename Scalar,
typename Allocator>
162template <
typename Scalar,
int D,
typename Allocator>
164 if constexpr (std::is_same<Scalar, float>::value) {
165 add_buffer(attribute_name,
D, data[0].data(),
sizeof(
float) *
D, data.size());
167 std::vector<Eigen::Matrix<float, D, 1>>
data_f(data.size());
168 std::transform(data.begin(), data.end(),
data_f.begin(), [](
const Eigen::Matrix<double, D, 1>&
p) { return p.template cast<float>(); });
173template <
typename Scalar,
int D,
typename Allocator>
175 if (
points.size() != indices.size()) {
176 std::cerr <<
"error: points.size() != indices.size() (" <<
points.size() <<
" vs " << indices.size() <<
")" << std::endl;
181template <
typename Scalar,
typename Allocator>
183 if (colors.size() != indices.size()) {
184 std::cerr <<
"error: colors.size() != indices.size() (" << colors.size() <<
" vs " << indices.size() <<
")" << std::endl;
Definition drawable.hpp:12
Definition glsl_shader.hpp:20
Definition pointcloud_buffer.hpp:22
PointCloudBuffer(const Eigen::Vector3f *points, int num_points)
PointCloudBuffer(const Eigen::Vector3d *points, int num_points)
std::shared_ptr< PointCloudBuffer > Ptr
Definition pointcloud_buffer.hpp:24
PointCloudBuffer(const Eigen::Matrix< double, 3, -1 > &points)
virtual ~PointCloudBuffer() override
PointCloudBuffer(const float *data, int stride, int num_points)
void add_normals(const std::vector< Eigen::Matrix< float, N, 1 >, Allocator > &normals)
Definition pointcloud_buffer.hpp:134
void add_buffer(const std::string &attribute_name, const std::vector< double > &data)
const AuxBufferData & get_aux_buffer(int i) const
void add_intensity(glk::COLORMAP colormap, const float *intensities, const int num_points, float scale=1.0f)
void disable_partial_rendering()
void update_points_with_indices(const std::vector< Eigen::Matrix< Scalar, D, 1 >, Allocator > &points, const std::vector< unsigned int > &indices)
Definition pointcloud_buffer.hpp:174
void add_color(const std::vector< Eigen::Matrix< Scalar, 4, 1 >, Allocator > &colors)
Definition pointcloud_buffer.hpp:158
void update_points_with_indices(const float *data, int stride, const unsigned int *indices, int num_indices)
void update_color_with_indices(const std::vector< Eigen::Matrix< Scalar, 4, 1 >, Allocator > &colors, const std::vector< unsigned int > &indices)
Definition pointcloud_buffer.hpp:182
PointCloudBuffer(const Eigen::Vector4f *points, int num_points)
PointCloudBuffer(const Eigen::Matrix< float, 3, -1 > &points)
PointCloudBuffer(int stride, int num_points)
int size() const
Definition pointcloud_buffer.hpp:110
size_t memory_usage() const
void update_buffer_with_indices(GLuint buffer, const float *data, int stride, const unsigned int *indices, int num_indices)
PointCloudBuffer(const Eigen::Vector4d *points, int num_points)
void add_buffer(const std::string &attribute_name, int dim, const float *data, int stride, int num_points)
void add_color(const float *data, int stride, int num_points)
virtual void draw(glk::GLSLShader &shader) const override
void update_points_with_indices(const Eigen::Vector3d *points, const unsigned int *indices, int num_indices)
void update_color_with_indices(const Eigen::Vector4f *colors, const unsigned int *indices, int num_indices)
void add_intensity(glk::COLORMAP colormap, const double *intensities, const int num_points, float scale=1.0f)
void bind(glk::GLSLShader &shader) const
void add_intensity(glk::COLORMAP colormap, const float *data, int stride, int num_points, float scale=1.0f)
void add_intensity(glk::COLORMAP colormap, const std::vector< float > &intensities, float scale=1.0f)
void update_points_with_indices(const Eigen::Vector3f *points, const unsigned int *indices, int num_indices)
void enable_partial_rendering(int points_budget=8192 *5)
void set_colormap_buffer(const std::string &attribute_name)
void add_normals(const float *data, int stride, int num_points)
void add_color(const Eigen::Vector4f *colors, int num_points)
void update_points_with_indices(const Eigen::Vector4f *points, const unsigned int *indices, int num_indices)
void add_intensity(glk::COLORMAP colormap, const std::vector< double > &intensities, float scale=1.0f)
void add_buffer(const std::string &attribute_name, const std::vector< float > &data)
void unbind(glk::GLSLShader &shader) const
void add_color(const Eigen::Vector4d *colors, int num_points)
void update_buffer_with_indices(const std::string &attribute_name, int dim, const float *data, int stride, const unsigned int *indices, int num_indices)
void update_color_with_indices(const Eigen::Vector4d *colors, const unsigned int *indices, int num_indices)
void add_colormap(std::vector< float > &cmap, float scale=1.0f)
void add_colormap(std::vector< double > &cmap, float scale=1.0)
void add_colormap(const float *data, int stride, int num_points, float scale=1.0f)
void update_points_with_indices(const Eigen::Vector4d *points, const unsigned int *indices, int num_indices)
Definition async_buffer_copy.hpp:6
COLORMAP
Definition colormap.hpp:9
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20
Eigen::Vector4i colormap(COLORMAP type, int x)
Definition pointcloud_buffer.hpp:15
std::string attribute_name
Definition pointcloud_buffer.hpp:16
int stride
Definition pointcloud_buffer.hpp:18
int dim
Definition pointcloud_buffer.hpp:17
GLuint buffer
Definition pointcloud_buffer.hpp:19