struct mrpt::opengl::TRenderMatrices

Rendering state related to the projection and model-view matrices.

Used to store matrices that will be sent to shaders.

The homogeneous coordinates of a rendered point comes from:

p = p_matrix * mv_matrix * [x y z 1.0]’

#include <mrpt/opengl/TRenderMatrices.h>

struct TRenderMatrices
{
    //
fields

    mrpt::math::TPoint3D eye = {0, 0, 0};
    mrpt::math::TPoint3D pointing = {0, 0, 0};
    mrpt::math::TPoint3D up = {0, 0, 0};
    size_t viewport_width = 640;
    size_t viewport_height = 480;
    double FOV = 30.0f;
    double azimuth = .0;
    double elev = .0;
    double eyeDistance = 1.0f;
    bool is_projective = true;
    mrpt::math::CMatrixFloat44 p_matrix;
    mrpt::math::CMatrixFloat44 mv_matrix;
    mrpt::math::CMatrixFloat44 pmv_matrix;

    //
methods

    void computeProjectionMatrix(float zmin, float zmax);
    void computeOrthoProjectionMatrix(float left, float right, float bottom, float top, float znear, float zfar);
    void applyLookAt();

    void projectPoint(
        float x,
        float y,
        float z,
        float& proj_u,
        float& proj_v,
        float& proj_z_depth
        ) const;

    void projectPointPixels(
        float x,
        float y,
        float z,
        float& proj_u_px,
        float& proj_v_px,
        float& proj_depth
        ) const;
};

Fields

mrpt::math::TPoint3D eye = {0, 0, 0}

The camera is here.

mrpt::math::TPoint3D pointing = {0, 0, 0}

The camera points to here.

mrpt::math::TPoint3D up = {0, 0, 0}

Up vector of the camera.

size_t viewport_width = 640

In pixels.

This may be smaller than the total render window.

double FOV = 30.0f

Vertical FOV in degrees.

double azimuth = .0

Camera elev & azimuth, in radians.

bool is_projective = true

true: projective, false: ortho

mrpt::math::CMatrixFloat44 p_matrix

Projection matrix, computed by renderNormalScene() from all the parameters above.

Used in shaders.

mrpt::math::CMatrixFloat44 mv_matrix

Model-view matrix.

mrpt::math::CMatrixFloat44 pmv_matrix

Result of p_matrix * mv_matrix.

Used in shaders. Updated by renderSetOfObjects()

Methods

void computeProjectionMatrix(float zmin, float zmax)

Uses is_projective , vw,vh, etc.

and computes p_matrix. Replacement for obsolete: gluPerspective() and glOrtho()

void computeOrthoProjectionMatrix(
    float left,
    float right,
    float bottom,
    float top,
    float znear,
    float zfar
    )

Especial case for custom parameters of Orthographic projection.

Replacement for obsolete: glOrtho()

void applyLookAt()

Updates the current p_matrix such that it “looks at” pointing, with up vector “up”.

Replacement for deprecated OpenGL gluLookAt().

void projectPoint(
    float x,
    float y,
    float z,
    float& proj_u,
    float& proj_v,
    float& proj_z_depth
    ) const

Computes the normalized coordinates (range=[0,1]) on the current rendering viewport of a point with local coordinates (wrt to the current model matrix) of (x,y,z).

The output proj_z_depth is the real distance from the eye to the point.

void projectPointPixels(
    float x,
    float y,
    float z,
    float& proj_u_px,
    float& proj_v_px,
    float& proj_depth
    ) const

Projects a point from global world coordinates into (u,v) pixel coordinates.