diff --git a/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.cpp b/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.cpp
index 3e55f24f2367cdcbe019791a9ab971559bab4d12..99c18b798fb5282c83706887cd17fe936c70c73f 100644
--- a/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.cpp
+++ b/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.cpp
@@ -59,14 +59,14 @@ namespace cgp
 	}
 
 
-	void camera_controller_first_person_euler::idle_frame(mat4& camera_matrix_view)
+	void camera_controller_first_person_euler::idle_frame(mat4& camera_matrix_view, float speed)
 	{
 		// Preconditions
 		assert_cgp_no_msg(inputs != nullptr);
 		assert_cgp_no_msg(window != nullptr);
 		if (!is_active) return;
 
-		float const magnitude = 2*inputs->time_interval;
+		float const magnitude = 2*speed*inputs->time_interval;
 
 		// displacement with WSAD
 		if (inputs->keyboard.is_pressed(GLFW_KEY_R))
diff --git a/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.hpp b/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.hpp
index ed50427bae9cf1cddd529820bbeadf50034d8111..c096df0b229e84024261837c93c67360add15fbb 100644
--- a/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.hpp
+++ b/projet-code/cgp/library/cgp/graphics/camera/camera_controller/camera_controller_first_person_euler/camera_controller_first_person_euler.hpp
@@ -15,7 +15,7 @@ namespace cgp
 
 		// Keys up/down/left/right used to translate the camera
 		//void idle_frame(camera_orbit_spherical_coord& camera);
-		void idle_frame(mat4& camera_matrix_view);
+		void idle_frame(mat4& camera_matrix_view, float speed);
 
 		void update(mat4& camera_matrix_view);
 
diff --git a/projet-code/scenes_inf443/base/base.exe b/projet-code/scenes_inf443/base/base.exe
index 24701fe16285e7387caa880fbddff8396332114f..dcd778d0a84e94803cc63c04846e76045bacda2f 100644
Binary files a/projet-code/scenes_inf443/base/base.exe and b/projet-code/scenes_inf443/base/base.exe differ
diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp
index 1e025007df9b3b8a8e641db619ea438eedac77ba..b8367877332c0cf818b2d7037e73b305c87244b1 100644
--- a/projet-code/scenes_inf443/base/src/scene.cpp
+++ b/projet-code/scenes_inf443/base/src/scene.cpp
@@ -7,11 +7,11 @@
 #include "terrain.hpp"
 
 using namespace cgp;
-int num_trees = 50;
-int num_grass = 100;
+int num_trees = 200;
+int num_grass = 200;
 std::vector<vec3> tree_position;
 std::vector<vec3> grass_position;
-float terrain_length = 50;
+float terrain_length = 250;
 
 void scene_structure::initialize()
 {
@@ -23,13 +23,14 @@ void scene_structure::initialize()
 	//camera_control.look_at({ 20.0f,15.0f,15.0f }, {0,0,0});
 	
 	//for first person camera
+	camera_control.camera_model.position_camera = { 0,0,evaluate_terrain_height(0,0,terrain_length)+10};
 	camera_control.camera_model.set_rotation_axis({ 0,0,1 });
 	//custum function we added to ..first_person_euler
 	camera_control.trap_cursor(gui.trap_cursor);
 	global_frame.initialize_data_on_gpu(mesh_primitive_frame());
 
 
-	int N_terrain_samples = 100;
+	int N_terrain_samples = 500;
 	mesh const terrain_mesh = create_terrain_mesh(N_terrain_samples, terrain_length);
 	terrain.initialize_data_on_gpu(terrain_mesh);
 	terrain.material.color = { 0.6f,0.85f,0.5f };
@@ -292,6 +293,7 @@ void scene_structure::display_gui()
 	ImGui::SliderFloat("Time", &timer_mvt.t, timer_mvt.t_min, timer_mvt.t_max);
 	ImGui::SliderFloat("Time scale", &timer_mvt.scale, 0.0f, 2.0f);
 	ImGui::SliderFloat("K", &gui.k, 0.0f, 10.0f);
+	ImGui::SliderFloat("Speed", &gui.speed, 0.0f, 10.0f);
 
 	// Display the GUI associated to the key position
 	keyframe.display_gui();
@@ -322,5 +324,10 @@ void scene_structure::keyboard_event()
 }
 void scene_structure::idle_frame()
 {
-	camera_control.idle_frame(environment.camera_view);
+	if (camera_control.inputs->keyboard.ctrl) {
+		camera_control.idle_frame(environment.camera_view, 10);
+	}
+	else {
+		camera_control.idle_frame(environment.camera_view, gui.speed);
+	}
 }
\ No newline at end of file
diff --git a/projet-code/scenes_inf443/base/src/scene.hpp b/projet-code/scenes_inf443/base/src/scene.hpp
index dd142fee9b9b2730dc97f9193d4719f7265eb694..09df3aecf8bdc7cce524090c75a6a015b2a9f80e 100644
--- a/projet-code/scenes_inf443/base/src/scene.hpp
+++ b/projet-code/scenes_inf443/base/src/scene.hpp
@@ -22,8 +22,9 @@ struct gui_parameters {
 	bool display_frame = true;
 	bool display_wireframe = false;
 	float k = 0.5f;
-	bool trap_cursor = true;
-	bool fly = false;
+	bool trap_cursor = false;
+	bool fly = true;
+	float speed = 1.0f;
 };
 
 // The structure of the custom scene
diff --git a/projet-code/scenes_inf443/base/src/terrain.cpp b/projet-code/scenes_inf443/base/src/terrain.cpp
index 4b05afa3a14c5e5f6435521a2165f1e374a6856f..183651a8b3360ad2c9f7acfe0bc9dabcc0328c54 100644
--- a/projet-code/scenes_inf443/base/src/terrain.cpp
+++ b/projet-code/scenes_inf443/base/src/terrain.cpp
@@ -19,13 +19,13 @@ float evaluate_terrain_height(float x, float y, float terrain_length)
     }
 
     perlin_noise_parameters parameters;
-    parameters.terrain_height = 6.03;
-    parameters.octave = 5;
-    parameters.frequency_gain = 2.89;
-    parameters.persistency = 0.39;
+    parameters.terrain_height = 25;
+    parameters.octave = 9;
+    parameters.frequency_gain = 2.4;
+    parameters.persistency = 0.33;
     
 
-    float perlin_noise = parameters.terrain_height * noise_perlin(vec2(x / terrain_length, y / terrain_length), parameters.octave, parameters.persistency, parameters.frequency_gain);
+    float perlin_noise = parameters.terrain_height * noise_perlin(vec2(3*x / terrain_length, 3*y / terrain_length), parameters.octave, parameters.persistency, parameters.frequency_gain);
 
 
     return perlin_noise;