]> git.localhorst.tv Git - blank.git/blobdiff - src/graphics/Camera.cpp
some code reorganization
[blank.git] / src / graphics / Camera.cpp
diff --git a/src/graphics/Camera.cpp b/src/graphics/Camera.cpp
new file mode 100644 (file)
index 0000000..5f61d26
--- /dev/null
@@ -0,0 +1,55 @@
+#include "Camera.hpp"
+
+#include "../model/geometry.hpp"
+
+#include <GL/glew.h>
+#include <glm/gtc/matrix_transform.hpp>
+
+
+namespace blank {
+
+Camera::Camera() noexcept
+: fov(PI_0p25)
+, aspect(1.0f)
+, near_clip(0.1f)
+, far_clip(256.0f)
+, projection(glm::perspective(fov, aspect, near_clip, far_clip)) {
+
+}
+
+
+void Camera::Viewport(int width, int height) noexcept {
+       Viewport(0, 0, width, height);
+}
+
+void Camera::Viewport(int x, int y, int width, int height) noexcept {
+       glViewport(x, y, width, height);
+       Aspect(width, height);
+}
+
+void Camera::FOV(float f) noexcept {
+       fov = f;
+       UpdateProjection();
+}
+
+void Camera::Aspect(float r) noexcept {
+       aspect = r;
+       UpdateProjection();
+}
+
+void Camera::Aspect(float w, float h) noexcept {
+       Aspect(w / h);
+}
+
+void Camera::Clip(float near, float far) noexcept {
+       near_clip = near;
+       far_clip = far;
+       UpdateProjection();
+}
+
+
+void Camera::UpdateProjection() noexcept {
+       projection = glm::perspective(fov, aspect, near_clip, far_clip);
+}
+
+}