summaryrefslogtreecommitdiff
path: root/src/graphics
diff options
context:
space:
mode:
authorjjesswan <jessica_wan@brown.edu>2024-05-06 19:11:27 -0400
committerjjesswan <jessica_wan@brown.edu>2024-05-06 19:11:27 -0400
commitd8bf256cf18327f48061ed875c98109200288733 (patch)
treec33234e5fe9a0b69925cfee16b8ba5f627b54595 /src/graphics
parent8d6fd1befd53948cfb4f44ba84bfdb54ac97cf81 (diff)
trial with vbo
Diffstat (limited to 'src/graphics')
-rw-r--r--src/graphics/shape.cpp52
-rw-r--r--src/graphics/shape.h10
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);