#ifndef MESH_BUILDER_H #define MESH_BUILDER_H #include "../utility.h" #include #include #include namespace dmc { // Faster than SurfaceTool, only does what is needed to build a smooth mesh class MeshBuilder { public: MeshBuilder() : _reused_vertices(0) {} inline void add_vertex(Vector3 position, Vector3 normal) { int i = 0; Map::Element *e = _position_to_index.find(position); if (e) { i = e->get(); ++_reused_vertices; } else { i = _positions.size(); _position_to_index.insert(position, i); _positions.push_back(position); _normals.push_back(normal); } _indices.push_back(i); } Array commit(bool wireframe); void clear(); int get_reused_vertex_count() const { return _reused_vertices; } private: std::vector _positions; std::vector _normals; std::vector _indices; Map _position_to_index; int _reused_vertices; }; } // namespace dmc #endif // MESH_BUILDER_H