9 #ifndef opengl_COpenGLViewport_H 10 #define opengl_COpenGLViewport_H 177 const double x,
const double y,
const double width,
247 const double x_coord,
const double y_coord,
292 template <
typename T>
296 size_t foundCount = 0;
300 if (*it && (*it)->GetRuntimeClass()->derivedFrom(class_ID))
301 if (foundCount++ == ith)
302 return std::dynamic_pointer_cast<T>(*it);
309 (*it)->GetRuntimeClass() ==
312 typename T::Ptr o = std::dynamic_pointer_cast<T>(
318 return typename T::Ptr();
362 void render(
const int render_width,
const int render_height)
const;
size_t viewport_width
In pixels.
opengl::CListOpenGLObjects m_objects
The list of objects that comprise the 3D scene.
void dumpListOfObjects(mrpt::utils::CStringList &lst)
Retrieves a list of all objects in text form.
void setBorderSize(unsigned int lineWidth)
Set the border size ("frame") of the viewport (default=0).
CRenderizable::Ptr getByName(const std::string &str)
Returns the first object with a given name, or nullptr if not found.
void get3DRayForPixelCoord(const double x_coord, const double y_coord, mrpt::math::TLine3D &out_ray, mrpt::poses::CPose3D *out_cameraPose=nullptr) const
Compute the 3D ray corresponding to a given pixel; this can be used to allow the user to pick and sel...
const COpenGLViewport *const source_viewport
const_iterator begin() const
std::shared_ptr< COpenGLViewport > Ptr
mrpt::utils::CStream & operator<<(mrpt::utils::CStream &out, const mrpt::opengl::CLight &o)
bool m_isTransparent
Whether to clear color buffer.
opengl::CCamera & getCamera()
Get a reference to the camera associated with this viewport.
A set of object, which are referenced to the coordinates framework established in this object...
uint32_t m_borderWidth
Default=0, the border around the viewport.
void setCloneView(const std::string &clonedViewport)
Set this viewport as a clone of some other viewport, given its name - as a side effect, current list of internal OpenGL objects is cleared.
The virtual base class which provides a unified interface for all persistent objects in MRPT...
mrptEventGLPostRender(const COpenGLViewport *obj)
A class for storing images as grayscale or RGB bitmaps.
float azimuth
Camera elev & azimuth, in radians.
The basic event type for the observer-observable pattern in MRPT.
std::deque< CRenderizable::Ptr > CListOpenGLObjects
A list of objects pointers, automatically managing memory free at destructor, and managing copies cor...
void do_nothing() override
Just to allow this class to be polymorphic.
std::vector< CLight > m_lights
#define ASSERT_BELOW_(__A, __B)
void setImageView_fast(mrpt::utils::CImage &img)
Just like setImageView but moves the internal image memory instead of making a copy, so it's faster but empties the input image.
void getViewportClipDistances(double &clip_min, double &clip_max) const
Get the current min/max clip depth distances of the rendering frustum (default: 0.1 - 10000)
bool m_custom_backgb_color
std::shared_ptr< CRenderizable > Ptr
CLight & getLight(const size_t i)
void setViewportClipDistances(const double clip_min, const double clip_max)
Set the min/max clip depth distances of the rendering frustum (default: 0.1 - 10000) ...
void do_nothing() override
Just to allow this class to be polymorphic.
const Scalar * const_iterator
const opengl::CCamera & getCamera() const
Get a reference to the camera associated with this viewport.
mrpt::utils::TColorf m_background_color
used only if m_custom_backgb_color
CListOpenGLObjects::iterator iterator
mrpt::math::TPoint3D eye
The camera is here.
GLsizei GLsizei GLuint * obj
const CLight & getLight(const size_t i) const
A viewport within a COpenGLScene, containing a set of OpenGL objects to render.
void setCloneCamera(bool enable)
If set to true, and setCloneView() has been called, this viewport will be rendered using the camera o...
Each of the possible lights of a 3D scene.
const COpenGLViewport *const source_viewport
bool m_isClonedCamera
Set by setCloneCamera.
double m_clip_min
The min/max clip depth distances (default: 0.1 - 10000)
A class for storing a list of text lines.
bool m_isImageView
Set by setImageView.
void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max) const
Evaluates the bounding box of this object (including possible children) in the coordinate frame of th...
void render(const int render_width, const int render_height) const
Render the objects in this viewport (called from COpenGLScene only)
void resetCloneView()
Reset the viewport to normal mode: rendering its own objects.
void removeObject(const CRenderizable::Ptr &obj)
Removes the given object from the scene (it also deletes the object to free its memory).
const_iterator end() const
std::shared_ptr< CImage > Ptr
mrpt::math::TPoint3D up
Up vector of the camera.
TLastProjectiveMatrixInfo m_lastProjMat
Info updated with each "render()" and used in "get3DRayForPixelCoord".
void setNormalMode()
Resets the viewport to a normal 3D viewport.
bool m_OpenGL_enablePolygonNicest
void getCurrentCameraPose(mrpt::poses::CPose3D &out_cameraPose) const
Compute the current 3D camera pose.
GLsizei const GLchar ** string
bool isPolygonNicestEnabled() const
virtual ~COpenGLViewport()
Destructor: clears all objects.
mrpt::math::TPoint3D pointing
The camera points to here.
void initializeAllTextures()
Initializes all textures in the scene (See opengl::CTexturedPlane::loadTextureInOpenGL) ...
size_t size() const
Number of objects contained.
mrpt::utils::CImage::Ptr m_imageview_img
The image to display, after calling setImageView()
mrptEventGLPreRender(const COpenGLViewport *obj)
#define CLASS_ID_NAMESPACE(class_name, namespaceName)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
TLastProjectiveMatrixInfo()
void clear()
Delete all internal obejcts.
GLdouble GLdouble GLdouble r
An event sent by an mrpt::opengl::COpenGLViewport just after clearing the viewport and setting the GL...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
void setImageView(const mrpt::utils::CImage &img)
Set this viewport into "image view"-mode, where an image is efficiently drawn (fitting the viewport a...
An event sent by an mrpt::opengl::COpenGLViewport after calling the scene OpenGL drawing primitives a...
void enablePolygonNicest(bool enable=true)
Sets glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST) is enabled, or GL_FASTEST otherwise.
CListOpenGLObjects::const_iterator const_iterator
mrpt::utils::TColorf getCustomBackgroundColor() const
The namespace for 3D scene representation and rendering.
GLuint const GLchar * name
This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives...
void setTransparent(bool trans)
Set the transparency, that is, whether the viewport will be rendered transparent over previous viewpo...
A RGB color - floats in the range [0,1].
std::string m_clonedViewport
Only if m_isCloned=true.
void lightsClearAll()
Removes all lights (and disables the global "GL_LIGHTING")
std::string getName()
Returns the name of the viewport.
void addLight(const CLight &l)
Append a new light to the scene.
T::Ptr getByClass(const size_t &ith=0) const
Returns the i'th object of a given class (or of a descendant class), or nullptr (an empty smart point...
void setCustomBackgroundColor(const mrpt::utils::TColorf &color)
Set a background color different from that of the parent GUI window.
A structure that holds runtime class type information.
void internal_setImageView_fast(const mrpt::utils::CImage &img, bool is_fast)
A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...
GLenum GLsizei GLsizei height
unsigned __int32 uint32_t
Inherit from this class for those objects capable of being observed by a CObserver class...
bool isTransparent()
Return whether the viewport will be rendered transparent over previous viewports. ...
void setViewportPosition(const double x, const double y, const double width, const double height)
Change the viewport position and dimension on the rendering window.
void getViewportPosition(double &x, double &y, double &width, double &height)
Get the current viewport position and dimension on the rendering window.
void insert(const CRenderizable::Ptr &newObject)
Insert a new object into the list.
double m_view_x
The viewport position [0,1].
utils::safe_ptr< COpenGLScene > m_parent
The scene that contains this viewport.
opengl::CCamera m_camera
The camera associated to the viewport.
A wrapper class for pointers that can be safely copied with "=" operator without problems.
std::string m_name
The viewport's name.
COpenGLViewport(COpenGLScene *parent=nullptr, const std::string &name=std::string(""))
Constructor, invoked from COpenGLScene only.
bool m_isCloned
Set by setCloneView.
3D line, represented by a base point and a director vector.
void setNumberOfLights(const size_t N)
Allocates a number of lights, which must be correctly defined via getLight(i), etc.
T::Ptr getByClass(const size_t &ith=0) const
Returns the i'th object of a given class (or of a descendant class), or nullptr (an empty smart point...