diff options
author | jjesswan <jessica_wan@brown.edu> | 2024-05-06 19:11:27 -0400 |
---|---|---|
committer | jjesswan <jessica_wan@brown.edu> | 2024-05-06 19:11:27 -0400 |
commit | d8bf256cf18327f48061ed875c98109200288733 (patch) | |
tree | c33234e5fe9a0b69925cfee16b8ba5f627b54595 /src/graphics | |
parent | 8d6fd1befd53948cfb4f44ba84bfdb54ac97cf81 (diff) |
trial with vbo
Diffstat (limited to 'src/graphics')
-rw-r--r-- | src/graphics/shape.cpp | 52 | ||||
-rw-r--r-- | src/graphics/shape.h | 10 |
2 files changed, 52 insertions, 10 deletions
diff --git a/src/graphics/shape.cpp b/src/graphics/shape.cpp index 7fa5c18..5e4a69d 100644 --- a/src/graphics/shape.cpp +++ b/src/graphics/shape.cpp @@ -126,24 +126,31 @@ void Shape::setFoamInputs(const vector<Vector3f> &vertices, const vector<float> const vector<Vector2f> &waveDirs, const vector<Vector2f> &textures){ - vector<Vector3f> verts; - vector<Vector3f> norms; +// vector<Vector3f> verts; +// vector<Vector3f> norms; - vector<Vector2f> tex; - vector<Vector3f> colors; - updateMesh(m_faces, vertices, verts, norms, colors); +// vector<Vector2f> tex; +// vector<Vector3f> colors; + m_vertices.clear(); + copy(vertices.begin(), vertices.end(), back_inserter(m_vertices)); + + std::vector<Eigen::Vector3f> verts; + std::vector<Eigen::Vector2f> ks; + std::vector<float> waves; + + updateMeshFoam(m_faces, vertices, waveDirs, wavelengths, verts, ks, waves); //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); + glBufferData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (waves.size() * 1)), 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())); + glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * verts.size() * 3, sizeof(float) * waves.size() * 1, static_cast<const void *>(waves.data())); + //glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (waves.size() * 1)), sizeof(float) * ks.size() * 2, static_cast<const void *>(ks.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); } @@ -354,6 +361,31 @@ void Shape::updateMesh(const std::vector<Eigen::Vector3i> &faces, } } +void Shape::updateMeshFoam(const std::vector<Eigen::Vector3i> &faces, + const std::vector<Eigen::Vector3f> &vertices, + const std::vector<Eigen::Vector2f> &k_vectors, + const std::vector<float> &wavelengths, + + std::vector<Eigen::Vector3f> &verts, + std::vector<Eigen::Vector2f> &ks, + std::vector<float> &waves) +{ + verts.reserve(faces.size() * 3); + ks.reserve(faces.size() * 3); + waves.reserve(faces.size() * 3); + + + for (const Eigen::Vector3i& face : faces) { + + for (auto& v: {face[0], face[1], face[2]}) { + ks.push_back(k_vectors[v]); + verts.push_back(vertices[v]); + waves.push_back(wavelengths[v]); + + } + } +} + void Shape::updateFoam(const std::vector<Eigen::Vector3i> &faces, const std::vector<Eigen::Vector3f> &vertices, const std::vector<Eigen::Vector2f> &texCoords, diff --git a/src/graphics/shape.h b/src/graphics/shape.h index ef1c532..71c7bc4 100644 --- a/src/graphics/shape.h +++ b/src/graphics/shape.h @@ -41,6 +41,16 @@ public: std::vector<Eigen::Vector2f>& tex, std::vector<Eigen::Vector3f>& colors); + void updateMeshFoam(const std::vector<Eigen::Vector3i> &faces, + const std::vector<Eigen::Vector3f> &vertices, + const std::vector<Eigen::Vector2f> &k_vectors, + const std::vector<float> &wavelengths, + + std::vector<Eigen::Vector3f> &verts, + std::vector<Eigen::Vector2f> &ks, + std::vector<float> &waves); + + void setModelMatrix(const Eigen::Affine3f &model); |