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;