godot_voxel/dmc/mesh_builder.h

54 lines
1.0 KiB
C
Raw Normal View History

#ifndef MESH_BUILDER_H
#define MESH_BUILDER_H
#include "../utility.h"
#include <scene/resources/mesh.h>
#include <map>
#include <vector>
namespace dmc {
// Faster than SurfaceTool, only does what is needed to build a smooth mesh
class MeshBuilder {
public:
2019-04-23 01:14:20 +02:00
MeshBuilder() :
_reused_vertices(0) {}
inline void add_vertex(Vector3 position, Vector3 normal) {
int i = 0;
if (_position_to_index.find(position) != _position_to_index.end()) {
i = _position_to_index[position];
2019-04-23 01:14:20 +02:00
++_reused_vertices;
} else {
i = _positions.size();
_position_to_index[position] = i;
_positions.push_back(position);
_normals.push_back(normal);
}
_indices.push_back(i);
}
Ref<ArrayMesh> commit(bool wireframe);
void clear();
2019-04-23 01:14:20 +02:00
int get_reused_vertex_count() const { return _reused_vertices; }
private:
std::vector<Vector3> _positions;
std::vector<Vector3> _normals;
std::vector<int> _indices;
std::map<Vector3, int> _position_to_index;
2019-04-23 01:14:20 +02:00
int _reused_vertices;
};
} // namespace dmc
#endif // MESH_BUILDER_H