diff options
Diffstat (limited to 'src/graphics')
-rw-r--r-- | src/graphics/shader.h | 1 | ||||
-rw-r--r-- | src/graphics/shape.cpp | 70 | ||||
-rw-r--r-- | src/graphics/shape.h | 19 |
3 files changed, 89 insertions, 1 deletions
diff --git a/src/graphics/shader.h b/src/graphics/shader.h index 7e9dad4..5f7d7c6 100644 --- a/src/graphics/shader.h +++ b/src/graphics/shader.h @@ -10,6 +10,7 @@ #include <util/unsupportedeigenthing/OpenGLSupport> + class Shader { public: Shader(const std::string &vertexPath, const std::string &fragmentPath); diff --git a/src/graphics/shape.cpp b/src/graphics/shape.cpp index 7a33140..e0afb83 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, diff --git a/src/graphics/shape.h b/src/graphics/shape.h index 2915190..ab3c27a 100644 --- a/src/graphics/shape.h +++ b/src/graphics/shape.h @@ -31,6 +31,25 @@ 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 updateMeshFoam(const std::vector<Eigen::Vector3i> &faces, + const std::vector<Eigen::Vector3f> &vertices, + const std::vector<float> &wavelengths, + const std::vector<Eigen::Vector2f> &waveDirs, + + std::vector<Eigen::Vector3f>& verts, + std::vector<Eigen::Vector3f>& normals, + std::vector<Eigen::Vector3f>& colors); + void setModelMatrix(const Eigen::Affine3f &model); |