#pragma once #include #include #include #include "Density.h" struct CompareVec3 { bool operator()(const glm::vec3 &lhs, const glm::vec3 &rhs) { static const float epsilon = 1e-5; if (lhs.x < rhs.x - epsilon) return true; else if (lhs.x > rhs.x + epsilon) return false; else { if (lhs.y < rhs.y - epsilon) return true; else if (lhs.y > rhs.y + epsilon) return false; else { if (lhs.z < rhs.z - epsilon) return true; else if (lhs.z > rhs.z + epsilon) return false; else { return false; } } } } }; class Polygonizer { Density &density; float isolevel; public: std::vector vertices; std::vector indices; std::map vertexLookup; std::vector isocell; size_t isocellVersion; Polygonizer(Density &density, float isolevel); void setIsoLevel(float isolevel); void updateIsocell(); void polygonize(float resolution); void polygonize(const glm::vec3 lower, const glm::vec3 upper, float isolevel); };