From 7f47be173ea78a481f4d25bc04d338499c3a8807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9?= <noe.artru@polytechnique.org> Date: Fri, 21 Apr 2023 16:06:10 +0200 Subject: [PATCH] Larger terrain and perlin tests --- projet-code/scenes_inf443/base/base.exe | Bin 2062848 -> 2062848 bytes projet-code/scenes_inf443/base/src/ball.cpp | 14 +++++------ projet-code/scenes_inf443/base/src/ball.hpp | 2 +- projet-code/scenes_inf443/base/src/scene.cpp | 14 +++++++---- projet-code/scenes_inf443/base/src/scene.hpp | 1 + .../scenes_inf443/base/src/terrain.cpp | 23 ++++++++++++------ .../scenes_inf443/base/src/terrain.hpp | 9 ++++++- 7 files changed, 42 insertions(+), 21 deletions(-) diff --git a/projet-code/scenes_inf443/base/base.exe b/projet-code/scenes_inf443/base/base.exe index f74f65cd0f787e75efac0d42bc582eab637f05cf..24701fe16285e7387caa880fbddff8396332114f 100644 GIT binary patch delta 4894 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 NH7q!*CFz~R{|Dz4$8rDw delta 5006 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 Q5n+qh7WjEnYGcd)09e1^5&!@I diff --git a/projet-code/scenes_inf443/base/src/ball.cpp b/projet-code/scenes_inf443/base/src/ball.cpp index f84adfd..1064ece 100644 --- a/projet-code/scenes_inf443/base/src/ball.cpp +++ b/projet-code/scenes_inf443/base/src/ball.cpp @@ -21,7 +21,7 @@ void ball::initialize() void ball::simulate(float dt, float terrain_length) { for (int i = 0; i < N; i++) { if (pos[i][2] < -1 || cgp::abs(pos[i][0]) > terrain_length / 2 || cgp::abs(pos[i][1]) > terrain_length / 2) { - pos[i] = { 0,0, evaluate_terrain_height(0,0) }; + pos[i] = { 0,0, evaluate_terrain_height(0,0, terrain_length) }; v[i] = { 3 * rand_interval(), 3 * rand_interval(), 4 + i }; } else { @@ -29,8 +29,8 @@ void ball::simulate(float dt, float terrain_length) { v[i][2] -= 10 * dt; } - if (pos[i][2] < evaluate_terrain_height(pos[i][0], pos[i][1])) { - vec3 normal = normalize(terrain_orientation(pos[i][0], pos[i][1])); + if (pos[i][2] < evaluate_terrain_height(pos[i][0], pos[i][1], terrain_length)) { + vec3 normal = normalize(terrain_orientation(pos[i][0], pos[i][1], terrain_length)); v[i][2] += 10 * dt; vec3 temp = v[i] - dot(v[i], normal) * normal; @@ -42,11 +42,11 @@ void ball::simulate(float dt, float terrain_length) { } } -vec3 terrain_orientation(float x, float y) { - float z = evaluate_terrain_height(x, y); +vec3 terrain_orientation(float x, float y, float terrain_length) { + float z = evaluate_terrain_height(x, y, terrain_length); float step = 0.1f; - vec3 u = { step, 0, evaluate_terrain_height(x + step,y) - z }; - vec3 v = { 0, step, evaluate_terrain_height(x,y + step) - z }; + vec3 u = { step, 0, evaluate_terrain_height(x + step,y, terrain_length) - z }; + vec3 v = { 0, step, evaluate_terrain_height(x,y + step, terrain_length) - z }; return cross(v, u); } diff --git a/projet-code/scenes_inf443/base/src/ball.hpp b/projet-code/scenes_inf443/base/src/ball.hpp index a1c8db3..03af3f6 100644 --- a/projet-code/scenes_inf443/base/src/ball.hpp +++ b/projet-code/scenes_inf443/base/src/ball.hpp @@ -17,5 +17,5 @@ struct ball { void simulate(float dt, float terrain_length); }; -vec3 terrain_orientation(float x, float y); +vec3 terrain_orientation(float x, float y, float terrain_length); diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp index 2a62466..1e02500 100644 --- a/projet-code/scenes_inf443/base/src/scene.cpp +++ b/projet-code/scenes_inf443/base/src/scene.cpp @@ -11,7 +11,7 @@ int num_trees = 50; int num_grass = 100; std::vector<vec3> tree_position; std::vector<vec3> grass_position; -float terrain_length = 20; +float terrain_length = 50; void scene_structure::initialize() { @@ -55,7 +55,7 @@ void scene_structure::initialize() float x = 1.0; float y = 2.0; - tree.model.translation = { x, y, evaluate_terrain_height(x,y) }; + tree.model.translation = { x, y, evaluate_terrain_height(x,y, terrain_length) }; tree_position = generate_positions_on_terrain(num_trees, terrain_length-1); @@ -119,9 +119,12 @@ void scene_structure::display_frame() //custom function we added to ..first_person_eulor, changes whether the cursor is trapped or not camera_control.trap_cursor(gui.trap_cursor); - vec3 eye_level = camera_control.camera_model.position_camera; - eye_level[2] = evaluate_terrain_height(eye_level[0], eye_level[1]) + 0.75; - camera_control.camera_model.position_camera = eye_level; + //Walking on ground + if (!gui.fly) { + vec3 eye_level = camera_control.camera_model.position_camera; + eye_level[2] = evaluate_terrain_height(eye_level[0], eye_level[1], terrain_length) + 0.75; + camera_control.camera_model.position_camera = eye_level; + } // Set the light to the current position of the camera environment.light = camera_control.camera_model.position(); @@ -284,6 +287,7 @@ void scene_structure::display_gui() ImGui::Checkbox("Frame", &gui.display_frame); ImGui::Checkbox("Wireframe", &gui.display_wireframe); ImGui::Checkbox("Trapped Cursor", &gui.trap_cursor); + ImGui::Checkbox("Fly", &gui.fly); 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); diff --git a/projet-code/scenes_inf443/base/src/scene.hpp b/projet-code/scenes_inf443/base/src/scene.hpp index 25b5280..dd142fe 100644 --- a/projet-code/scenes_inf443/base/src/scene.hpp +++ b/projet-code/scenes_inf443/base/src/scene.hpp @@ -23,6 +23,7 @@ struct gui_parameters { bool display_wireframe = false; float k = 0.5f; bool trap_cursor = true; + bool fly = false; }; // 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 98ff20e..4b05afa 100644 --- a/projet-code/scenes_inf443/base/src/terrain.cpp +++ b/projet-code/scenes_inf443/base/src/terrain.cpp @@ -6,20 +6,29 @@ using namespace cgp; // Evaluate 3D position of the terrain for any (x,y) -float evaluate_terrain_height(float x, float y) +float evaluate_terrain_height(float x, float y, float terrain_length) { + //p, h, sigma -> positions, heights and wideness of bell curves vec2 p[] = { {-10, -10}, {5, 5}, {-3, 4}, {6, 4} }; float h[] = { 3.0f, -1.5f, 1.0f, 2.0f }; float sigma[] = { 10.0f, 3.0f, 4.0f, 4.0f }; - float noise = 0.4*noise_perlin(vec2(x/50,y/50), 4.5f, 0.5, 5.0f); - float z = 0; for (int i = 0; i < 4; i++) { float d = norm(vec2(x, y) - p[i]) / sigma[i]; z += h[i] * std::exp(-d * d); } - z += noise; - return z; + + perlin_noise_parameters parameters; + parameters.terrain_height = 6.03; + parameters.octave = 5; + parameters.frequency_gain = 2.89; + parameters.persistency = 0.39; + + + float perlin_noise = parameters.terrain_height * noise_perlin(vec2(x / terrain_length, y / terrain_length), parameters.octave, parameters.persistency, parameters.frequency_gain); + + + return perlin_noise; } @@ -44,7 +53,7 @@ mesh create_terrain_mesh(int N, float terrain_length) float y = (v - 0.5f) * terrain_length; // Compute the surface height function at the given sampled coordinate - float z = evaluate_terrain_height(x,y); + float z = evaluate_terrain_height(x,y, terrain_length); // Store vertex coordinates terrain.position[kv+N*ku] = {x,y,z}; @@ -81,7 +90,7 @@ std::vector<cgp::vec3> generate_positions_on_terrain(int N, float terrain_length for (int i = 0; i < N; i++) { x = rand_interval(-d, d); y = rand_interval(-d, d); - rand_pos.push_back({ x,y, evaluate_terrain_height(x, y) }); + rand_pos.push_back({ x,y, evaluate_terrain_height(x, y, terrain_length) }); } return rand_pos; diff --git a/projet-code/scenes_inf443/base/src/terrain.hpp b/projet-code/scenes_inf443/base/src/terrain.hpp index 757b2ae..96f8be2 100644 --- a/projet-code/scenes_inf443/base/src/terrain.hpp +++ b/projet-code/scenes_inf443/base/src/terrain.hpp @@ -2,8 +2,15 @@ #include "cgp/cgp.hpp" +struct perlin_noise_parameters +{ + float persistency = 0.35f; + float frequency_gain = 2.0f; + int octave = 6; + float terrain_height = 0.5f; +}; -float evaluate_terrain_height(float x, float y); +float evaluate_terrain_height(float x, float y, float terrain_length); /** Compute a terrain mesh The (x,y) coordinates of the terrain are set in [-length/2, length/2]. -- GitLab