From 949907125f6f05937f3357c5ddc85a2e7380cf91 Mon Sep 17 00:00:00 2001 From: sotech117 Date: Fri, 10 May 2024 06:41:07 -0400 Subject: tile fix and lighting fix --- src/ocean/ocean_alt.cpp | 130 +++++++++++++++++++++++++++++------------------- src/ocean/ocean_alt.h | 18 +++---- 2 files changed, 87 insertions(+), 61 deletions(-) (limited to 'src/ocean') diff --git a/src/ocean/ocean_alt.cpp b/src/ocean/ocean_alt.cpp index 751fca5..503cd4c 100644 --- a/src/ocean/ocean_alt.cpp +++ b/src/ocean/ocean_alt.cpp @@ -399,6 +399,36 @@ void ocean_alt::update_ocean() m_foam_constants.positions = vertices; } +std::vector ocean_alt::get_tiled_wavelengths(){ + std::vector wavelengths = std::vector(); + for (int i = 0; i < num_tiles_x; i++) + { + for (int j = 0; j < num_tiles_z; j++) + { + for (int k = 0; k < N; k++) + { + wavelengths.push_back(m_foam_constants.wavelengths[k]); + } + } + } + return wavelengths; +} + +std::vector ocean_alt::get_tiled_k_vectors(){ + std::vector k_vectors = std::vector(); + for (int i = 0; i < num_tiles_x; i++) + { + for (int j = 0; j < num_tiles_z; j++) + { + for (int k = 0; k < N; k++) + { + k_vectors.push_back(m_foam_constants.k_vectors[k]); + } + } + } + return k_vectors; +} + std::vector ocean_alt::get_vertices(){ // extend the returned array based on the tilecount std::vector vertices = std::vector(); @@ -409,8 +439,10 @@ std::vector ocean_alt::get_vertices(){ for (int k = 0; k < N; k++) { double c = Lx - 2 / (num_rows / Lx); - Eigen::Vector3f vertex = m_vertices[k] + Eigen::Vector3f(i*(c), 0.0, (j)*(c)); + Eigen::Vector3f vertex = m_vertices[k] + Eigen::Vector3f(-i*(c), 0.0, (j)*(c)); vertices.push_back(vertex); + +// std::cout << "vertex: " << vertex << std::endl; } } } @@ -432,8 +464,6 @@ std::vector ocean_alt::getNormals(){ } } } - - return normals; } @@ -441,54 +471,54 @@ std::vector ocean_alt::get_faces() { // connect the vertices into faces std::vector faces = std::vector(); -// for (int i = 0; i < num_tiles_x; i++) -// { -// for (int j = 0; j < num_tiles_z; j++) -// { -// for (int k = 0; k < N; k++) -// { -// int x = k % num_rows; -// int z = k / num_rows; -// -// // connect the vertices into faces -// if (x < num_rows - 1 && z < num_cols - 1) -// { -// int tile_index_offset = (j + num_tiles_z * i) * N; -// int i1 = k + tile_index_offset; -// int i2 = k + 1 + tile_index_offset; -// int i3 = k + num_rows + tile_index_offset; -// int i4 = k + num_rows + 1 + tile_index_offset; -// -// faces.emplace_back(i2, i1, i3); -// faces.emplace_back(i2, i3, i4); -// } -// } -// } -// } -// -// return faces; + for (int i = 0; i < num_tiles_x; i++) + { + for (int j = 0; j < num_tiles_z; j++) + { + for (int k = 0; k < N; k++) + { + int x = k / num_rows; + int z = k % num_rows; + // connect the vertices into faces + if (x < num_rows - 1 && z < num_cols - 1) + { + int tile_index_offset = (j + num_tiles_z * i) * N; + int i1 = k + tile_index_offset; + int i2 = k + 1 + tile_index_offset; + int i3 = k + num_rows + tile_index_offset; + int i4 = k + num_rows + 1 + tile_index_offset; + + faces.emplace_back(i2, i1, i3); + faces.emplace_back(i2, i3, i4); + } + } + } + } - for (int i = 0; i < N; i++) - { - int x = i / num_rows; - int z = i % num_rows; - - // connect the vertices into faces - if (x < num_rows - 1 && z < num_cols - 1) - { - int i1 = i; - int i2 = i + 1; - int i3 = i + num_rows; - int i4 = i + num_rows + 1; - - faces.emplace_back(i2, i1, i3); - faces.emplace_back(i2, i3, i4); - faces.emplace_back(i1, i2, i3); - faces.emplace_back(i3, i2, i4); - } - } - return faces; + return faces; + + +// for (int i = 0; i < N; i++) +// { +// int x = i / num_rows; +// int z = i % num_rows; +// +// // connect the vertices into faces +// if (x < num_rows - 1 && z < num_cols - 1) +// { +// int i1 = i; +// int i2 = i + 1; +// int i3 = i + num_rows; +// int i4 = i + num_rows + 1; +// +// faces.emplace_back(i2, i1, i3); +// faces.emplace_back(i2, i3, i4); +// faces.emplace_back(i1, i2, i3); +// faces.emplace_back(i3, i2, i4); +// } +// } +// return faces; } Eigen::Vector2d muliply_complex(Eigen::Vector2d a, Eigen::Vector2d b) @@ -605,7 +635,7 @@ std::vector ocean_alt::fast_fft } // divide by N*N and add the signs based on the indices - double sign[] = {-1.0, 1.0}; + double sign[] = {1.0, -1.0}; for (int i = 0; i < N; i++) { h[i] /= N; diff --git a/src/ocean/ocean_alt.h b/src/ocean/ocean_alt.h index 7e293f9..6076ab2 100644 --- a/src/ocean/ocean_alt.h +++ b/src/ocean/ocean_alt.h @@ -53,12 +53,8 @@ public: std::vector m_heights; // stores height above threshold - - - - - - + std::vector get_tiled_k_vectors(); + std::vector get_tiled_wavelengths(); private: Eigen::Vector2i index_1d_to_2d(int i); @@ -72,7 +68,7 @@ private: Eigen::Vector2d get_horiz_pos(int i); std::pair sample_complex_gaussian(); - // FOAM + // FOAM std::vector m_saturation; std::map m_waveIndexConstants; // stores constants that only need to be calculate once for each grid constant @@ -83,17 +79,17 @@ private: const int num_rows = 256; const int num_cols = 256; - const int num_tiles_x = 1; - const int num_tiles_z = 1; + const int num_tiles_x = 2; + const int num_tiles_z = 2; const double vertex_displacement = Lx / 2; const int N = num_rows*num_cols; // total number of grid points - const double lambda = .5; // how much displacement matters + const double lambda = .75; // how much displacement matters const double spacing = 1.0; // spacing between grid points const double A = 10000; // numeric constant for the Phillips spectrum - const double V = 100; // wind speed + const double V = 700; // wind speed const double gravity = 9.81; const double L = V*V/gravity; const Eigen::Vector2d omega_wind = Eigen::Vector2d(1.0, 0.0); // wind direction, used in Phillips equation -- cgit v1.2.3-70-g09d2