diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-04-22 21:56:26 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-04-22 21:56:26 -0400 |
commit | a556b45abf18f1bd509daaf63b66b7d55e9fd291 (patch) | |
tree | bc9b8a2d184c12aee236e7f9f276a34b84ca552d /engine-ocean/Graphics/camera.h | |
parent | cd7c76017a12bb548036571c1ff13e551369d06d (diff) |
add engine version
Diffstat (limited to 'engine-ocean/Graphics/camera.h')
-rw-r--r-- | engine-ocean/Graphics/camera.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/engine-ocean/Graphics/camera.h b/engine-ocean/Graphics/camera.h new file mode 100644 index 0000000..e23b0b1 --- /dev/null +++ b/engine-ocean/Graphics/camera.h @@ -0,0 +1,57 @@ +#pragma once + +#include "glm/glm.hpp" +#include "glm/ext.hpp" + +class Camera +{ +public: + Camera(int width = 640, int height = 480, + glm::vec3 pos = glm::vec3(0, 0, 0), glm::vec3 look = glm::vec3(0, 0, 1), + glm::vec3 up = glm::vec3(0, 1, 0), float fov = 1.f, + float nearPlane = 0.1f, float farPlane = 100.f); + ~Camera(); + + // Functions to get camera data for drawing + glm::mat4 getProjection(); + glm::mat4 getView(); + + // Functions to edit camera + void resize(int width, int height); + void translate(glm::vec3 move); + void setPos(glm::vec3 newPos); + glm::vec3 getPos(); + void rotate(float angle, glm::vec3 axis); + void setLook(glm::vec3 newLook); + glm::vec3 getLook(); + void setUp(glm::vec3 newUp); + glm::vec3 getUp(); + + glm::vec3 getLookAt(); + glm::vec3 getViewDirection(); + glm::vec3 getRight(); + + + int getHeight(); + int getWidth(); + + + +private: + // Internal functions to update projection and view matrices + void calculateProjection(); + void calculateView(); + + int m_width; + int m_height; + glm::vec3 m_pos; + glm::vec3 m_look; + glm::vec3 m_up; + float m_fov; + float m_aspect; + float m_near; + float m_far; + + glm::mat4 m_proj = glm::mat4(1); + glm::mat4 m_view = glm::mat4(1); +}; |