class hiro::draw::Scene

Overview

Defines rendering viewport, contains multiple object instances and a camera. More…

#include <Scene.h>

class Scene {
public:
    // structs

    struct Instance;

    // fields

    static const int32_t INVALID_INSTANCE_INDEX;
    bool render_world_axes = true;
    hiro::draw::GroundGrid render_ground_grid = hiro::draw::GroundGrid::none;
    float ground_grid_scale = 1.0f;

    // construction

    Scene();
    Scene(int32_t x, int32_t y, int32_t width, int32_t height);
    Scene(const Scene&);

    // methods

    glm::vec3 MoveInProjectionSpace(const glm::vec3& point, const glm::vec2& proj_move_origin, const glm::vec2& proj_move_end);
    hiro::draw::VisualCamera* GetCamera();
    uint32_t GetInstanceCount();
    int32_t AddInstance(const hiro::draw::PRenderer object, const hiro::draw::PStyle style, const uint8_t layer = 0);
    void RemoveInstance(int32_t index);
    void ClearInstances();
    void AddLight(const uint32_t& light);
    void SetLights(const std::vector<uint32_t>& lights);
    void SetProjectionPersp(float fov, float near_plane = 0.01f, float far_plane = 1000.0f);
    void SetProjectionOrtho(float sizing, float near_plane = 0.01f, float far_plane = 1000.0f);
    void SetProjectionCustom(const glm::mat4& proj_matrix);
    void SetProjectionCameraParams(const glm::uvec2& resolution, float fx, float fy, float cx, float cy, float near_plane = 0.01f, float far_plane = 1000.0f);
    void SetProjMatrix(const glm::mat4& proj_mat);
    const glm_ext::TransMat4& GetProjectionMat() const;
    glm_ext::TransMat4 GetViewProjMat() const;
    glm_ext::TransMat4 GetViewMat() const;
    void SetViewport(int32_t x, int32_t y, int32_t width, int32_t height);
    const geom::IRect& GetViewport() const;
    float GetNearDistance() const;
    float GetFarDistance() const;
    float GetFovX() const;
    float GetFovY() const;
    float GetAspectRatio() const;
    ProjectionParams GetProjectionParams() const;
};

Detailed Documentation

Defines rendering viewport, contains multiple object instances and a camera.

A scene represents single viewport and can hold multiple pointers to object instances with accoring styles, to be rendered in hiro::draw::Renderer. Additionally, it contains internal hiro::draw::Camera object and projection matrix.

Fields

hiro::draw::GroundGrid render_ground_grid = hiro::draw::GroundGrid::none

Whether to render world axes in this scene view.

float ground_grid_scale = 1.0f

Current ground grid render mode.

Construction

Scene()

Size of an ground grid cell.

Creates a scene.

Scene(int32_t x, int32_t y, int32_t width, int32_t height)

Creates a scene and initializes viewport to the specified values.

Methods

glm::vec3 MoveInProjectionSpace(const glm::vec3& point, const glm::vec2& proj_move_origin, const glm::vec2& proj_move_end)

For a 3D point, transfers screen movement into world, in parallel to camera projection plane.

Parameters:

point

Point for which the resulting movement vector will be calculated.

proj_move_origin

Screen-space movement start.

proj_move_end

Screen-space movement end.

Returns:

World-space movement vector.

hiro::draw::VisualCamera* GetCamera()

Returns camera object.

uint32_t GetInstanceCount()

Returns number of instances added to the scene.

int32_t AddInstance(const hiro::draw::PRenderer object, const hiro::draw::PStyle style, const uint8_t layer = 0)

Adds new instance to the scene.

Parameters:

layer

Specifies rendering order. Objects on larger layers are rendered on top. Default layer is 0.

Returns:

A non-negative index of instance. This index is unique for each instance in a single scene. If instance addition fails, function returns -1.

void RemoveInstance(int32_t index)

Removes instance by its index.

void ClearInstances()

Removes all instances.

void AddLight(const uint32_t& light)

Add index of renderer light into scene, which should influence rendered objects.

void SetLights(const std::vector<uint32_t>& lights)

Set indices of renderer lights into scene, which should influence rendered objects.

void SetProjectionPersp(float fov, float near_plane = 0.01f, float far_plane = 1000.0f)

Setup scene projection matrix into perspective projection.

void SetProjectionOrtho(float sizing, float near_plane = 0.01f, float far_plane = 1000.0f)

Setup scene projection matrix into orthographic projection.

void SetProjectionCustom(const glm::mat4& proj_matrix)

Setup scene projection matrix into orthographic projection.

void SetProjectionCameraParams(const glm::uvec2& resolution, float fx, float fy, float cx, float cy, float near_plane = 0.01f, float far_plane = 1000.0f)

Setup scene projection matrix based on camera intrinsic parameters.

void SetProjMatrix(const glm::mat4& proj_mat)

Set scene projection matrix to custom matrix.

const glm_ext::TransMat4& GetProjectionMat() const

Returns current projection matrix of a scene.

glm_ext::TransMat4 GetViewProjMat() const

Returns current view and projection matrix of a scene.

glm_ext::TransMat4 GetViewMat() const

Returns current view matrix of a scene.

void SetViewport(int32_t x, int32_t y, int32_t width, int32_t height)

Sets up rendering viewport for a scene.

const geom::IRect& GetViewport() const

Returns rendering viewport for a scene.

float GetNearDistance() const

Returns near plane distance.

float GetFarDistance() const

Returns far plane distance.

float GetFovX() const

Returns the camera’s field of view angle in x (camera right) direction.

float GetFovY() const

Returns the camera’s field of view angle in y (camera up) direction.

float GetAspectRatio() const

Compute the camera’s aspect ratio (w/h);.

ProjectionParams GetProjectionParams() const

Returns projection parameters of this scene.