diff options
author | github-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com> | 2024-03-19 02:01:17 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-19 02:01:17 +0000 |
commit | 0f8d0e3cfdbd9b11b2357ed3e1a11375e7af8e80 (patch) | |
tree | 48b88b3b3b3a522a90c38b2178363a163a32f2ee /src/graphics/camera.h |
Initial commit
Diffstat (limited to 'src/graphics/camera.h')
-rw-r--r-- | src/graphics/camera.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/graphics/camera.h b/src/graphics/camera.h new file mode 100644 index 0000000..de362e0 --- /dev/null +++ b/src/graphics/camera.h @@ -0,0 +1,55 @@ +#pragma once + +#include "Eigen/Dense" + +class Camera +{ +public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + Camera(); + + void setPosition(const Eigen::Vector3f &position); + void move (const Eigen::Vector3f &deltaPosition); + + Eigen::Vector3f getPosition(); + + void setRotation(float pitch, float yaw); + void rotate (float deltaPitch, float deltaYaw); + + void lookAt(const Eigen::Vector3f &eye, const Eigen::Vector3f &target); + + void setOrbitPoint(const Eigen::Vector3f &target); + bool getIsOrbiting(); + void setIsOrbiting(bool orbit); + void toggleIsOrbiting(); + void zoom(float zoomMultiplier); + + const Eigen::Matrix4f &getView(); + const Eigen::Matrix4f &getProjection(); + const Eigen::Vector3f &getLook(); + + void setPerspective(float fovY, float aspect, float near, float far); + void setAspect(float aspect); + +private: + void updateLook(); + void updatePitchAndYaw(); + + Eigen::Vector3f m_position; + float m_pitch; + float m_yaw; + Eigen::Vector3f m_look; + Eigen::Vector3f m_orbitPoint; + bool m_isOrbiting; + + Eigen::Matrix4f m_view; + Eigen::Matrix4f m_proj; + bool m_viewDirty; + bool m_projDirty; + + float m_fovY; + float m_aspect; + float m_near; + float m_far; + float m_zoom; +}; |