Tech ENABLE_SEQUENTIAL_LIMITS -> Fixed z-fighting between contours and fill

This commit is contained in:
enricoturri1966 2021-05-12 14:35:57 +02:00
parent 0d37f66f61
commit bc9fa18044
2 changed files with 14 additions and 9 deletions

View file

@ -1072,7 +1072,8 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position, GLCanvas3D& canvas
#if ENABLE_SEQUENTIAL_LIMITS #if ENABLE_SEQUENTIAL_LIMITS
void GLCanvas3D::SequentialPrintClearance::set(const Polygons& polygons) void GLCanvas3D::SequentialPrintClearance::set(const Polygons& polygons)
{ {
m_model.reset(); m_perimeter.reset();
m_fill.reset();
if (polygons.empty()) if (polygons.empty())
return; return;
@ -1082,7 +1083,7 @@ void GLCanvas3D::SequentialPrintClearance::set(const Polygons& polygons)
} }
size_t vertices_count = 3 * triangles_count; size_t vertices_count = 3 * triangles_count;
GLModel::InitializationData data; GLModel::InitializationData fill_data;
GLModel::InitializationData::Entity entity; GLModel::InitializationData::Entity entity;
entity.type = GLModel::PrimitiveType::Triangles; entity.type = GLModel::PrimitiveType::Triangles;
entity.color = { 0.3333f, 0.0f, 0.0f, 0.5f }; entity.color = { 0.3333f, 0.0f, 0.0f, 0.5f };
@ -1105,25 +1106,27 @@ void GLCanvas3D::SequentialPrintClearance::set(const Polygons& polygons)
} }
} }
data.entities.emplace_back(entity); fill_data.entities.emplace_back(entity);
m_fill.init_from(fill_data);
GLModel::InitializationData perimeter_data;
for (const Polygon& poly : polygons) { for (const Polygon& poly : polygons) {
GLModel::InitializationData::Entity ent; GLModel::InitializationData::Entity ent;
ent.type = GLModel::PrimitiveType::LineLoop; ent.type = GLModel::PrimitiveType::LineLoop;
ent.color = { 1.0f, 0.0f, 0.0f, 1.0f }; ent.color = { 1.0f, 0.0f, 0.0f, 0.5f };
ent.positions.reserve(poly.points.size()); ent.positions.reserve(poly.points.size());
ent.indices.reserve(poly.points.size()); ent.indices.reserve(poly.points.size());
unsigned int id_count = 0; unsigned int id_count = 0;
for (const Point& p : poly.points) { for (const Point& p : poly.points) {
ent.positions.emplace_back(unscale<float>(p.x()), unscale<float>(p.y()), 0.0f); ent.positions.emplace_back(unscale<float>(p.x()), unscale<float>(p.y()), 0.025f);
ent.normals.emplace_back(Vec3f::UnitZ()); ent.normals.emplace_back(Vec3f::UnitZ());
ent.indices.emplace_back(id_count++); ent.indices.emplace_back(id_count++);
} }
data.entities.emplace_back(ent); perimeter_data.entities.emplace_back(ent);
} }
m_model.init_from(data); m_perimeter.init_from(perimeter_data);
} }
void GLCanvas3D::SequentialPrintClearance::render() const void GLCanvas3D::SequentialPrintClearance::render() const
@ -1139,7 +1142,8 @@ void GLCanvas3D::SequentialPrintClearance::render() const
glsafe(::glEnable(GL_BLEND)); glsafe(::glEnable(GL_BLEND));
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
m_model.render(); m_perimeter.render();
m_fill.render();
glsafe(::glDisable(GL_BLEND)); glsafe(::glDisable(GL_BLEND));
glsafe(::glEnable(GL_CULL_FACE)); glsafe(::glEnable(GL_CULL_FACE));

View file

@ -544,7 +544,8 @@ private:
#if ENABLE_SEQUENTIAL_LIMITS #if ENABLE_SEQUENTIAL_LIMITS
class SequentialPrintClearance class SequentialPrintClearance
{ {
GLModel m_model; GLModel m_fill;
GLModel m_perimeter;
public: public:
void set(const Polygons& polygons); void set(const Polygons& polygons);