MeshLib C++ Docs
Loading...
Searching...
No Matches

#include <MRViewer/MRViewport.h>

Classes

struct  LinePointImmediateRenderParams
 Rendering parameters for immediate drawing of lines and points. More...
struct  Parameters
struct  PickRenderObjectParams
 Point picking parameters. More...
struct  TriCornerColors

Public Types

using ViewportRectangle = MR::ViewportRectangle
using PickRenderObjectPredicate = std::function<bool ( const VisualObject*, ViewportMask )>
 Predicate to additionally filter objects that should be treated as pickable.
using FitMode = MR::FitMode
using BaseFitParams = MR::BaseFitParams
using FitDataParams = MR::FitDataParams
using FitBoxParams = MR::FitBoxParams

Public Member Functions

 Viewport ()
 ~Viewport ()
Viewport clone () const
 Viewport (Viewport &&) noexcept=default
Viewportoperator= (Viewport &&) noexcept=default
void init ()
 Initialization.
void setAxesPos (const int pixelXoffset=-100, const int pixelYoffset=-100)
void setAxesSize (const int axisPixSize=80)
const Vector2f & getAxesPosition () const
 returns position of basis axes in viewport space
float getAxesSize () const
const Matrix4f & getAxesProjectionMatrix () const
 returns projection matrix that is used for basis axes and view controller rendering
void shut ()
 Shutdown.
void clearFramebuffers ()
 ----------------— Drawing functions
void recursiveDraw (const Object &obj, DepthFunction depthFunc=DepthFunction::Default, const AffineXf3f &rootXf={}, RenderModelPassMask renderType=RenderModelPassMask::All, const TransparencyMode &transparentMode={}, int *numDraws=nullptr) const
 Immediate draw of given object tree.
