1
0
Fork 0
spectre/include/Spectre/Scene/Camera2D.h

87 lines
1.7 KiB
C++

#ifndef SPECTRE_SCENE_CAMERA2D_H
#define SPECTRE_SCENE_CAMERA2D_H
#include "ICamera.h"
#include <Spectre/Math/Transform.h>
// 2D camera implementation.
// TODO: Support unprojection, from Screenspace -> Worldspace.
// TODO: Zoom is implemented using a scale matrix.
// It's abit weird to control. Must be a better solution.
namespace sp {
class Camera2D : public ICamera
{
public :
Camera2D();
Camera2D(const Vector2f& position, const Vector2f& size);
void reset(const Vector2f& position, const Vector2f& size);
// Position
void setPosition(float x, float y);
void setPosition(const Vector2f& position);
const Vector2f& getPosition() const;
void move(float x, float y);
void move(const Vector2f& vec);
void moveUp(float delta);
void moveRight(float delta);
// Size
void setSize(unsigned int w, unsigned int h);
void setSize(const Vector2u& size);
const Vector2u& getSize() const;
// Zoom
void setZoom(float factor);
void zoom(float factor);
// Rotation
void setRotation(float angle);
void rotate(float delta);
float getRotation() const;
// Current view matrix.
const Matrix4f& getViewMatrix() const;
const Matrix4f& getProjectionMatrix() const;
const Matrix4f& getProjectionViewMatrix() const;
const Transform& getTransform() const;
protected :
Vector2f m_position;
float m_rotation;
float m_zoom;
Vector2u m_size;
// View matrix. should transform world <-> eye space.
mutable Transform m_view;
mutable bool m_viewNeedsUpdate;
// Projection matrix. transforms eye -> Clipping space.
mutable Matrix4f m_proj;
mutable bool m_projNeedsUpdate;
mutable Matrix4f m_projView;
mutable bool m_projViewNeedsUpdate;
};
} // namespace sp
#endif /* SPECTRE_SCENE_CAMERA2D_H */