diff --git a/LearnOpenGL/Camera.h b/LearnOpenGL/Camera.h
index 61571c9bfade79d542aafbbff92a3271043f3e4c..2ce75658fdd3a34590f521e75b1e46830c5bb2bb 100644
--- a/LearnOpenGL/Camera.h
+++ b/LearnOpenGL/Camera.h
@@ -1,10 +1,7 @@
 #ifndef CAMERA_H
 #define CAMERA_H
 
-#include <glm/glm.hpp>
-#include <glm/gtc/matrix_transform.hpp>
-
-#include <vector>
+#include "Transform.h"
 
 // Defines several possible options for camera movement. Used as abstraction to stay away from window-system specific input methods
 enum Camera_Movement {
@@ -21,64 +18,62 @@ const float SPEED = 10.0f;
 const float SENSITIVITY = 0.1f;
 const float ZOOM = 45.0f;
 
-// An abstract camera class that processes input and calculates the corresponding Euler Angles, Vectors and Matrices for use in OpenGL
 class Camera
 {
 public:
-	// Camera Attributes
+	Transform transform;
+
 	glm::vec3 Position;
 	glm::vec3 Front;
-	glm::vec3 Up;
-	glm::vec3 Right;
 	glm::vec3 WorldUp;
-	// Euler Angles
+
 	float Yaw;
 	float Pitch;
-	// Camera options
+
 	float MovementSpeed;
 	float MouseSensitivity;
 	float Zoom;
 
-	// Constructor with vectors
 	Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM)
 	{
-		Position = position;
+		transform.set_translate(position);
+
 		WorldUp = up;
 		Yaw = yaw;
 		Pitch = pitch;
-		updateCameraVectors();
+
+		transform.set_rotate(glm::vec3(PITCH, YAW, 0));
 	}
-	// Constructor with scalar values
+
 	Camera(float posX, float posY, float posZ, float upX, float upY, float upZ, float yaw, float pitch) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM)
 	{
-		Position = glm::vec3(posX, posY, posZ);
+		transform.set_translate(glm::vec3(posX, posY, posZ));
+
 		WorldUp = glm::vec3(upX, upY, upZ);
 		Yaw = yaw;
 		Pitch = pitch;
-		updateCameraVectors();
+
+		transform.set_rotate(glm::vec3(PITCH, YAW, 0));
 	}
 
-	// Returns the view matrix calculated using Euler Angles and the LookAt Matrix
 	glm::mat4 GetViewMatrix()
 	{
-		return glm::lookAt(Position, Position + Front, Up);
+		return glm::lookAt(transform.get_translate(), transform.get_translate() + transform.get_front(), transform.get_up());
 	}
 
-	// Processes input received from any keyboard-like input system. Accepts input parameter in the form of camera defined ENUM (to abstract it from windowing systems)
 	void ProcessKeyboard(Camera_Movement direction, float deltaTime)
 	{
 		float velocity = MovementSpeed * deltaTime;
 		if (direction == FORWARD)
-			Position += Front * velocity;
+			transform.set_translate(transform.get_translate() += transform.get_front() * velocity);
 		if (direction == BACKWARD)
-			Position -= Front * velocity;
+			transform.set_translate(transform.get_translate() -= transform.get_front() * velocity);
 		if (direction == LEFT)
-			Position -= Right * velocity;
+			transform.set_translate(transform.get_translate() -= transform.get_right() * velocity);
 		if (direction == RIGHT)
-			Position += Right * velocity;
+			transform.set_translate(transform.get_translate() += transform.get_right() * velocity);
 	}
 
-	// Processes input received from a mouse input system. Expects the offset value in both the x and y direction.
 	void ProcessMouseMovement(float xoffset, float yoffset, bool constrainPitch = true)
 	{
 		xoffset *= MouseSensitivity;
@@ -87,7 +82,6 @@ public:
 		Yaw += xoffset;
 		Pitch += yoffset;
 
-		// Make sure that when pitch is out of bounds, screen doesn't get flipped
 		if (constrainPitch)
 		{
 			if (Pitch > 89.0f)
@@ -95,12 +89,9 @@ public:
 			if (Pitch < -89.0f)
 				Pitch = -89.0f;
 		}
-
-		// Update Front, Right and Up Vectors using the updated Euler angles
-		updateCameraVectors();
+		transform.set_rotate(glm::vec3(Pitch, Yaw, 0));
 	}
 
-	// Processes input received from a mouse scroll-wheel event. Only requires input on the vertical wheel-axis
 	void ProcessMouseScroll(float yoffset)
 	{
 		if (Zoom >= 1.0f && Zoom <= 45.0f)
@@ -110,20 +101,5 @@ public:
 		if (Zoom >= 45.0f)
 			Zoom = 45.0f;
 	}
-
-private:
-	// Calculates the front vector from the Camera's (updated) Euler Angles
-	void updateCameraVectors()
-	{
-		// Calculate the new Front vector
-		glm::vec3 front;
-		front.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch));
-		front.y = sin(glm::radians(Pitch));
-		front.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch));
-		Front = glm::normalize(front);
-		// Also re-calculate the Right and Up vector
-		Right = glm::normalize(glm::cross(Front, WorldUp));  // Normalize the vectors, because their length gets closer to 0 the more you look up or down which results in slower movement.
-		Up = glm::normalize(glm::cross(Right, Front));
-	}
 };
 #endif
\ No newline at end of file