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