diff --git a/LearnOpenGL/LearnOpenGL.vcxproj b/LearnOpenGL/LearnOpenGL.vcxproj
index 9f0a07d16f4a679664c9659b08ec712d7c18fa24..132c65d2db104a015d4274d26e605a1709dc6fe7 100644
--- a/LearnOpenGL/LearnOpenGL.vcxproj
+++ b/LearnOpenGL/LearnOpenGL.vcxproj
@@ -127,6 +127,7 @@
     <ClCompile Include="ResourceLoader.cpp" />
     <ClCompile Include="OpenGLWrapper.cpp" />
     <ClCompile Include="Source.cpp" />
+    <ClCompile Include="Transform.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Camera.h" />
@@ -135,6 +136,7 @@
     <ClInclude Include="ResourceLoader.h" />
     <ClInclude Include="OpenGLWrapper.h" />
     <ClInclude Include="ShaderType.h" />
+    <ClInclude Include="Transform.h" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
diff --git a/LearnOpenGL/LearnOpenGL.vcxproj.filters b/LearnOpenGL/LearnOpenGL.vcxproj.filters
index 535bccb84d589b059ba72fb1dc686450751ff88e..6ce7b3628dafb3e50cccf2004f73706bde59b2a1 100644
--- a/LearnOpenGL/LearnOpenGL.vcxproj.filters
+++ b/LearnOpenGL/LearnOpenGL.vcxproj.filters
@@ -30,6 +30,9 @@
     <ClCompile Include="FileSystem.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="Transform.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="ShaderType.h">
@@ -50,5 +53,8 @@
     <ClInclude Include="FileSystem.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="Transform.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/LearnOpenGL/Transform.cpp b/LearnOpenGL/Transform.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f0adee3f5e8d1cd7dff4da4c6f071b78f3e4ed31
--- /dev/null
+++ b/LearnOpenGL/Transform.cpp
@@ -0,0 +1,96 @@
+#include "Transform.h"
+
+Transform::Transform()
+{
+	translate = glm::vec3(0.0f, 0.0f, 0.0f);
+	rotate = glm::vec3(0.0f, 0.0f, 0.0f);
+	scale = glm::vec3(1.0f, 1.0f, 1.0f);
+
+	update_directional_vector();
+}
+
+glm::vec3 Transform::get_translate()
+{
+	return translate;
+}
+glm::vec3 Transform::get_rotate()
+{
+	return rotate;
+}
+glm::vec3 Transform::get_scale()
+{
+	return scale;
+}
+void Transform::set_translate(glm::vec3 _translate)
+{
+	translate = _translate;
+
+	update_directional_vector();
+}
+void Transform::set_rotate(glm::vec3 _rotate)
+{
+	rotate = _rotate;
+
+	update_directional_vector();
+}
+void Transform::set_scale(glm::vec3 _scale)
+{
+	scale = _scale;
+
+	update_directional_vector();
+}
+
+glm::mat4 Transform::get_model_matrix()
+{
+	glm::mat4 model = glm::mat4(1.0f);
+	model = glm::translate(model, translate);
+
+	model = glm::rotate(model, glm::radians(rotate.x), glm::vec3(1.0f, 0.0f, 0.0f));
+	model = glm::rotate(model, glm::radians(rotate.y), glm::vec3(0.0f, 1.0f, 0.0f));
+	model = glm::rotate(model, glm::radians(rotate.z), glm::vec3(0.0f, 0.0f, 1.0f));
+
+	model = glm::scale(model, scale);
+
+	return model;
+}
+
+void Transform::update_directional_vector()
+{
+	glm::vec3 _front;
+	_front.x = cos(glm::radians(rotate.y)) * cos(glm::radians(rotate.x));
+	_front.y = sin(glm::radians(rotate.x));
+	_front.z = sin(glm::radians(rotate.y)) * cos(glm::radians(rotate.x));
+
+	front = glm::normalize(_front);
+	right = glm::normalize(glm::cross(front, glm::vec3(0.0f, 1.0f, 0.0f)));
+	up = glm::normalize(glm::cross(right, front));
+}
+
+glm::vec3 Transform::get_front()
+{
+	return front;
+}
+
+glm::vec3 Transform::get_up()
+{
+	return up;
+}
+
+glm::vec3 Transform::get_right()
+{
+	return right;
+}
+
+void Transform::move(glm::vec3 _delta)
+{
+	translate += _delta;
+
+	update_directional_vector();
+}
+
+void Transform::move(glm::vec3 _direction, glm::vec1 _velocity)
+{
+	translate += glm::vec3(_velocity *_direction.x, _velocity *_direction.y, _velocity *_direction.z);
+
+	update_directional_vector();
+}
\ No newline at end of file
diff --git a/LearnOpenGL/Transform.h b/LearnOpenGL/Transform.h
new file mode 100644
index 0000000000000000000000000000000000000000..94db5f387e1d033481bd194b222da5bd96bbf43a
--- /dev/null
+++ b/LearnOpenGL/Transform.h
@@ -0,0 +1,41 @@
+#ifndef TRANSFORM_H
+#define TRANSFORM_H
+
+#include <glm/glm.hpp>
+#include <glm/gtc/matrix_transform.hpp>
+#include <glm/gtc/type_ptr.hpp>
+
+class Transform
+{
+private:
+	glm::vec3 translate;
+	glm::vec3 rotate;
+	glm::vec3 scale;
+
+	glm::vec3 front;
+	glm::vec3 up;
+	glm::vec3 right;
+
+	void update_directional_vector();
+
+public:
+	Transform();
+
+	glm::vec3 get_translate();
+	glm::vec3 get_rotate();
+	glm::vec3 get_scale();
+	void set_translate(glm::vec3 _translate);
+	void set_rotate(glm::vec3 _rotate);
+	void set_scale(glm::vec3 _scale);
+
+	glm::vec3 get_front();
+	glm::vec3 get_up();
+	glm::vec3 get_right();
+
+	glm::mat4 get_model_matrix();
+
+	void move(glm::vec3 _delta);
+	void move(glm::vec3 _direction, glm::vec1 _velocity);
+};
+
+#endif
\ No newline at end of file