Avoid adding overlapping triangles in convex hull

Add an epsilon value to the point-outside-hull test, helps when some
of the input vertices are nearly coplanar.

Fixes bug [#31941] convex hull fails (and depends on vertex order when it shouldn't)
http://projects.blender.org/tracker/index.php?func=detail&aid=31941&group_id=9&atid=498
This commit is contained in:
2012-06-27 18:39:17 +00:00
parent 32478997ec
commit f57c1c8b34

View File

@@ -140,11 +140,14 @@ static void hull_add_triangle(BMesh *bm, GHash *hull_triangles, BLI_mempool *poo
static int hull_point_tri_side(const HullTriangle *t, const float co[3])
{
float p[3], d;
/* Added epsilon to fix bug [#31941], improves output when some
vertices are nearly coplanar. Might need further tweaking for
other cases though. */
float p[3], d, epsilon = 0.0001;
sub_v3_v3v3(p, co, t->v[0]->co);
d = dot_v3v3(t->no, p);
if (d < 0) return -1;
else if (d > 0) return 1;
if (d < -epsilon) return -1;
else if (d > epsilon) return 1;
else return 0;
}