diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-02-08 15:38:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-02-08 15:38:17 +0300 |
commit | f088c6b9f6d69e7f1af15a059f122589ee6a39ab (patch) | |
tree | b71a5937a7059d24ea5a91896bac3213d2409440 /source/blender/blenkernel/intern/mesh_evaluate.c | |
parent | 5f2b4002f49b08f68b1e37b267eceb0b340af713 (diff) |
Mesh: concave quad support
Previously quads always split along first-third vertices.
This is still the default, to avoid flickering with animated deformation
however concave quads that would create two opposing triangles now use
second-fourth split.
Reported as T53999 although this issue has been known limitation
for a long time.
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_evaluate.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_evaluate.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c index 425f28eb123..b0c09979de9 100644 --- a/source/blender/blenkernel/intern/mesh_evaluate.c +++ b/source/blender/blenkernel/intern/mesh_evaluate.c @@ -2945,9 +2945,22 @@ void BKE_mesh_recalc_looptri( } else if (mp_totloop == 4) { ML_TO_MLT(0, 1, 2); + MLoopTri *mlt_a = mlt; mlooptri_index++; ML_TO_MLT(0, 2, 3); + MLoopTri *mlt_b = mlt; mlooptri_index++; + + if (UNLIKELY(is_quad_flip_v3_first_third_fast( + mvert[mloop[mlt_a->tri[0]].v].co, + mvert[mloop[mlt_a->tri[1]].v].co, + mvert[mloop[mlt_a->tri[2]].v].co, + mvert[mloop[mlt_b->tri[2]].v].co))) + { + /* flip out of degenerate 0-2 state. */ + mlt_a->tri[2] = mlt_b->tri[2]; + mlt_b->tri[0] = mlt_a->tri[1]; + } } #endif /* USE_TESSFACE_SPEEDUP */ else { |