summaryrefslogtreecommitdiff
path: root/src/graphics/shape.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics/shape.cpp')
-rw-r--r--src/graphics/shape.cpp70
1 files changed, 69 insertions, 1 deletions
diff --git a/src/graphics/shape.cpp b/src/graphics/shape.cpp
index 4b1d4d4..1baa233 100644
--- a/src/graphics/shape.cpp
+++ b/src/graphics/shape.cpp
@@ -119,6 +119,29 @@ 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){
+
+ m_vertices.clear();
+ copy(vertices.begin(), vertices.end(), back_inserter(m_vertices));
+
+ vector<Vector3f> verts;
+ vector<Vector3f> normals;
+ vector<Vector3f> colors;
+
+ updateMeshFoam(m_faces, vertices, wavelengths, waveDirs, verts, normals, colors);
+
+ glBindBuffer(GL_ARRAY_BUFFER, m_surfaceVbo);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (normals.size() * 3) + (colors.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) * normals.size() * 3, static_cast<const void *>(normals.data()));
+ glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * ((verts.size() * 3) + (normals.size() * 3)), sizeof(float) * colors.size() * 3, static_cast<const void *>(colors.data()));
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+}
+
// ================== Model Matrix
void Shape::setModelMatrix(const Affine3f &model) { m_modelMatrix = model.matrix(); }
@@ -313,7 +336,7 @@ void Shape::updateMesh(const std::vector<Eigen::Vector3i> &faces,
Vector3f n = getNormal(face);
for (auto& v: {face[0], face[1], face[2]}) {
- normals.push_back(n);
+ normals.push_back(Eigen::Vector3f(1,1,1));
verts.push_back(vertices[v]);
if (m_anchors.find(v) == m_anchors.end()) {
@@ -325,6 +348,51 @@ 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<float> &wavelengths,
+ const vector<Vector2f> &waveDirs,
+ std::vector<Eigen::Vector3f>& verts,
+ std::vector<Eigen::Vector3f>& normals,
+ std::vector<Eigen::Vector3f>& colors)
+{
+ verts.reserve(faces.size() * 3);
+ normals.reserve(faces.size() * 3);
+ colors.reserve(faces.size() * 3);
+
+
+ for (const Eigen::Vector3i& face : faces) {
+
+ for (auto& v: {face[0], face[1], face[2]}) {
+ normals.push_back(Eigen::Vector3f(wavelengths[v],0,0));
+ verts.push_back(vertices[v]);
+ colors.push_back(Eigen::Vector3f(waveDirs[v][0], waveDirs[v][1], 0));
+ }
+ }
+}
+
+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,