diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-11-07 13:28:59 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-11-07 13:28:59 +0400 |
commit | f727448e10de503be0d89bf8b32b7db1a8a5cac7 (patch) | |
tree | ec487a38c383261f9bf37520ebe862b333f9015a /source/blender/bmesh | |
parent | efc44d0c4de449e2f2a87871319d3842577e1928 (diff) |
fix [#33106] Decimate modifier/collapse give bad result
FLT_EPSILON was too small to use when checking if the edge collapse result is an error.
add invert_m3_m3_ex(), invert_m3_ex() functiosn which take an epsilon to check the determinant, saves calculating it twice per edge collapse.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_decimate_collapse.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/source/blender/bmesh/intern/bmesh_decimate_collapse.c b/source/blender/bmesh/intern/bmesh_decimate_collapse.c index e4d92dffa55..1f92a8f9227 100644 --- a/source/blender/bmesh/intern/bmesh_decimate_collapse.c +++ b/source/blender/bmesh/intern/bmesh_decimate_collapse.c @@ -51,6 +51,7 @@ #define USE_SAFETY_CHECKS #define BOUNDARY_PRESERVE_WEIGHT 100.0f +#define OPTIMIZE_EPS 0.01f /* FLT_EPSILON is too small, see [#33106] */ typedef enum CD_UseFlag { CD_DO_VERT = (1 << 0), @@ -123,7 +124,7 @@ static void bm_decim_calc_target_co(BMEdge *e, float optimize_co[3], &vquadrics[BM_elem_index_get(e->v2)]); - if (BLI_quadric_optimize(&q, optimize_co)) { + if (BLI_quadric_optimize(&q, optimize_co, OPTIMIZE_EPS)) { return; /* all is good */ } else { |