Main MRPT website > C++ reference for MRPT 1.5.6
Classes
mrpt::opengl::gl_utils Namespace Reference

Detailed Description

A set of auxiliary functions that can be called to render OpenGL primitives from MRPT or user code.

Classes

struct  TRenderInfo
 Information about the rendering process being issued. More...
 

Functions

Miscellaneous rendering methods
void OPENGL_IMPEXP renderSetOfObjects (const mrpt::opengl::CListOpenGLObjects &objs)
 For each object in the list: More...
 
void OPENGL_IMPEXP checkOpenGLError ()
 Checks glGetError and throws an exception if an error situation is found. More...
 
void OPENGL_IMPEXP renderTriangleWithNormal (const mrpt::math::TPoint3D &p1, const mrpt::math::TPoint3D &p2, const mrpt::math::TPoint3D &p3)
 Can be used by derived classes to draw a triangle with a normal vector computed automatically - to be called within a glBegin()-glEnd() block. More...
 
void OPENGL_IMPEXP renderTriangleWithNormal (const mrpt::math::TPoint3Df &p1, const mrpt::math::TPoint3Df &p2, const mrpt::math::TPoint3Df &p3)
 
void OPENGL_IMPEXP renderQuadWithNormal (const mrpt::math::TPoint3Df &p1, const mrpt::math::TPoint3Df &p2, const mrpt::math::TPoint3Df &p3, const mrpt::math::TPoint3Df &p4)
 Can be used by derived classes to draw a quad with a normal vector computed automatically - to be called within a glBegin()-glEnd() block. More...
 
void OPENGL_IMPEXP getCurrentRenderingInfo (TRenderInfo &ri)
 Gather useful information on the render parameters. More...
 
void OPENGL_IMPEXP renderMessageBox (const float msg_x, const float msg_y, const float msg_w, const float msg_h, const std::string &text, float text_scale, const mrpt::utils::TColor &back_col=mrpt::utils::TColor(0, 0, 50, 150), const mrpt::utils::TColor &border_col=mrpt::utils::TColor(0, 0, 0, 140), const mrpt::utils::TColor &text_col=mrpt::utils::TColor(255, 255, 255, 220), const float border_width=4.0f, const std::string &text_font=std::string("sans"), mrpt::opengl::TOpenGLFontStyle text_style=mrpt::opengl::FILL, const double text_spacing=1.5, const double text_kerning=0.1)
 Draws a message box with a centered (possibly multi-lined) text. More...
 
OpenGL bitmapped 2D fonts
void OPENGL_IMPEXP renderTextBitmap (const char *str, void *fontStyle)
 This method is safe for calling from within ::render() methods. More...
 
int OPENGL_IMPEXP textBitmapWidth (const std::string &str, mrpt::opengl::TOpenGLFont font=mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24)
 Return the exact width in pixels for a given string, as will be rendered by renderTextBitmap(). More...
 
OpenGL vector 3D fonts
void OPENGL_IMPEXP glSetFont (const std::string &fontname)
 sets the font to use for future font rendering commands. More...
 
const OPENGL_IMPEXP std::stringglGetFont ()
 returns the name of the currently active font More...
 
mrpt::utils::TPixelCoordf OPENGL_IMPEXP glDrawText (const std::string &text, const double textScale, enum TOpenGLFontStyle style=NICE, double spacing=1.5, double kerning=0.1)
 renders a string in GL using the current settings. More...
 
mrpt::utils::TPixelCoordf OPENGL_IMPEXP glGetExtends (const std::string &text, const double textScale, double spacing=1.5, double kerning=0.1)
 returns the size of the bounding box of a text to be rendered, similar to glDrawText but without any visual output More...
 

Function Documentation

◆ checkOpenGLError()

void mrpt::opengl::gl_utils::checkOpenGLError ( )

◆ getCurrentRenderingInfo()

void mrpt::opengl::gl_utils::getCurrentRenderingInfo ( TRenderInfo ri)

Gather useful information on the render parameters.

It can be called from within the render() method of CRenderizable-derived classes, and the returned matrices can be used to determine whether a given point (lx,ly,lz) in local coordinates wrt the object being rendered falls within the screen or not:

