Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-11-07 13:28:59 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-11-07 13:28:59 +0400
commitf727448e10de503be0d89bf8b32b7db1a8a5cac7 (patch)
treeec487a38c383261f9bf37520ebe862b333f9015a /source/blender/bmesh
parentefc44d0c4de449e2f2a87871319d3842577e1928 (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.c3
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 {