MRPT  1.9.9
CTexturedPlane.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "opengl-precomp.h" // Precompiled header
11 
15 
16 #include "opengl_internals.h"
17 
18 using namespace mrpt;
19 using namespace mrpt::opengl;
20 using namespace mrpt::poses;
21 
22 using namespace mrpt::math;
23 using namespace std;
24 
26 
28  float x_min, float x_max, float y_min, float y_max)
29 {
30  return CTexturedPlane::Ptr(new CTexturedPlane(x_min, x_max, y_min, y_max));
31 }
32 /*---------------------------------------------------------------
33  CTexturedPlane
34  ---------------------------------------------------------------*/
36  float x_min, float x_max, float y_min, float y_max)
37  : polygonUpToDate(false)
38 {
39  // Copy data:
40  m_xMin = x_min;
41  m_xMax = x_max;
42  m_yMin = y_min;
43  m_yMax = y_max;
44 }
45 
46 /*---------------------------------------------------------------
47  ~CTexturedPlane
48  ---------------------------------------------------------------*/
50 /*---------------------------------------------------------------
51  render
52  ---------------------------------------------------------------*/
54 {
55 #if MRPT_HAS_OPENGL_GLUT
57 
58  // Compute the exact texture coordinates:
59  m_tex_x_min = 0;
60  m_tex_x_max = 1.0f - ((float)m_pad_x_right) / r_width;
61  m_tex_y_min = 0;
62  m_tex_y_max = 1.0f - ((float)m_pad_y_bottom) / r_height;
63 
66 
69 
72 
75 
78 
79  glEnd();
81 
82  MRPT_END
83 #endif
84 }
85 
88 {
90 
91  out << m_xMin << m_xMax;
92  out << m_yMin << m_yMax;
93 
95 }
96 
99 {
100  switch (version)
101  {
102  case 0:
103  {
106  in >> m_xMin >> m_xMax;
107  in >> m_yMin >> m_yMax;
108 
110  }
111  break;
112  case 1:
113  case 2:
114  {
116 
117  in >> m_xMin >> m_xMax;
118  in >> m_yMin >> m_yMax;
119 
120  if (version >= 2)
121  {
123  }
124  else
125  { // Old version.
129  {
131  assignImage(
134  }
135  else
137  }
138  }
139  break;
140  default:
142  };
144 }
145 
146 bool CTexturedPlane::traceRay(const mrpt::poses::CPose3D& o, double& dist) const
147 {
148  if (!polygonUpToDate) updatePoly();
149  return math::traceRay(tmpPoly, (o - this->m_pose).asTPose(), dist);
150 }
151 
153 {
154  TPolygon3D poly(4);
155  poly[0].x = poly[1].x = m_xMin;
156  poly[2].x = poly[3].x = m_xMax;
157  poly[0].y = poly[3].y = m_yMin;
158  poly[1].y = poly[2].y = m_yMax;
159  for (size_t i = 0; i < 4; i++) poly[i].z = 0;
160  tmpPoly.resize(1);
161  tmpPoly[0] = poly;
162  polygonUpToDate = true;
163 }
164 
166  mrpt::math::TPoint3D& bb_min, mrpt::math::TPoint3D& bb_max) const
167 {
168  bb_min.x = std::min(m_xMin, m_xMax);
169  bb_min.y = std::min(m_yMin, m_yMax);
170  bb_min.z = 0;
171 
172  bb_max.x = std::max(m_xMin, m_xMax);
173  bb_max.y = std::max(m_yMin, m_yMax);
174  bb_max.z = 0;
175 
176  // Convert to coordinates of my parent:
177  m_pose.composePoint(bb_min, bb_min);
178  m_pose.composePoint(bb_max, bb_max);
179 }
#define MRPT_START
Definition: exceptions.h:262
GLdouble GLdouble z
Definition: glext.h:3872
#define min(a, b)
A base class for all OpenGL objects with loadable textures.
bool traceRay(const std::vector< TPolygonWithPlane > &vec, const mrpt::math::TPose3D &pose, double &dist)
Fast ray tracing method using polygons&#39; properties.
Definition: geometry.cpp:2590
std::shared_ptr< CTexturedPlane > Ptr
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
This must be inserted in all CSerializable classes implementation files.
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object.
virtual 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...
virtual ~CTexturedPlane()
Private, virtual destructor: only can be deleted from smart pointers.
#define GL_CULL_FACE
Definition: glew.h:382
int m_pad_x_right
The size of the fill in pixels in the textured image, w.r.t the image passed by the user...
EIGEN_STRONG_INLINE void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated) ...
STL namespace.
int r_width
Size of the texture image, rounded up to next power of 2.
virtual bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const override
Simulation of ray-trace, given a pose.
A 2D plane in the XY plane with a texture image.
mrpt::poses::CPose3D m_pose
6D pose wrt the parent coordinate reference.
Definition: CRenderizable.h:55
void render_texturedobj() const override
Must be implemented by derived classes.
unsigned char uint8_t
Definition: rptypes.h:41
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
Definition: exceptions.h:90
This base provides a set of functions for maths stuff.
void writeToStreamRender(mrpt::serialization::CArchive &out) const
bool m_enableTransparency
Of the texture using "m_textureImageAlpha".
#define GL_QUADS
Definition: glew.h:279
double x
X,Y,Z coordinates.
GLAPI void GLAPIENTRY glBegin(GLenum mode)
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
GLAPI void GLAPIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z)
std::vector< mrpt::math::TPolygonWithPlane > tmpPoly
Used for ray-tracing.
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
static void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Virtual base class for "archives": classes abstracting I/O streams.
Definition: CArchive.h:52
mrpt::img::CImage m_textureImage
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Definition: CPose3D.h:86
void composePoint(double lx, double ly, double lz, double &gx, double &gy, double &gz, mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *out_jacobian_df_dpoint=nullptr, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dpose=nullptr, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dse3=nullptr, bool use_small_rot_approx=false) const
An alternative, slightly more efficient way of doing with G and L being 3D points and P this 6D pose...
Definition: CPose3D.cpp:379
#define MRPT_END
Definition: exceptions.h:266
GLuint in
Definition: glext.h:7274
The namespace for 3D scene representation and rendering.
Definition: CGlCanvasBase.h:15
GLAPI void GLAPIENTRY glEnd(void)
void readFromStreamTexturedObject(mrpt::serialization::CArchive &in)
mrpt::img::CImage m_textureImageAlpha
GLAPI void GLAPIENTRY glTexCoord2d(GLdouble s, GLdouble t)
CTexturedPlane(float x_min=-1, float x_max=1, float y_min=-1, float y_max=1)
Constructor.
Lightweight 3D point.
void assignImage(const mrpt::img::CImage &img, const mrpt::img::CImage &imgAlpha)
Assigns a texture and a transparency image, and enables transparency (If the images are not 2^N x 2^M...
GLAPI void GLAPIENTRY glDisable(GLenum cap)
void writeToStreamTexturedObject(mrpt::serialization::CArchive &out) const
void readFromStreamRender(mrpt::serialization::CArchive &in)
3D polygon, inheriting from std::vector<TPoint3D>



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020