26 : m_enable_lighting(false),
27 m_enable_cube_transparency(true),
28 m_showVoxelsAsPoints(false),
29 m_showVoxelsAsPointsSize(3.0f),
32 m_grid_color(0xE0, 0xE0, 0xE0, 0x90),
53 #if MRPT_HAS_OPENGL_GLUT
68 const GLubyte grid_line_indices[] = {0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6,
69 6, 7, 7, 4, 0, 5, 1, 6, 2, 7, 3, 4};
71 const GLubyte cube_indices[36] = {0, 1, 2, 2, 3, 0, 0, 3, 4, 4, 5, 0,
72 0, 5, 6, 6, 1, 0, 1, 6, 7, 7, 2, 1,
73 7, 4, 3, 3, 2, 7, 4, 7, 6, 6, 5, 4};
76 const GLfloat normals_cube[3 * 6 * 4] = {
77 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,
78 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
79 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
80 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0,
81 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1,
82 -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0};
91 #if MRPT_HAS_OPENGL_GLUT
106 if (m_grid_color.A != 255)
113 m_grid_color.R, m_grid_color.G, m_grid_color.B, m_grid_color.A);
115 const size_t nGrids = m_grid_cubes.size();
116 for (
size_t i = 0; i < nGrids; i++)
121 c.
max.
x,
c.max.y,
c.max.z,
c.max.x,
c.min.y,
c.max.z,
122 c.max.x,
c.min.y,
c.min.z,
c.max.x,
c.max.y,
c.min.z,
123 c.min.x,
c.max.y,
c.min.z,
c.min.x,
c.max.y,
c.max.z,
124 c.min.x,
c.min.y,
c.max.z,
c.min.x,
c.min.y,
c.min.z};
128 sizeof(grid_line_indices) /
sizeof(grid_line_indices[0]),
144 if (m_enable_cube_transparency)
150 if (m_showVoxelsAsPoints)
156 for (
size_t i = 0; i < m_voxel_sets.size(); i++)
158 if (!m_voxel_sets[i].visible)
continue;
160 const std::vector<TVoxel>& voxels = m_voxel_sets[i].voxels;
161 const size_t N = voxels.size();
162 for (
size_t j = 0; j < N; j++)
168 const double L = voxels[j].side_length * 0.5;
170 if (!m_showVoxelsAsPoints)
174 c.
x + L,
c.y + L,
c.z + L,
c.x + L,
c.y - L,
c.z + L,
175 c.x + L,
c.y - L,
c.z - L,
c.x + L,
c.y + L,
c.z - L,
176 c.x - L,
c.y + L,
c.z - L,
c.x - L,
c.y + L,
c.z + L,
177 c.x - L,
c.y - L,
c.z + L,
c.x - L,
c.y - L,
c.z - L};
181 sizeof(cube_indices) /
sizeof(cube_indices[0]),
192 if (m_showVoxelsAsPoints)
218 out <<
a.visible <<
a.voxels;
223 in >>
a.visible >>
a.voxels;
229 out <<
a.min <<
a.max;
234 in >>
a.min >>
a.max;
240 out <<
a.coords <<
a.side_length <<
a.color;
245 in >>
a.coords >>
a.side_length >>
a.color;
253 writeToStreamRender(out);
255 out << m_voxel_sets << m_grid_cubes << m_bb_min << m_bb_max
256 << m_enable_lighting << m_showVoxelsAsPoints << m_showVoxelsAsPointsSize
257 << m_show_grids << m_grid_width << m_grid_color
258 << m_enable_cube_transparency
270 readFromStreamRender(
in);
272 in >> m_voxel_sets >> m_grid_cubes >> m_bb_min >> m_bb_max >>
273 m_enable_lighting >> m_showVoxelsAsPoints >>
274 m_showVoxelsAsPointsSize >> m_show_grids >> m_grid_width >>
278 in >> m_enable_cube_transparency;
280 m_enable_cube_transparency =
false;
307 m_pose.composePoint(bb_min, bb_min);
308 m_pose.composePoint(bb_max, bb_max);
314 return a.coords.z <
b.coords.z;
319 for (
size_t i = 0; i < m_voxel_sets.size(); i++)
322 m_voxel_sets[i].voxels.begin(), m_voxel_sets[i].voxels.end(),
bool sort_voxels_z(const COctoMapVoxels::TVoxel &a, const COctoMapVoxels::TVoxel &b)
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
This must be inserted in all CSerializable classes implementation files.
#define DECLARE_CUSTOM_TTYPENAME(_TYPE)
Identical to MRPT_DECLARE_TTYPENAME but intended for user code.
A flexible renderer of voxels, typically from a 3D octo map (see mrpt::maps::COctoMap).
void clear()
Clears everything.
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
void setBoundingBox(const mrpt::math::TPoint3D &bb_min, const mrpt::math::TPoint3D &bb_max)
Manually changes the bounding box (normally the user doesn't need to call this)
void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max) const override
Evaluates the bounding box of this object (including possible children) in the coordinate frame of th...
visualization_mode_t
The different coloring schemes, which modulate the generic mrpt::opengl::CRenderizable object color.
@ COLOR_FROM_OCCUPANCY
Color goes from black (occupied voxel) to the chosen color (free voxel)
void render_dl() const override
Render.
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object.
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
A renderizable object suitable for rendering with OpenGL's display lists.
EIGEN_STRONG_INLINE void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated)
Virtual base class for "archives": classes abstracting I/O streams.
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
GLAPI void GLAPIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
GLAPI void GLAPIENTRY glEnable(GLenum cap)
GLAPI void GLAPIENTRY glPointSize(GLfloat size)
GLAPI void GLAPIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
GLAPI void GLAPIENTRY glLineWidth(GLfloat width)
GLAPI void GLAPIENTRY glEnableClientState(GLenum array)
GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
#define GL_COLOR_BUFFER_BIT
GLAPI void GLAPIENTRY glBegin(GLenum mode)
GLAPI void GLAPIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z)
#define GL_ONE_MINUS_SRC_ALPHA
GLAPI void GLAPIENTRY glEnd(void)
GLAPI void GLAPIENTRY glPopAttrib(void)
GLAPI void GLAPIENTRY glDisable(GLenum cap)
GLAPI void GLAPIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
GLAPI void GLAPIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
GLAPI void GLAPIENTRY glPushAttrib(GLbitfield mask)
GLAPI void GLAPIENTRY glDisableClientState(GLenum array)
GLubyte GLubyte GLubyte a
This base provides a set of functions for maths stuff.
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
The namespace for 3D scene representation and rendering.
mrpt::serialization::CArchive & operator<<(mrpt::serialization::CArchive &out, const mrpt::opengl::CLight &o)
mrpt::serialization::CArchive & operator>>(mrpt::serialization::CArchive &in, mrpt::opengl::CLight &o)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int32 uint32_t
double x
X,Y,Z coordinates.
The info of each grid block.
The info of each of the voxels.