MRPT  1.9.9
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 renderSetOfObjects (const mrpt::opengl::CListOpenGLObjects &objs)
 For each object in the list: More...
 
void checkOpenGLError ()
 Checks glGetError and throws an exception if an error situation is found. More...
 
void 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 renderTriangleWithNormal (const mrpt::math::TPoint3Df &p1, const mrpt::math::TPoint3Df &p2, const mrpt::math::TPoint3Df &p3)
 
void 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 getCurrentRenderingInfo (TRenderInfo &ri)
 Gather useful information on the render parameters. More...
 
void 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::img::TColor &back_col=mrpt::img::TColor(0, 0, 50, 150), const mrpt::img::TColor &border_col=mrpt::img::TColor(0, 0, 0, 140), const mrpt::img::TColor &text_col=mrpt::img::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 renderTextBitmap (const char *str, void *fontStyle)
 This method is safe for calling from within ::render() methods. More...
 
int 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 glSetFont (const std::string &fontname)
 sets the font to use for future font rendering commands. More...
 
const std::stringglGetFont ()
 returns the name of the currently active font More...
 
mrpt::img::TPixelCoordf 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::img::TPixelCoordf 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()

◆ 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 228 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::math::MatrixBase< Scalar, Derived >::inverse(), 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ glDrawText()

mrpt::img::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 (BSD, http://www.edwardrosten.com/cvd/ )

Definition at line 545 of file gl_utils.cpp.

References GL_MODELVIEW, glMatrixMode(), glPopMatrix(), glPushMatrix(), glScaled(), MRPT_UNUSED_PARAM, and THROW_EXCEPTION.

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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ glGetExtends()

mrpt::img::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 (BSD, http://www.edwardrosten.com/cvd/ )

Definition at line 567 of file gl_utils.cpp.

References MRPT_UNUSED_PARAM, THROW_EXCEPTION, mrpt::img::TPixelCoordf::x, and mrpt::img::TPixelCoordf::y.

Referenced by renderMessageBox().

Here is the caller graph for this function:

◆ glGetFont()

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

returns the name of the currently active font

Definition at line 536 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 527 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().

Here is the caller graph for this function:

◆ 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::img::TColor back_col = mrpt::img::TColor(0, 0, 50, 150),
const mrpt::img::TColor border_col = mrpt::img::TColor(0, 0, 0, 140),
const mrpt::img::TColor text_col = mrpt::img::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 400 of file gl_utils.cpp.

References mrpt::img::TColor::A, mrpt::img::TColor::B, mrpt::img::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::img::TColor::R, mrpt::img::TPixelCoordf::x, and mrpt::img::TPixelCoordf::y.

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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 217 of file gl_utils.cpp.

References renderTriangleWithNormal().

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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 35 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().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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 272 of file gl_utils.cpp.

References MRPT_UNUSED_PARAM.

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

Here is the caller graph for this function:

◆ 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 169 of file gl_utils.cpp.

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

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

Here is the call graph for this function:
Here is the caller graph for this function:

◆ renderTriangleWithNormal() [2/2]

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

Definition at line 193 of file gl_utils.cpp.

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

Here is the call graph for this function:

◆ 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 315 of file gl_utils.cpp.

References aux_mrptfont2glutfont(), and MRPT_UNUSED_PARAM.

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

Here is the call graph for this function:
Here is the caller graph for this function:



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: ee555d257 Fri Aug 16 10:05:39 2019 +0200 at vie ago 16 10:10:14 CEST 2019