[Bf-blender-cvs] [14361596da3] temp-lineart-contained: LineArt: Misc fixes for ortho camera

YimingWu noreply at git.blender.org
Wed Nov 17 07:33:28 CET 2021


Commit: 14361596da3ca0d1bec80cab3eb673cbdb6979a6
Author: YimingWu
Date:   Wed Nov 17 14:21:55 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB14361596da3ca0d1bec80cab3eb673cbdb6979a6

LineArt: Misc fixes for ortho camera

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

M	source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

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

diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 61273d16ffc..e9d61c44e44 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -494,6 +494,8 @@ typedef struct LineartBoundingArea {
 #define LRT_ABC(index) (index == 0 ? a : (index == 1 ? b : c))
 #define LRT_PABC(index) (index == 0 ? pa : (index == 1 ? pb : pc))
 
+#define DBL_LOOSER 1e-5
+#define LRT_DOUBLE_CLOSE_LOOSER(a, b) (((a) + DBL_LOOSER) >= (b) && ((a)-DBL_LOOSER) <= (b))
 #define LRT_DOUBLE_CLOSE_ENOUGH(a, b) (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b))
 #define LRT_DOUBLE_CLOSE_ENOUGH_TRI(a, b) \
   (((a) + DBL_TRIANGLE_LIM) >= (b) && ((a)-DBL_TRIANGLE_LIM) <= (b))
@@ -603,10 +605,11 @@ BLI_INLINE int lineart_intersect_seg_seg(const double *a1,
       *r_ratio = ratio;
     }
     else {
-      k1 = (a2[1] - a1[1]) / x_diff;
-      k2 = (b2[1] - b1[1]) / x_diff2;
+      double y_diff = a2[1] - a1[1], y_diff2 = b2[1] - b1[1];
+      k1 = y_diff / x_diff;
+      k2 = y_diff2 / x_diff2;
 
-      if (LRT_DOUBLE_CLOSE_ENOUGH(k2, k1)) {
+      if (LRT_DOUBLE_CLOSE_ENOUGH_TRI(k2, k1)) {
         /* This means two segments are parallel. This also handles k==0 (both completely
          * horizontal) cases. */
         if ((LRT_DOUBLE_CLOSE_ENOUGH(a2[0], b1[0]) && LRT_DOUBLE_CLOSE_ENOUGH(a2[1], b1[1])) ||
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 628a7442a25..7697e129ce9 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1612,7 +1612,7 @@ static uint16_t lineart_identify_feature_line(LineartRenderBuffer *rb,
     dot_1 = dot_v3v3_db(view_vector, tri1->gn);
     dot_2 = dot_v3v3_db(view_vector, tri2->gn);
 
-    if (rb->use_contour && (result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
+    if (rb->use_contour && (result = dot_1 * dot_2) <= 0 && (fabs(dot_1) + fabs(dot_2))) {
       edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
     }



More information about the Bf-blender-cvs mailing list