Visualization helpers for 3D rendering of all kind of primitives

Back to list of all libraries | See all modules

Library mrpt-opengl

This library is part of MRPT and can be installed in Debian-based systems with:

sudo apt install libmrpt-opengl-dev

Read also how to import MRPT into your CMake scripts.

This library includes several data classes that represent objects that can be inserted into a 3D scene, which can be then rendered or streamed to disk or whatever.

A good starting point to explore this library is the base class for all the 3D objects: mrpt::opengl::CRenderizable

A 3D scene is represented by an object of the type mrpt::opengl::COpenGLScene, which in turn can contain one or several “viewports” in such a way that the rendering area is divided into several spaces, each displaying the same or different objects. See the tutorial online: https://www.mrpt.org/Tutorial_3D_Scenes

See the full list of classes in mrpt::opengl.

Below follows a table with the preview of most rendering primitive classes:

Also, pose PDF classes can be converted into OpenGL objects with CSetOfObjects::posePDF2opengl() :

Note: The following extra OpenGL classes are provided by other libraries:

Library contents

// namespaces

namespace mrpt::opengl::graph_tools;
namespace mrpt::opengl;
    namespace mrpt::opengl::graph_tools;
    namespace mrpt::opengl::internal;
    namespace mrpt::opengl::stock_objects;
namespace mrpt::opengl::stock_objects;

// typedefs

typedef std::map<shader_id_t, std::multimap<float, RenderQueueElement>> mrpt::opengl::RenderQueue;
typedef uint8_t mrpt::opengl::shader_id_t;

// structs

struct mrpt::opengl::RenderQueueElement;
struct mrpt::opengl::T2DTextData;
struct mrpt::opengl::TRenderMatrices;
struct mrpt::opengl::TTriangle;

// classes

class mrpt::opengl::CArrow;
class mrpt::opengl::CAssimpModel;
class mrpt::opengl::CAxis;
class mrpt::opengl::CBox;
class mrpt::opengl::CCamera;
class mrpt::opengl::CColorBar;
class mrpt::opengl::CCylinder;
class mrpt::opengl::CDisk;
class mrpt::opengl::CEllipsoid2D;
class mrpt::opengl::CEllipsoid3D;
class mrpt::opengl::CEllipsoidInverseDepth2D;
class mrpt::opengl::CEllipsoidInverseDepth3D;
class mrpt::opengl::CEllipsoidRangeBearing2D;
class mrpt::opengl::CFBORender;
class mrpt::opengl::CFrustum;

template <int DIM>
class mrpt::opengl::CGeneralizedEllipsoidTemplate;

class mrpt::opengl::CGridPlaneXY;
class mrpt::opengl::CGridPlaneXZ;
class mrpt::opengl::CMesh;
class mrpt::opengl::CMesh3D;
class mrpt::opengl::CMeshFast;
class mrpt::opengl::COctoMapVoxels;

template <class Derived>
class mrpt::opengl::COctreePointRenderer;

class mrpt::opengl::COpenGLBuffer;
class mrpt::opengl::COpenGLScene;
class mrpt::opengl::COpenGLVertexArrayObject;
class mrpt::opengl::COpenGLViewport;
class mrpt::opengl::CPointCloud;
class mrpt::opengl::CPointCloudColoured;
class mrpt::opengl::CPolyhedron;
class mrpt::opengl::CRenderizable;
class mrpt::opengl::CRenderizableShaderPoints;
class mrpt::opengl::CRenderizableShaderText;
class mrpt::opengl::CRenderizableShaderTexturedTriangles;
class mrpt::opengl::CRenderizableShaderTriangles;
class mrpt::opengl::CRenderizableShaderWireFrame;
class mrpt::opengl::CSetOfLines;
class mrpt::opengl::CSetOfObjects;
class mrpt::opengl::CSetOfTexturedTriangles;
class mrpt::opengl::CSetOfTriangles;
class mrpt::opengl::CSimpleLine;
class mrpt::opengl::CSphere;
class mrpt::opengl::CText;
class mrpt::opengl::CText3D;
class mrpt::opengl::CTextMessageCapable;
class mrpt::opengl::CTexturedPlane;
class mrpt::opengl::CVectorField2D;
class mrpt::opengl::CVectorField3D;
class mrpt::opengl::PLY_Importer;
class mrpt::opengl::Program;
class mrpt::opengl::Shader;

