[Bf-blender-cvs] [64d8f6b1919] newboolean: Use floating point filtering to make the degenerate triangle detection faster.

Howard Trickey noreply at git.blender.org
Mon Jul 27 00:09:51 CEST 2020


Commit: 64d8f6b191937d72f5ee42691b674c4805d96f65
Author: Howard Trickey
Date:   Sun Jul 26 13:23:49 2020 -0400
Branches: newboolean
https://developer.blender.org/rB64d8f6b191937d72f5ee42691b674c4805d96f65

Use floating point filtering to make the degenerate triangle detection faster.

===================================================================

M	source/blender/blenlib/intern/mesh_intersect.cc

===================================================================

diff --git a/source/blender/blenlib/intern/mesh_intersect.cc b/source/blender/blenlib/intern/mesh_intersect.cc
index b61e120c1e3..2124e92379e 100644
--- a/source/blender/blenlib/intern/mesh_intersect.cc
+++ b/source/blender/blenlib/intern/mesh_intersect.cc
@@ -2695,6 +2695,16 @@ static bool has_degenerate_tris(const Mesh &tm)
     if (v0 == v1 || v0 == v2 || v1 == v2) {
       return true;
     }
+    double3 da = v2->co - v0->co;
+    double3 db = v2->co - v1->co;
+    double3 dab = double3::cross_high_precision(da, db);
+    if (dab.x == 0 && dab.y == 0 && dab.z == 0) {
+      return true;
+    }
+    double err_bound = supremum_cross(da, db) * index_cross * DBL_EPSILON;
+    if (fabs(dab.x) > err_bound && fabs(dab.y) > err_bound && fabs(dab.z) > err_bound) {
+      return false;
+    }
     mpq3 a = v2->co_exact - v0->co_exact;
     mpq3 b = v2->co_exact - v1->co_exact;
     mpq3 ab = mpq3::cross(a, b);



More information about the Bf-blender-cvs mailing list