bool draw (const VisualObject &obj, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
bool draw (const VisualObject &obj, const AffineXf3f &xf, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
bool draw (const VisualObject &obj, const AffineXf3f &xf, const Matrix4f &projM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
bool drawOrthoFixedPos (const VisualObject &obj, const AffineXf3f &xf, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
void drawLines (const std::vector< LineSegm3f > &lines, const std::vector< SegmEndColors > &colors, const LinePointImmediateRenderParams &params)
 Draw lines immediately.
void drawLines (const std::vector< LineSegm3f > &lines, const std::vector< SegmEndColors > &colors, float width=1, bool depthTest=true)
void drawPoints (const std::vector< Vector3f > &points, const std::vector< Vector4f > &colors, const LinePointImmediateRenderParams &params)
 Draw points immediately.
void drawPoints (const std::vector< Vector3f > &points, const std::vector< Vector4f > &colors, float width=1, bool depthTest=true)
void drawTris (const std::vector< Triangle3f > &tris, const std::vector< TriCornerColors > &colors, const ModelRenderParams &params, bool depthTest=true)
 Draw triangles immediately (flat shaded)
void drawTris (const std::vector< Triangle3f > &tris, const std::vector< TriCornerColors > &colors, const Matrix4f &modelM={}, bool depthTest=true)
BaseRenderParams getBaseRenderParams () const
 Prepares base rendering parameters for this viewport.
BaseRenderParams getBaseRenderParams (const Matrix4f &projM) const
 Prepares base rendering parameters for this viewport with custom projection matrix.
BaseRenderParams getBaseRenderParamsOrthoFixedPos () const
 Prepares base rendering parameters for this viewport with orthographic proj matrix and rotation component of view matrix.
ModelRenderParams getModelRenderParams (const Matrix4f &modelM, Matrix4f *normM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
 Prepares rendering parameters to draw a model with given transformation in this viewport.
ModelRenderParams getModelRenderParamsOrthoFixedPos (const Matrix4f &modelM, Matrix4f *normM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
 Prepares rendering parameters to draw a model with orthographic proj matrix and rotation component of view matrix.
ModelRenderParams getModelRenderParams (const Matrix4f &modelM, const BaseRenderParams &baseParams, Matrix4f *normM, DepthFunction depthFunc=DepthFunction::Default, RenderModelPassMask pass=RenderModelPassMask::All, const TransparencyMode &transparentMode={}) const
 Prepares rendering parameters to draw a model with given transformation in this viewport with custom BaseRenderParams.
ObjAndPick pickRenderObject (const PickRenderObjectParams &params=PickRenderObjectParams::defaults()) const
ObjAndPick pickRenderObject (std::span< VisualObject *const > objects, const PickRenderObjectParams &params=PickRenderObjectParams::defaults()) const
 This overload uses objects from the list (possibly filtered by a predicate).
ConstObjAndPick pickRenderObjectConst (std::span< const VisualObject *const > objects, const PickRenderObjectParams &params=PickRenderObjectParams::defaults()) const
 This overload uses const objects from the list (possibly filtered by a predicate). Sadly need a different name to avoid over resolution issues.
ObjAndPick pick_render_object () const
ObjAndPick pick_render_object (uint16_t pickRadius) const
ObjAndPick pick_render_object (const std::vector< VisualObject * > &objects) const
 NOTE! If your list is hardcoded, use .objects = std::array{ a, b, c }.
ObjAndPick pick_render_object (const std::vector< VisualObject * > &objects, uint16_t pickRadius, bool exactPickFirst=true) const
ObjAndPick pick_render_object (bool exactPickFirst) const
 This function allows to pick point in scene by GL with default pick radius, but with specified exactPickFirst parameter (see description upper).
ObjAndPick pick_render_object (const Vector2f &viewportPoint) const
ObjAndPick pick_render_object (const std::vector< VisualObject * > &objects, const Vector2f &viewportPoint) const
std::vector< ObjAndPickmultiPickObjects (std::span< VisualObject *const > objects, const std::vector< Vector2f > &viewportPoints, const BaseRenderParams *overrideRenderParams=nullptr) const
std::vector< std::shared_ptr< VisualObject > > findObjectsInRect (const Box2i &rect, int maxRenderResolutionSide=512) const
std::unordered_map< std::shared_ptr< ObjectMesh >, FaceBitSet > findVisibleFaces (const BitSet &includePixBs, int maxRenderResolutionSide=512) const
FaceBitSet findCameraLookingFaces (const Mesh &mesh, const AffineXf3f &meshToWorld) const
 finds all triangles of a mesh that having normals oriented toward the camera in this viewport
ConstObjAndPick const_pick_render_object () const
ConstObjAndPick const_pick_render_object (const std::vector< const VisualObject * > &objects) const
std::vector< ConstObjAndPickconstMultiPickObjects (const std::vector< const VisualObject * > &objects, const std::vector< Vector2f > &viewportPoints) const
void transformView (const AffineXf3f &xf)
bool getRedrawFlag () const
void resetRedrawFlag ()
void setRotation (bool state)
 Starts or stop rotation.
const ViewportRectanglegetViewportRect () const
 Note, Y is up for this box.
float getPixelSize () const
 Finds length between near pixels on zNear plane. Only good in the orthographic projection.
float getPixelSizeAtPoint (const Vector3f &worldPoint) const
void setViewportRect (const ViewportRectangle &rect)
AffineXf3f getUnscaledViewXf () const
 returns orthonormal matrix with translation
AffineXf3f getViewXf () const
 converts directly from the view matrix
Vector3f getUpDirection () const
 returns unit vector in world space corresponding to up-direction in camera space
Vector3f getRightDirection () const
 assume that viewM is orthogonal and inverse=transpose
Vector3f getBackwardDirection () const
 assume that viewM is orthogonal and inverse=transpose
Line3f unprojectPixelRay (const Vector2f &viewportPoint) const
 assume that viewM is orthogonal and inverse=transpose
Vector3f worldToCameraSpace (const Vector3f &p) const
 convert point(s) to camera space by applying view matrix
std::vector< Vector3f > worldToCameraSpace (const std::vector< Vector3f > &p) const
Vector3f projectToClipSpace (const Vector3f &worldPoint) const
std::vector< Vector3f > projectToClipSpace (const std::vector< Vector3f > &worldPoints) const
Vector3f unprojectFromClipSpace (const Vector3f &clipPoint) const
std::vector< Vector3f > unprojectFromClipSpace (const std::vector< Vector3f > &clipPoints) const
Vector3f projectToViewportSpace (const Vector3f &worldPoint) const
std::vector< Vector3f > projectToViewportSpace (const std::vector< Vector3f > &worldPoints) const
Vector3f unprojectFromViewportSpace (const Vector3f &viewportPoint) const
std::vector< Vector3f > unprojectFromViewportSpace (const std::vector< Vector3f > &viewportPoints) const
Vector3f clipSpaceToViewportSpace (const Vector3f &p) const
std::vector< Vector3f > clipSpaceToViewportSpace (const std::vector< Vector3f > &p) const
Vector3f viewportSpaceToClipSpace (const Vector3f &p) const
std::vector< Vector3f > viewportSpaceToClipSpace (const std::vector< Vector3f > &p) const
void setupView ()
 updates view and projection matrices due to camera parameters (called each frame)
void preDraw ()
void postDraw () const
void fitData (float fill=1.0f, bool snapView=true)
void fitBox (const Box3f &newSceneBox, float fill=1.0f, bool snapView=true)
void preciseFitBoxToScreenBorder (const FitBoxParams &params)
 fit view and proj matrices to match the screen size with given box
void preciseFitDataToScreenBorder (const FitDataParams &params={})
 fit view and proj matrices to match the screen size with given objects
float getRatio () const
 returns viewport width/height ratio
bool allModelsInsideViewportRectangle () const
 returns true if all models are fully projected inside the viewport rectangle
const Box3f & getSceneBox () const
const ParametersgetParameters () const
Vector3f getCameraPoint () const
 returns camera world location for the current view
void setCameraPoint (const Vector3f &cameraWorldPos)
 sets camera world location for the current view
void setCameraTrackballAngle (const Quaternionf &rot)
void setCameraTranslation (const Vector3f &translation)
void setCameraViewAngle (float newViewAngle)
void setCameraZoom (float zoom)
void setOrthographic (bool orthographic)
void setBackgroundColor (const Color &color)
void setClippingPlane (const Plane3f &plane)
void setLabel (std::string s)
void setSelectable (bool on)
void showAxes (bool on)
void showClippingPlane (bool on)
void showRotationCenter (bool on)
void showGlobalBasis (bool on)
void rotationCenterMode (Parameters::RotationCenterMode mode)
void setParameters (const Viewport::Parameters &params)
void cameraLookAlong (const Vector3f &dir, const Vector3f &up)
void cameraRotateAround (const Line3f &axis, float angle)
Vector3f getRotationPivot () const
 returns current rotation pivot in world space, which should appear static on a screen during rotation by the user
void resetStaticRotationPivot (const std::optional< Vector3f > &pivot=std::nullopt)

Static Public Member Functions

static Viewportget (ViewportId viewportId={})

Public Attributes

ViewportId id { 1}
 Unique identifier.

Detailed Description

Viewport is a rectangular area, in which the objects of interest are going to be rendered. An application can have a number of viewports each with its own ID.


The documentation for this class was generated from the following file: