GameKit  0.0.1a
C++ gamedev tools
Camera.cpp
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: Camera.cpp
5  *
6  * Description:
7  *
8  * Created: 26/12/2018 16:33:51
9  *
10  * Author: Quentin Bazin, <quent42340@gmail.com>
11  *
12  * =====================================================================================
13  */
14 #define GLM_FORCE_RADIANS
15 #include <glm/gtc/matrix_transform.hpp>
16 
17 #include "gk/gl/Camera.hpp"
18 
19 namespace gk {
20 
21 Camera::Camera(float fov, float near, float far) {
22  m_fieldOfView = fov;
23  m_nearPlane = near;
24  m_farPlane = far;
25 
26  setPosition(0, 0, 0);
27 }
28 
29 void Camera::setPosition(const Vector3f &position) {
30  m_position = position;
31  m_viewTransformUpdated = false;
32 }
33 
34 void Camera::setDirection(const Vector3f &direction) {
35  m_direction = direction;
36  m_viewTransformUpdated = false;
37 }
38 
39 void Camera::setTargetPosition(const Vector3f &target) {
40  m_direction = target - getPosition();
41  m_viewTransformUpdated = false;
42 }
43 
44 void Camera::setUpVector(const Vector3f &upVector) {
45  m_upVector = upVector;
46  m_viewTransformUpdated = false;
47 }
48 
49 void Camera::setFieldOfView(float fov) {
50  m_fieldOfView = fov;
51  m_transformUpdated = false;
52 }
53 
54 void Camera::setAspectRatio(float aspect) {
55  m_aspect = aspect;
56  m_transformUpdated = false;
57 }
58 
59 void Camera::setNearClippingPlane(float distance) {
60  m_nearPlane = distance;
61  m_transformUpdated = false;
62 }
63 
64 void Camera::setFarClippingPlane(float distance) {
65  m_farPlane = distance;
66  m_transformUpdated = false;
67 }
68 
70  if (!m_transformUpdated) {
72 
73  m_transformUpdated = true;
74  }
75 
76  return m_transform;
77 }
78 
81  m_viewTransform = glm::lookAt(glm::vec3{getPosition().x, getPosition().y, getPosition().z},
83  glm::vec3{m_upVector.x, m_upVector.y, m_upVector.z});
84 
86  }
87 
88  return m_viewTransform;
89 }
90 
91 } // namespace gk
92 
bool m_transformUpdated
Definition: View.hpp:68
Transform m_transform
Definition: View.hpp:71
Vector3f m_direction
Definition: Camera.hpp:63
void setPosition(float x, float y, float z)
Definition: Camera.hpp:41
float m_farPlane
Definition: Camera.hpp:69
Camera(float fov, float near, float far)
Definition: Camera.cpp:21
Transform m_viewTransform
Definition: View.hpp:72
void setFieldOfView(float fov)
Definition: Camera.cpp:49
float m_fieldOfView
Definition: Camera.hpp:66
void setTargetPosition(float x, float y, float z)
Definition: Camera.hpp:47
Vector3f m_upVector
Definition: Camera.hpp:64
void setUpVector(float x, float y, float z)
Definition: Camera.hpp:50
const Transform & getTransform() const override
Definition: Camera.cpp:69
void setFarClippingPlane(float distance)
Definition: Camera.cpp:64
void setDirection(float x, float y, float z)
Definition: Camera.hpp:44
bool m_viewTransformUpdated
Definition: View.hpp:69
void setAspectRatio(float aspect)
Definition: Camera.cpp:54
Vector3f m_position
Definition: Camera.hpp:62
void setNearClippingPlane(float distance)
Definition: Camera.cpp:59
const Vector3f & getPosition() const override
Definition: Camera.hpp:32
float m_nearPlane
Definition: Camera.hpp:68
const Transform & getViewTransform() const override
Definition: Camera.cpp:79
float m_aspect
Definition: Camera.hpp:67