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/blenlib/intern/quadric.c
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/blenlib/intern/quadric.c')
-rw-r--r--source/blender/blenlib/intern/quadric.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/source/blender/blenlib/intern/quadric.c b/source/blender/blenlib/intern/quadric.c
index bb39cb61e78..b06534d282a 100644
--- a/source/blender/blenlib/intern/quadric.c
+++ b/source/blender/blenlib/intern/quadric.c
@@ -107,18 +107,13 @@ float BLI_quadric_evaluate(const Quadric *q, const float v[3])
q->d2);
}
-int BLI_quadric_optimize(const Quadric *q, float v[3])
+int BLI_quadric_optimize(const Quadric *q, float v[3], const float epsilon)
{
float m[3][3];
- float det;
BLI_quadric_to_tensor_m3(q, m);
- det = determinant_m3(m[0][0], m[0][1], m[0][2],
- m[1][0], m[1][1], m[1][2],
- m[2][0], m[2][1], m[2][2]);
- if (fabsf(det) > FLT_EPSILON) {
- invert_m3(m);
+ if (invert_m3_ex(m, epsilon)) {
BLI_quadric_to_vector_v3(q, v);
mul_m3_v3(m, v);
negate_v3(v);