summaryrefslogtreecommitdiff
path: root/src/graphics/shape.cpp
diff options
context:
space:
mode:
authorjjesswan <jessica_wan@brown.edu>2024-05-06 00:01:04 -0400
committerjjesswan <jessica_wan@brown.edu>2024-05-06 00:01:04 -0400
commit2ba27898535e01298ef8f0d0b9ffd4e69ce13458 (patch)
tree18dac0a37704ba9c2271f185d62ea4a6d4873b61 /src/graphics/shape.cpp
parent72bcf6a346dfcaeaac9520d8c524711192e77c3d (diff)
uv mapping onto water good
Diffstat (limited to 'src/graphics/shape.cpp')
-rw-r--r--src/graphics/shape.cpp51
1 files changed, 51 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,