diff --git a/include/ACGL/Scene/CameraBase.hh b/include/ACGL/Scene/CameraBase.hh new file mode 100644 index 0000000000000000000000000000000000000000..7abcee8a589956c0a087661d0c171ad8d9593683 --- /dev/null +++ b/include/ACGL/Scene/CameraBase.hh @@ -0,0 +1,26 @@ +#pragma once + +#include <ACGL/Math/Math.hh> + +namespace ACGL{ +namespace Scene{ + +/** + * @brief Common interface for cameras + */ +class CameraBase +{ +protected: + CameraBase(); +public: + virtual ~CameraBase(); + + // interface: + virtual glm::vec3 getPosition() const = 0; + virtual glm::mat4 getViewMatrix() const = 0; + virtual glm::mat4 getProjectionMatrix() const = 0; + virtual glm::uvec2 getViewportSize() const = 0; +}; + +} +} diff --git a/include/ACGL/Scene/FixedCamera.hh b/include/ACGL/Scene/FixedCamera.hh new file mode 100644 index 0000000000000000000000000000000000000000..a86923c4f729dcbf79183d10c277b2dd8e31e647 --- /dev/null +++ b/include/ACGL/Scene/FixedCamera.hh @@ -0,0 +1,33 @@ +#pragma once + +#include <Common/ClassHelper.hh> +#include "CameraBase.hh" + +namespace ACGL{ +namespace Scene{ + +/** + * @brief A fixed camera + */ +class FixedCamera : public CameraBase +{ +private: + + glm::vec3 mPosition; + glm::mat4 mViewMatrix; + glm::mat4 mProjectionMatrix; + glm::uvec2 mViewportSize; + +public: + /// CAUTION: default ctor with zero values + FixedCamera(); + FixedCamera(const glm::vec3 &_pos, const glm::mat4 &_view, const glm::mat4 &_proj, const glm::uvec2 &_viewport); + + CLASS_GETTER_SETTER2(glm::vec3, Position) + CLASS_GETTER_SETTER2(glm::mat4, ViewMatrix) + CLASS_GETTER_SETTER2(glm::mat4, ProjectionMatrix) + CLASS_GETTER_SETTER2(glm::uvec2, ViewportSize) +}; + +} +} diff --git a/include/ACGL/Scene/GenericCamera.hh b/include/ACGL/Scene/GenericCamera.hh index 7bc62e68e28a30a8c87813eb0464974f4434abec..c486dac9f0d91de3bb01d61c8b167c50e3ed8a3f 100644 --- a/include/ACGL/Scene/GenericCamera.hh +++ b/include/ACGL/Scene/GenericCamera.hh @@ -9,6 +9,8 @@ #include <ACGL/Math/Math.hh> #include <glm/gtx/quaternion.hpp> +#include "CameraBase.hh" + /* * What you definitly want to set: * - a position in 3D space (a vec3) @@ -46,7 +48,7 @@ namespace ACGL{ namespace Scene{ -class GenericCamera +class GenericCamera : public CameraBase { public: /////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/ACGL/Scene/CameraBase.cc b/src/ACGL/Scene/CameraBase.cc new file mode 100644 index 0000000000000000000000000000000000000000..660000fc7d3737492516bbf3ef1c09f992b2e160 --- /dev/null +++ b/src/ACGL/Scene/CameraBase.cc @@ -0,0 +1,15 @@ +#include <ACGL/Scene/CameraBase.hh> + +namespace ACGL{ +namespace Scene{ + +CameraBase::CameraBase() +{ +} + +CameraBase::~CameraBase() +{ +} + +} +} diff --git a/src/ACGL/Scene/FixedCamera.cc b/src/ACGL/Scene/FixedCamera.cc new file mode 100644 index 0000000000000000000000000000000000000000..181828bff1fc56616c1c1b66bf616e37a4d9ea55 --- /dev/null +++ b/src/ACGL/Scene/FixedCamera.cc @@ -0,0 +1,20 @@ +#include <ACGL/Scene/FixedCamera.hh> + + +namespace ACGL{ +namespace Scene{ + +FixedCamera::FixedCamera() +{ +} + +FixedCamera::FixedCamera(const glm::vec3 &_pos, const glm::mat4 &_view, const glm::mat4 &_proj, const glm::uvec2 &_viewport) : + mPosition(_pos), + mViewMatrix(_view), + mProjectionMatrix(_proj), + mViewportSize(_viewport) +{ +} + +} +}