#pragma once #ifndef __Camera__ #define __Camera__ #include #define GLM_FORCE_RADIANS #include class MatrixStack; class Camera { public: enum { ROTATE = 0, TRANSLATE, SCALE }; Camera(); virtual ~Camera(); void setInitDistance(float z) { translations.z = -std::abs(z); } void setAspect(float a) { aspect = a; }; void setRotationFactor(float f) { rfactor = f; }; void setTranslationFactor(float f) { tfactor = f; }; void setScaleFactor(float f) { sfactor = f; }; void mouseClicked(float x, float y, bool shift, bool ctrl, bool alt); void mouseMoved(float x, float y); void applyProjectionMatrix(std::shared_ptr P) const; void applyViewMatrix(std::shared_ptr MV) const; private: float aspect; float fovy; float znear; float zfar; glm::vec2 rotations; glm::vec3 translations; glm::vec2 mousePrev; int state; float rfactor; float tfactor; float sfactor; }; #endif