TRenderInfo ri;
Eigen::Matrix<float,4,4> M= ri.proj_matrix * ri.model_matrix * HomogeneousMatrix(lx,ly,lz);
const float rend_x = M(0,3)/M(3,3);
const float rend_y = M(1,3)/M(3,3);

where (rend_x,rend_y) are both in the range [-1,1].

It can be called from within the render() method of derived classes.

Definition at line 197 of file gl_utils.cpp.

References mrpt::opengl::gl_utils::TRenderInfo::camera_position, mrpt::opengl::gl_utils::TRenderInfo::full_matrix, GL_MODELVIEW_MATRIX, GL_PROJECTION_MATRIX, GL_VIEWPORT, glGetFloatv(), glGetIntegerv(), mrpt::opengl::gl_utils::TRenderInfo::model_matrix, MRPT_UNUSED_PARAM, mrpt::opengl::gl_utils::TRenderInfo::proj_matrix, mrpt::opengl::gl_utils::TRenderInfo::vp_height, mrpt::opengl::gl_utils::TRenderInfo::vp_width, mrpt::opengl::gl_utils::TRenderInfo::vp_x, mrpt::opengl::gl_utils::TRenderInfo::vp_y, mrpt::math::TPoint3Df::x, mrpt::math::TPoint3Df::y, and mrpt::math::TPoint3Df::z.

Referenced by mrpt::opengl::CPointCloudColoured::render(), and mrpt::opengl::CPointCloud::render().

◆ glDrawText()

mrpt::utils::TPixelCoordf mrpt::opengl::gl_utils::glDrawText ( const std::string text,
const double  textScale,
enum TOpenGLFontStyle  style = NICE,
double  spacing = 1.5,
double  kerning = 0.1 
)

renders a string in GL using the current settings.

Font coordinates are +X along the line and +Y along the up direction of glyphs. The origin is at the top baseline at the left of the first character. Characters have a maximum size of 1. linefeed is interpreted as a new line and the start is offset in -Y direction by spacing . Individual characters are separated by kerning + plus their individual with.

