diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-05-06 00:01:04 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-05-06 00:01:04 -0400 |
commit | 2ba27898535e01298ef8f0d0b9ffd4e69ce13458 (patch) | |
tree | 18dac0a37704ba9c2271f185d62ea4a6d4873b61 /src/graphics | |
parent | 72bcf6a346dfcaeaac9520d8c524711192e77c3d (diff) |
uv mapping onto water good
Diffstat (limited to 'src/graphics')
-rw-r--r-- | src/graphics/shape.cpp | 51 | ||||
-rw-r--r-- | src/graphics/shape.h | 9 |
2 files changed, 60 insertions, 0 deletions
diff --git a/src/graphics/shape.cpp b/src/graphics/shape.cpp index 7a33140..7fa5c18 100644 --- a/src/graphics/shape.cpp +++ b/src/graphics/shape.cpp @@ -119,6 +119,35 @@ void Shape::setVertices_and_Normals(const vector<Vector3f> &vertices, const vect glBindBuffer(GL_ARRAY_BUFFER, 0); } +//// FOR FOAMM!!!! +/// + +void Shape::setFoamInputs(const vector<Vector3f> &vertices, const vector<float> &wavelengths, + const vector<Vector2f> &waveDirs, const vector<Vector2f> &textures){ + + + vector<Vector3f> verts; + vector<Vector3f> norms; + + vector<Vector2f> tex; + vector<Vector3f> colors; + updateMesh(m_faces, vertices, verts, norms, colors); + + //updateFoam(m_faces, vertices, textureCoords, verts, tex, colors); + + + + glBindBuffer(GL_ARRAY_BUFFER, m_surfaceVbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (wavelengths.size() * 1) + (waveDirs.size() * 2) + (tex.size() * 2) + (norms.size() * 3)), nullptr, GL_DYNAMIC_DRAW); + glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float) * verts.size() * 3, static_cast<const void *>(verts.data())); + glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * verts.size() * 3, sizeof(float) * wavelengths.size() * 1, static_cast<const void *>(wavelengths.data())); + glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (wavelengths.size() * 1)), sizeof(float) * waveDirs.size() * 2, static_cast<const void *>(waveDirs.data())); + glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (wavelengths.size() * 1) + (waveDirs.size() * 2)), sizeof(float) * tex.size() * 2, static_cast<const void *>(tex.data())); + glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (wavelengths.size() * 1) + (waveDirs.size() * 2) + (tex.size() * 2)), sizeof(float) * (norms.size() * 3), static_cast<const void *>(norms.data())); + + glBindBuffer(GL_ARRAY_BUFFER, 0); +} + // ================== Model Matrix void Shape::setModelMatrix(const Affine3f &model) { m_modelMatrix = model.matrix(); } @@ -325,6 +354,28 @@ void Shape::updateMesh(const std::vector<Eigen::Vector3i> &faces, } } +void Shape::updateFoam(const std::vector<Eigen::Vector3i> &faces, + const std::vector<Eigen::Vector3f> &vertices, + const std::vector<Eigen::Vector2f> &texCoords, + + std::vector<Eigen::Vector3f>& verts, + std::vector<Eigen::Vector2f>& tex, + std::vector<Eigen::Vector3f>& colors) +{ + //verts.reserve(faces.size() * 3); + tex.reserve(faces.size() * 3); + + for (const Eigen::Vector3i& face : faces) { + + for (auto& v: {face[0], face[1], face[2]}) { + tex.push_back(texCoords[v]); + //std::cout << texCoords[v] << std::endl; + //verts.push_back(vertices[v]); + + } + } +} + void Shape::updateMesh_withNormals(const std::vector<Eigen::Vector3i> &faces, const std::vector<Eigen::Vector3f> &vertices, const std::vector<Eigen::Vector3f> &calculated_norms, diff --git a/src/graphics/shape.h b/src/graphics/shape.h index 2915190..ef1c532 100644 --- a/src/graphics/shape.h +++ b/src/graphics/shape.h @@ -31,6 +31,15 @@ public: void init(const std::vector<Eigen::Vector3f> &vertices, const std::vector<Eigen::Vector3i> &triangles); void setVertices(const std::vector<Eigen::Vector3f> &vertices); void setVertices_and_Normals(const std::vector<Eigen::Vector3f> &vertices, const std::vector<Eigen::Vector3f> &normals); + void setFoamInputs(const std::vector<Eigen::Vector3f> &verts, const std::vector<float> &wavelengths, + const std::vector<Eigen::Vector2f> &waveDirs, const std::vector<Eigen::Vector2f> &textureCoords); + void updateFoam(const std::vector<Eigen::Vector3i> &faces, + const std::vector<Eigen::Vector3f> &vertices, + const std::vector<Eigen::Vector2f> &texCoords, + + std::vector<Eigen::Vector3f>& verts, + std::vector<Eigen::Vector2f>& tex, + std::vector<Eigen::Vector3f>& colors); void setModelMatrix(const Eigen::Affine3f &model); |