diff --git a/LearnOpenGL/OpenGLWrapper.cpp b/LearnOpenGL/OpenGLWrapper.cpp
index a804383e408d15d10af546880131555d5654e9b0..6f282f145b8c1dbad6c55981ac45ed69302a64f1 100644
--- a/LearnOpenGL/OpenGLWrapper.cpp
+++ b/LearnOpenGL/OpenGLWrapper.cpp
@@ -68,6 +68,7 @@ RenderObject::RenderObject(Mesh * _mesh)
 	mesh = _mesh;
 
 	update_model_matrix();
+	update_directional_vector();
 }
 
 Material *RenderObject::get_material()
@@ -97,11 +98,29 @@ void RenderObject::update_model_matrix()
 	model = glm::scale(model, scale);
 }
 
+void RenderObject::update_directional_vector()
+{
+	glm::vec3 front;
+	glm::vec3 up;
+	glm::vec3 right;
+
+	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, 1, 0)));
+
+	up = glm::normalize(glm::cross(right, front));
+}
+
 void RenderObject::set_translate(glm::vec3 _translate)
 {
 	translate = _translate;
 
 	update_model_matrix();
+	update_directional_vector();
 }
 
 void RenderObject::set_rotate(glm::vec3 _rotate)
@@ -109,6 +128,7 @@ void RenderObject::set_rotate(glm::vec3 _rotate)
 	rotate = _rotate;
 
 	update_model_matrix();
+	update_directional_vector();
 }
 
 void RenderObject::set_scale(glm::vec3 _scale)
@@ -123,6 +143,7 @@ void RenderObject::move(glm::vec3 _delta)
 	translate += _delta;
 
 	update_model_matrix();
+	update_directional_vector();
 }
 
 void RenderObject::move(glm::vec3 _direction, glm::vec1 _velocity)
@@ -177,23 +198,13 @@ void RenderObject::render(Camera &camera)
 
 void RenderObject::projective_render(Camera &camera)
 {
-	glm::vec3 projrotate = glm::vec3(60.0f, 0.0f, 0.0f);
-	glm::vec3 front;
-	front.x = cos(glm::radians(projrotate.y)) * cos(glm::radians(projrotate.x));
-	front.y = sin(glm::radians(projrotate.x));
-	front.z = sin(glm::radians(projrotate.y)) * cos(glm::radians(projrotate.x));
-	front = glm::normalize(front);
-
-	auto Right = glm::normalize(glm::cross(front, glm::vec3(0.0f, 1.0f, 0.0f)));
-	auto Up = glm::normalize(glm::cross(Right, front));
-
 	glm::mat4 bias = { 0.5f, 0.0f, 0.0f, 0.5f,
 							0.0f, 0.5f, 0.0f, 0.5f,
 							0.0f, 0.0f, 0.5f, 0.5f,
 							0.0f, 0.0f, 0.0f, 1.0f };
 
 	glm::mat4 projector_view = glm::lookAt(camera.Position, camera.Position + camera.Front, camera.Up);
-	glm::mat4 projector_projection = glm::perspective(glm::radians(camera.Zoom), (float)_SCR_WIDTH / (float)_SCR_HEIGHT, 0.1f, 100.0f);
+	glm::mat4 projector_projection = glm::perspective(glm::radians(camera.Zoom), 1.0f, 0.1f, 100.0f);
 
 	auto prog = material->get_program();
 	glUseProgram(prog);
@@ -362,12 +373,12 @@ void set_uniform_value(GLuint &prog, const char *name, glm::ivec3 &value)
 	auto uniform = glGetUniformLocation(prog, name);
 	glUniform3iv(uniform, 1, &value.x);
 }
-void set_uniform_value(GLuint &prog, const char *name, glm::vec4 &value)
+void set_uniform_value(GLuint &prog, const char *name, glm::vec4 value)
 {
 	auto uniform = glGetUniformLocation(prog, name);
 	glUniform4fv(uniform, 1, &value.x);
 }
-void set_uniform_value(GLuint &prog, const char *name, glm::ivec4 &value)
+void set_uniform_value(GLuint &prog, const char *name, glm::ivec4 value)
 {
 	auto uniform = glGetUniformLocation(prog, name);
 	glUniform4iv(uniform, 1, &value.x);
diff --git a/LearnOpenGL/OpenGLWrapper.h b/LearnOpenGL/OpenGLWrapper.h
index 7b3e480e452a28b05a83ae76d77c4fa04eee1bc4..2c42d76936309e109a244e71ef8116c8e90025df 100644
--- a/LearnOpenGL/OpenGLWrapper.h
+++ b/LearnOpenGL/OpenGLWrapper.h
@@ -64,7 +64,12 @@ private:
 	glm::vec3 rotate;
 	glm::vec3 scale;
 
+	glm::vec3 front;
+	glm::vec3 up;
+	glm::vec3 right;
+
 	void update_model_matrix();
+	void update_directional_vector();
 
 public:
 	RenderObject(Mesh * _mesh);
@@ -72,6 +77,7 @@ public:
 	Material *get_material();
 	GLuint get_vertex_count();
 	glm::mat4 get_model_matrix();
+	glm::vec3 get_front();
 
 	void set_translate(glm::vec3 _translate);
 	void set_rotate(glm::vec3 _rotate);