Parameters
textstring to be rendered, unknown characters are replaced with '?'
textScaleThe size of the characters (default=1.0)
stylerendering style
spacingdistance between individual text lines
kerningdistance between characters
Note
This functions comes from libcvd (LGPL, http://www.edwardrosten.com/cvd/ )

Definition at line 600 of file gl_utils.cpp.

References mrpt::opengl::FILL, fill(), GL_BLEND, GL_COLOR_BUFFER_BIT, GL_LINE_BIT, GL_LINE_SMOOTH, GL_MODELVIEW, GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA, GL_VERTEX_ARRAY, glBlendFunc(), glDisableClientState(), glEnable(), glEnableClientState(), glLineWidth(), glMatrixMode(), glPopAttrib(), glPopMatrix(), glPushAttrib(), glPushMatrix(), glScaled(), glTranslated(), MRPT_UNUSED_PARAM, mrpt::opengl::NICE, mrpt::opengl::OUTLINE, THROW_EXCEPTION, and void().

Referenced by mrpt::opengl::CColorBar::render_dl(), mrpt::opengl::CAxis::render_dl(), mrpt::opengl::CText3D::render_dl(), mrpt::opengl::CTextMessageCapable::render_text_messages(), and renderMessageBox().

◆ glGetExtends()

mrpt::utils::TPixelCoordf mrpt::opengl::gl_utils::glGetExtends ( const std::string text,
const double  textScale,
double  spacing = 1.5,
double  kerning = 0.1 
)

returns the size of the bounding box of a text to be rendered, similar to glDrawText but without any visual output

Note
This functions comes from libcvd (LGPL, http://www.edwardrosten.com/cvd/ )

Definition at line 684 of file gl_utils.cpp.

References MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

Referenced by renderMessageBox().

◆ glGetFont()

const std::string & mrpt::opengl::gl_utils::glGetFont ( )

returns the name of the currently active font

Definition at line 592 of file gl_utils.cpp.

References THROW_EXCEPTION.

◆ glSetFont()

void mrpt::opengl::gl_utils::glSetFont ( const std::string fontname)

sets the font to use for future font rendering commands.

currently "sans", "serif" and "mono" are available.

Parameters
fontnamestring containing font name

Definition at line 583 of file gl_utils.cpp.

References MRPT_UNUSED_PARAM.

Referenced by mrpt::opengl::CColorBar::render_dl(), mrpt::opengl::CText3D::render_dl(), mrpt::opengl::CTextMessageCapable::render_text_messages(), and renderMessageBox().

◆ renderMessageBox()

void mrpt::opengl::gl_utils::renderMessageBox ( const float  msg_x,
const float  msg_y,
const float  msg_w,
const float  msg_h,
const std::string text,
float  text_scale,
const mrpt::utils::TColor back_col = mrpt::utils::TColor(0,0,50, 150),
const mrpt::utils::TColor border_col = mrpt::utils::TColor(0,0,0, 140),
const mrpt::utils::TColor text_col = mrpt::utils::TColor(255,255,255, 220),
const float  border_width = 4.0f,
const std::string text_font = std::string("sans"),
mrpt::opengl::TOpenGLFontStyle  text_style = mrpt::opengl::FILL,
const double  text_spacing = 1.5,
const double  text_kerning = 0.1 
)

Draws a message box with a centered (possibly multi-lined) text.

It consists of a filled rectangle with a frame around and the centered text in the middle.

The appearance of the box is highly configurable via parameters.

Parameters
[in]msg_x,msg_yThe left-lower corner coordinates, in ratio [0,1] of the viewport size. (0,0) if the left-bottom corner of the viewport.
[in]msg_w,msg_hThe width & height, in ratio [0,1] of the viewport size.
[in]textThe text to display. Multiple lines can be drawn with the '
' character.
[in]text_scaleSize of characters, in ration [0,1] of the viewport size. Note that this size may be scaled automatically reduced to fit the text withtin the rectangle of the message box.
[in]back_colColor of the rectangle background. Alpha can be <255 to enable transparency.
[in]border_colColor of the rectangle frame. Alpha can be <255 to enable transparency.
[in]text_colColor of the text background. Alpha can be <255 to enable transparency.
[in]border_widthWidth of the border, in pixels
[in]text_font,text_style,text_spacing,text_kerningSee mrpt::opengl::gl_utils::glDrawText()

Example (see directory: 'samples/display3D_custom_render'):

Definition at line 358 of file gl_utils.cpp.

References mrpt::utils::TColor::A, mrpt::utils::TColor::B, mrpt::utils::TColor::G, GL_BLEND, GL_DEPTH_TEST, GL_LIGHTING, GL_LINE_LOOP, GL_MODELVIEW, GL_ONE_MINUS_SRC_ALPHA, GL_PROJECTION, GL_SRC_ALPHA, GL_TRIANGLE_FAN, GL_VIEWPORT, glBegin(), glBlendFunc(), glColor4ub(), glDisable(), glDrawText(), glEnable(), glEnd(), glGetExtends(), glGetIntegerv(), glLineWidth(), glLoadIdentity(), glMatrixMode(), glOrtho(), glPopMatrix(), glPushMatrix(), glSetFont(), glTranslatef(), glVertex2f(), min, MRPT_UNUSED_PARAM, mrpt::utils::TColor::R, mrpt::utils::TPixelCoordf::x, and mrpt::utils::TPixelCoordf::y.

Referenced by mrpt::graphslam::CWindowObserver::OnEvent().

◆ renderQuadWithNormal()

void mrpt::opengl::gl_utils::renderQuadWithNormal ( const mrpt::math::TPoint3Df p1,
const mrpt::math::TPoint3Df p2,
const mrpt::math::TPoint3Df p3,
const mrpt::math::TPoint3Df p4 
)

Can be used by derived classes to draw a quad with a normal vector computed automatically - to be called within a glBegin()-glEnd() block.

Definition at line 187 of file gl_utils.cpp.

References renderTriangleWithNormal().

Referenced by mrpt::opengl::CFrustum::render_dl().

◆ renderSetOfObjects()

void mrpt::opengl::gl_utils::renderSetOfObjects ( const mrpt::opengl::CListOpenGLObjects objs)

For each object in the list:

  • checks visibility of each object
  • prepare the GL_MODELVIEW matrix according to its coordinates
  • call its ::render()
  • shows its name (if enabled).
Note
Used by COpenGLViewport, CSetOfObjects
  • checks visibility of each object
  • prepare the GL_MODELVIEW matrix according to its coordinates
  • call its ::render()
  • shows its name (if enabled).

Definition at line 33 of file gl_utils.cpp.

References checkOpenGLError(), mrpt::opengl::CRenderizable::getColorA(), mrpt::opengl::CRenderizable::getColorB(), mrpt::opengl::CRenderizable::getColorG(), mrpt::opengl::CRenderizable::getColorR(), mrpt::opengl::CRenderizable::getName(), mrpt::opengl::CRenderizable::getPoseRef(), mrpt::poses::CPose3D::getRotationMatrix(), mrpt::opengl::CRenderizable::getScaleX(), mrpt::opengl::CRenderizable::getScaleY(), mrpt::opengl::CRenderizable::getScaleZ(), GL_CURRENT_BIT, GL_CURRENT_RASTER_POSITION, GL_DEPTH_TEST, GL_LIGHTING_BIT, GL_MODELVIEW, glColor3f(), glColor4f(), glDisable(), glEnable(), glGetFloatv(), glMatrixMode(), glMultMatrixd(), glPopAttrib(), glPopMatrix(), glPushAttrib(), glPushMatrix(), glRasterPos3f(), glScalef(), mrpt::opengl::CRenderizable::isShowNameEnabled(), mrpt::opengl::CRenderizable::isVisible(), mrpt::poses::CPose3D::m_coords, MRPT_PROFILE_FUNC_START, MRPT_UNUSED_PARAM, R, mrpt::opengl::CRenderizable::render(), renderTextBitmap(), mrpt::system::os::sprintf(), and THROW_EXCEPTION.

Referenced by mrpt::opengl::CSetOfObjects::render(), and mrpt::opengl::COpenGLViewport::render().

◆ renderTextBitmap()

void mrpt::opengl::gl_utils::renderTextBitmap ( const char *  str,
void fontStyle 
)

This method is safe for calling from within ::render() methods.

See also
renderTextBitmap

Definition at line 238 of file gl_utils.cpp.

References MRPT_UNUSED_PARAM.

Referenced by mrpt::opengl::CText::render(), renderSetOfObjects(), and mrpt::opengl::CRenderizable::renderTextBitmap().

◆ renderTriangleWithNormal() [1/2]

void mrpt::opengl::gl_utils::renderTriangleWithNormal ( const mrpt::math::TPoint3D p1,
const mrpt::math::TPoint3D p2,
const mrpt::math::TPoint3D p3 
)

Can be used by derived classes to draw a triangle with a normal vector computed automatically - to be called within a glBegin()-glEnd() block.

Definition at line 147 of file gl_utils.cpp.

References glNormal3f(), glVertex3f(), MRPT_UNUSED_PARAM, mrpt::math::TPoint3D::x, mrpt::math::TPoint3D::y, and mrpt::math::TPoint3D::z.

Referenced by mrpt::opengl::CBox::render_dl(), and renderQuadWithNormal().

◆ renderTriangleWithNormal() [2/2]

void mrpt::opengl::gl_utils::renderTriangleWithNormal ( const mrpt::math::TPoint3Df p1,
const mrpt::math::TPoint3Df p2,
const mrpt::math::TPoint3Df p3 
)

◆ textBitmapWidth()

int mrpt::opengl::gl_utils::textBitmapWidth ( const std::string str,
mrpt::opengl::TOpenGLFont  font = mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24 
)

Return the exact width in pixels for a given string, as will be rendered by renderTextBitmap().

See also
renderTextBitmap

Definition at line 270 of file gl_utils.cpp.

References aux_mrptfont2glutfont(), and MRPT_UNUSED_PARAM.

Referenced by mrpt::opengl::CRenderizable::textBitmapWidth().




Page generated by Doxygen 1.8.14 for MRPT 1.5.6 Git: 4c65e8431 Tue Apr 24 08:18:17 2018 +0200 at lun oct 28 01:35:26 CET 2019