// global functions

void mrpt::global_settings::OCTREE_RENDER_MAX_DENSITY_POINTS_PER_SQPIXEL(float value);
size_t mrpt::global_settings::OCTREE_RENDER_MAX_POINTS_PER_NODE();
Program::Ptr mrpt::opengl::LoadDefaultShader(const shader_id_t id);

template <class GRAPH_T>
CSetOfObjects::Ptr mrpt::opengl::graph_tools::graph_visualize(const GRAPH_T& g, const mrpt::containers::yaml& extra_params = {});


typedef std::map<shader_id_t, std::multimap<float, RenderQueueElement>> mrpt::opengl::RenderQueue

A queue for rendering, sorted by shader program to minimize changes of OpenGL shader programs while rendering a scene.

Within each shader, objects are sorted by eye-to-object distance, so we can later render them from back to front to render transparencies properly Filled by sortRenderObjectsByShader()

typedef uint8_t mrpt::opengl::shader_id_t

Type for IDs of shaders.

See also:

DefaultShaderID, LoadDefaultShader()

Global Functions

void mrpt::global_settings::OCTREE_RENDER_MAX_DENSITY_POINTS_PER_SQPIXEL(float value)

Default value = 0.01 points/px^2.

Affects to these classes (read their docs for further details):

size_t mrpt::global_settings::OCTREE_RENDER_MAX_POINTS_PER_NODE()

Default value = 1e5.

Maximum number of elements in each octree node before spliting. Affects to these classes (read their docs for further details):

Program::Ptr mrpt::opengl::LoadDefaultShader(const shader_id_t id)

Loads a set of OpenGL Vertex+Fragment shaders from the default library available in mrpt::opengl.

See also:


template <class GRAPH_T>
CSetOfObjects::Ptr mrpt::opengl::graph_tools::graph_visualize(
    const GRAPH_T& g,
    const mrpt::containers::yaml& extra_params = {}

Returns an opengl objects representation of an arbitrary graph, as a network of 3D pose frames.

Note that the “global” coordinates of each node are taken from mrpt::graphs::CNetworkOfPoses::nodes, so if a node appears in “edges” but not in “nodes” it will be not displayed.

List of accepted extra parameters:

Parameter name




show_ID_labels bool Show poses ID labels false show_ground_grid bool Creates a gray grid on the ground level ( true show_edges bool Draw lines between nodes with at least one edge between them. true show_node_corners bool Draw a small 3D corner frame at each node (see true show_edge_rel_poses bool Draw the relative poses stored in each edge as a small extra 3D corner frame at each “node pose oplus edge pose” false nodes_point_size double If set to !=0, draw a point of the given size (glPointSize) at each node. 0.0 nodes_corner_scale double If show_node_corners==true, the size (length) of the corner lines. 0.7 nodes_edges_corner_scale double If show_edge_rel_poses==true, the size of the corners at the end of each drawn edge 0.4 nodes_point_color int If nodes_point_size>0, set this value to a hexadecimal int value 0xRRGGBB with the desired RGB+Alpha color of points. 0xA0A0A0FF edge_color int If show_edges==true, the color of those edges as a hexadecimal int value 0xRRGGBBAA with RGB+Alpha color. 0x0000FF40 edge_rel_poses_color int If show_edge_rel_poses==true, the color of those edges as a hexadecimal int value 0xRRGGBBAA with RGB+Alpha color. 0xFF800040 edge_width double If show_edges==true, the width of edge lines. 1 ======================== ====== ===================================================================================================================== ==========

Implemented as headers-only in graph_tools_impl.h



The graph


An extra set of optional parameters (see below).

See also:

mrpt::graphs::CNetworkOfPoses2D, mrpt::graphs::CNetworkOfPoses3D, mrpt::graphs::CNetworkOfPoses2DInf, mrpt::graphs::CNetworkOfPoses3DInf