16 #if MRPT_HAS_OPENGL_GLUT 17 #include <cvd/gl_helpers.h> 37 #if MRPT_HAS_OPENGL_GLUT 43 for (itP = objectsToRender.begin(); itP != objectsToRender.end(); ++itP)
70 R.coeff(0, 0),
R.coeff(1, 0),
R.coeff(2, 0), 0,
71 R.coeff(0, 1),
R.coeff(1, 1),
R.coeff(2, 1), 0,
72 R.coeff(0, 2),
R.coeff(1, 2),
R.coeff(2, 2), 0,
99 float eye_distance = raster_pos[3];
101 void* font =
nullptr;
102 if (eye_distance < 2)
103 font = GLUT_BITMAP_TIMES_ROMAN_24;
104 else if (eye_distance < 200)
105 font = GLUT_BITMAP_TIMES_ROMAN_10;
127 str, 1000,
"Exception while rendering a class '%s'\n%s",
128 (*itP)->GetRuntimeClass()->className, e.what());
145 #if MRPT_HAS_OPENGL_GLUT 151 std::cerr <<
"[gl_utils::checkOpenGLError] " << sErr << std::endl;
161 #if MRPT_HAS_OPENGL_GLUT 162 const float ax = p2.
x - p1.
x;
163 const float ay = p2.
y - p1.
y;
164 const float az = p2.
z - p1.
z;
166 const float bx = p3.
x - p1.
x;
167 const float by = p3.
y - p1.
y;
168 const float bz = p3.
z - p1.
z;
185 #if MRPT_HAS_OPENGL_GLUT 186 const float ax = p2.
x - p1.
x;
187 const float ay = p2.
y - p1.
y;
188 const float az = p2.
z - p1.
z;
190 const float bx = p3.
x - p1.
x;
191 const float by = p3.
y - p1.
y;
192 const float bz = p3.
z - p1.
z;
218 #if MRPT_HAS_OPENGL_GLUT 222 ri.
vp_x = win_dims[0];
223 ri.
vp_y = win_dims[1];
230 ri.
proj_matrix = Eigen::Matrix<float, 4, 4, Eigen::ColMajor>(mat_proj);
233 Eigen::Matrix<float, 4, 1> cam_pose_hm = ri.
proj_matrix.inverse().col(3);
234 if (cam_pose_hm[3] != 0)
246 ri.
model_matrix = Eigen::Matrix<float, 4, 4, Eigen::ColMajor>(mat_mod);
260 #if MRPT_HAS_OPENGL_GLUT 261 while (*str) glutBitmapCharacter(fontStyle, *(str++));
270 #if MRPT_HAS_OPENGL_GLUT 275 return GLUT_BITMAP_TIMES_ROMAN_10;
278 return GLUT_BITMAP_TIMES_ROMAN_24;
282 return GLUT_BITMAP_HELVETICA_10;
285 return GLUT_BITMAP_HELVETICA_12;
288 return GLUT_BITMAP_HELVETICA_18;
304 #if MRPT_HAS_OPENGL_GLUT 305 if (str.empty())
return 0;
306 return glutBitmapLength(
319 int screen_x,
int screen_y,
const std::string& str,
float color_r,
322 #if MRPT_HAS_OPENGL_GLUT 326 if (screen_x < 0 || screen_y < 0)
332 if (screen_x < 0) screen_x += win_dims[2];
333 if (screen_y < 0) screen_y += win_dims[3];
354 glViewport((
int)screen_x - 1, (
int)screen_y - 1, 2, 2);
357 fx = screen_x - (int)screen_x;
358 fy = screen_y - (int)screen_y;
372 for (
size_t i = 0; i < str.size(); i++)
373 glutBitmapCharacter(glut_font_sel, str[i]);
388 const float msg_x,
const float msg_y,
const float msg_w,
const float msg_h,
393 const double text_spacing,
const double text_kerning)
395 #if MRPT_HAS_OPENGL_GLUT 396 const int nLines = 1 +
std::count(text.begin(), text.end(),
'\n');
400 const int w = win_dims[2];
401 const int h = win_dims[3];
404 const float vw_w =
w / float(min_wh);
405 const float vw_h = h / float(min_wh);
411 glOrtho(0, vw_w, 0, vw_h, -1, 1);
423 const float msg_x0 = vw_w * msg_x;
424 const float msg_y0 = vw_h * msg_y;
426 const float msg_x1 = vw_w * (msg_x + msg_w);
427 const float msg_y1 = vw_h * (msg_y + msg_h);
429 const float msg_real_w = msg_x1 - msg_x0;
430 const float msg_real_h = msg_y1 - msg_y0;
432 const float msg_cx = .5 * (msg_x0 + msg_x1);
433 const float msg_cy = .5 * (msg_y0 + msg_y1);
445 glColor4ub(border_col.
R, border_col.
G, border_col.
B, border_col.
A);
462 if (txtSize.
x > msg_real_w)
464 const float K = 0.99f * msg_real_w / txtSize.
x;
469 if (txtSize.
y > msg_real_h)
471 const float K = 0.99f * msg_real_h / txtSize.
y;
477 const float text_w = txtSize.
x;
479 (nLines > 1 ? -(nLines - 1) * txtSize.
y /
float(nLines) : txtSize.
y);
480 const float text_x0 = msg_cx - .5f * text_w;
481 const float text_y0 = msg_cy - .5f * text_h;
486 text, text_scale, text_style, text_spacing, text_kerning);
516 #if MRPT_HAS_OPENGL_GLUT 525 #if MRPT_HAS_OPENGL_GLUT 536 #if MRPT_HAS_OPENGL_GLUT 539 glScaled(textScale, textScale, textScale);
540 auto ret =
CVD::glDrawText(text, static_cast<CVD::TEXT_STYLE>(style), spacing, kerning);
554 const std::string& text,
const double textScale,
double spacing,
557 #if MRPT_HAS_OPENGL_GLUT void renderTextBitmap(const char *str, void *fontStyle)
This method is safe for calling from within ::render() methods.
double getColorA() const
Color components in the range [0,1].
GLuint GLuint GLsizei count
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...
GLAPI void GLAPIENTRY glGetFloatv(GLenum pname, GLfloat *params)
GLAPI void GLAPIENTRY glMatrixMode(GLenum mode)
float getScaleX() const
Get the current scaling factor in one axis.
GLAPI void GLAPIENTRY glEnable(GLenum cap)
GLAPI void GLAPIENTRY glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
#define THROW_EXCEPTION(msg)
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 cal...
const std::string & glGetFont()
returns the name of the currently active font
GLAPI void GLAPIENTRY glScaled(GLdouble x, GLdouble y, GLdouble z)
std::deque< CRenderizable::Ptr > CListOpenGLObjects
A list of objects pointers, automatically managing memory free at destructor, and managing copies cor...
GLAPI void GLAPIENTRY glPopMatrix(void)
GLAPI void GLAPIENTRY glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
The base class of 3D objects that can be directly rendered through OpenGL.
A pair (x,y) of pixel coordinates (subpixel resolution).
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.
#define GL_ONE_MINUS_SRC_ALPHA
GLAPI void GLAPIENTRY glPopAttrib(void)
GLAPI void GLAPIENTRY glLineWidth(GLfloat width)
void glSetFont(const std::string &fontname)
sets the font to use for future font rendering commands.
GLAPI void GLAPIENTRY glLoadIdentity(void)
#define GL_CURRENT_RASTER_POSITION
GLubyte GLubyte GLubyte GLubyte w
GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
#define MRPT_PROFILE_FUNC_START
This base provides a set of functions for maths stuff.
TOpenGLFont
Existing fonts for 2D texts in mrpt::opengl methods.
Lightweight 3D point (float version).
mrpt::math::CArrayDouble< 3 > m_coords
The translation vector [x,y,z] access directly or with x(), y(), z() setter/getter methods...
bool isVisible() const
Is the object visible?
TOpenGLFontStyle
Different style for vectorized font rendering.
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 ...
Information about the rendering process being issued.
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > model_matrix
The 4x4 model transformation matrix.
#define GL_MODELVIEW_MATRIX
GLAPI void GLAPIENTRY glColor3f(GLfloat red, GLfloat green, GLfloat blue)
const std::string & getName() const
Returns the name of the object.
double x
X,Y,Z coordinates.
GLAPI void GLAPIENTRY glBegin(GLenum mode)
int vp_x
Rendering viewport geometry (in pixels)
GLsizei const GLchar ** string
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
GLAPI void GLAPIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z)
GLAPI void GLAPIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
bool isShowNameEnabled() const
GLAPI void GLAPIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
GLAPI void GLAPIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > full_matrix
PROJ * MODEL.
GLAPI void GLAPIENTRY glMultMatrixd(const GLdouble *m)
GLAPI void GLAPIENTRY glPushAttrib(GLbitfield mask)
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.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
GLAPI void GLAPIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z)
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().
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
GLAPI void GLAPIENTRY glGetIntegerv(GLenum pname, GLint *params)
GLAPI GLenum GLAPIENTRY glGetError(void)
Eigen::Matrix< float, 4, 4, Eigen::ColMajor > proj_matrix
The 4x4 projection matrix.
The namespace for 3D scene representation and rendering.
void getCurrentRenderingInfo(TRenderInfo &ri)
Gather useful information on the render parameters.
GLAPI void GLAPIENTRY glEnd(void)
const mrpt::poses::CPose3D & getPoseRef() const
Returns a const ref to the 3D pose of the object as mrpt::poses::CPose3D (which explicitly contains t...
float getScaleY() const
Get the current scaling factor in one axis.
GLAPI void GLAPIENTRY glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
#define GL_PROJECTION_MATRIX
GLAPI void GLAPIENTRY glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
GLAPI void GLAPIENTRY glPushMatrix(void)
void getRotationMatrix(mrpt::math::CMatrixDouble33 &ROT) const
Get the 3x3 rotation matrix.
double getColorB() const
Color components in the range [0,1].
void renderSetOfObjects(const mrpt::opengl::CListOpenGLObjects &objs)
For each object in the list:
void * aux_mrptfont2glutfont(const TOpenGLFont font)
GLAPI void GLAPIENTRY glVertex2f(GLfloat x, GLfloat y)
virtual void render() const =0
Implements the rendering of 3D objects in each class derived from CRenderizable.
GLAPI void GLAPIENTRY glDisable(GLenum cap)
double getColorG() const
Color components in the range [0,1].
const Scalar * const_iterator
float getScaleZ() const
Get the current scaling factor in one axis.
int sprintf(char *buf, size_t bufSize, const char *format,...) noexcept MRPT_printf_format_check(3
An OS-independent version of sprintf (Notice the bufSize param, which may be ignored in some compiler...
double getColorR() const
Color components in the range [0,1].
#define MRPT_UNUSED_PARAM(a)
Determines whether this is an X86 or AMD64 platform.
mrpt::math::TPoint3Df camera_position
The 3D location of the camera.