[Bf-blender-cvs] [e0e14daa3db] temp-lineart-embree: Revert "LineArt: Trying out moller tri-tri functions."
YimingWu
noreply at git.blender.org
Thu Mar 31 05:34:37 CEST 2022
Commit: e0e14daa3db9b973c4110a044165215b70ecb8db
Author: YimingWu
Date: Thu Mar 31 11:28:30 2022 +0800
Branches: temp-lineart-embree
https://developer.blender.org/rBe0e14daa3db9b973c4110a044165215b70ecb8db
Revert "LineArt: Trying out moller tri-tri functions."
This reverts commit 6ffe5a545b0fb83c89ba3537ceca4db6559bf048.
It doesn't really work.
===================================================================
M source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M source/blender/gpencil_modifiers/intern/lineart/lineart_util.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index 95b6807443b..f4c0203cc8f 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -802,16 +802,6 @@ float MOD_lineart_chain_compute_length(LineartEdgeChain *ec);
void ED_operatortypes_lineart(void);
-int moller_tri_tri_intersect_with_isectline(double V0[3],
- double V1[3],
- double V2[3],
- double U0[3],
- double U1[3],
- double U2[3],
- int *coplanar,
- double isectpt1[3],
- double isectpt2[3]);
-
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index b317ab3be85..ec0a141e0d7 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2990,18 +2990,6 @@ static bool lineart_embree_triangle_intersect(LineartTriangle *tri,
}
}
else {
-
- int coplanar;
- int res_moller = moller_tri_tri_intersect_with_isectline(tri->v[0]->gloc,
- tri->v[1]->gloc,
- tri->v[2]->gloc,
- testing->v[0]->gloc,
- testing->v[1]->gloc,
- testing->v[2]->gloc,
- &coplanar,
- r_v1,
- r_v2);
- return res_moller && !coplanar;
/* If not sharing any points, then we need to try all the possibilities. */
int pcount = 0;
@@ -3558,35 +3546,35 @@ OcclusionCollideFunc(void *userPtr, struct RTCCollision *collisions, unsigned in
float pa[9], pb[9];
// float *pb = geom_triangle->points;
- // copy_v3fl_v3db(&pa[0], prim_edge->v1->gloc);
- // copy_v3fl_v3db(&pa[3], prim_edge->v2->gloc);
- // copy_v3fl_v3db(&pa[6], rb->camera_pos);
- // copy_v3fl_v3db(&pb[0], prim_triangle->v[0]->gloc);
- // copy_v3fl_v3db(&pb[3], prim_triangle->v[1]->gloc);
- // copy_v3fl_v3db(&pb[6], prim_triangle->v[2]->gloc);
+ copy_v3fl_v3db(&pa[0], prim_edge->v1->gloc);
+ copy_v3fl_v3db(&pa[3], prim_edge->v2->gloc);
+ copy_v3fl_v3db(&pa[6], rb->camera_pos);
+ copy_v3fl_v3db(&pb[0], prim_triangle->v[0]->gloc);
+ copy_v3fl_v3db(&pb[3], prim_triangle->v[1]->gloc);
+ copy_v3fl_v3db(&pb[6], prim_triangle->v[2]->gloc);
// uint32_t *tb = geom_triangle->looptri[collisions[i].primID1].tri;
float i1[3], i2[3];
- // if (lineart_isect_tri_tri_v3_check_overlap(
- // &pa[0], &pa[3], &pa[6], &pb[0], &pb[3], &pb[6], i1, i2)) {
- // lineart_add_occlusion_pair_thread(rb, eln_edge, eln_triangle, prim_edge, prim_triangle);
- double l, r;
- if (lineart_triangle_edge_image_space_occlusion(NULL,
- prim_triangle,
- prim_edge,
- rb->camera_pos,
- rb->cam_is_persp,
- rb->allow_overlapping_edges,
- rb->view_projection,
- rb->view_vector,
- rb->shift_x,
- rb->shift_y,
- &l,
- &r)) {
- lineart_thread_add_occlusion_pair(
- rb->thread_occlusion_data, eln_edge, eln_triangle, prim_edge, prim_triangle, l, r);
+ if (lineart_isect_tri_tri_v3_check_overlap(
+ &pa[0], &pa[3], &pa[6], &pb[0], &pb[3], &pb[6], i1, i2)) {
+ // lineart_add_occlusion_pair_thread(rb, eln_edge, eln_triangle, prim_edge, prim_triangle);
+ double l, r;
+ if (lineart_triangle_edge_image_space_occlusion(NULL,
+ prim_triangle,
+ prim_edge,
+ rb->camera_pos,
+ rb->cam_is_persp,
+ rb->allow_overlapping_edges,
+ rb->view_projection,
+ rb->view_vector,
+ rb->shift_x,
+ rb->shift_y,
+ &l,
+ &r)) {
+ lineart_thread_add_occlusion_pair(
+ rb->thread_occlusion_data, eln_edge, eln_triangle, prim_edge, prim_triangle, l, r);
+ }
}
- //}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_util.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_util.c
index c3df21d3f74..4ea17b25995 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_util.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_util.c
@@ -247,874 +247,3 @@ void lineart_count_and_print_render_buffer_memory(LineartRenderBuffer *rb)
(void)total; /* Ignored. */
}
-
-/* Triangle/triangle intersection test routine,
- * by Tomas Moller, 1997.
- * See article "A Fast Triangle-Triangle Intersection Test",
- * Journal of Graphics Tools, 2(2), 1997
- * updated: 2001-06-20 (added line of intersection)
- *
- * int moller_tri_tri_intersect(double V0[3],double V1[3],double V2[3],
- * double U0[3],double U1[3],double U2[3])
- *
- * parameters: vertices of triangle 1: V0,V1,V2
- * vertices of triangle 2: U0,U1,U2
- * result : returns 1 if the triangles intersect, otherwise 0
- *
- * Here is a version withouts divisions (a little faster)
- * int moller_NoDivTriTriIsect(double V0[3],double V1[3],double V2[3],
- * double U0[3],double U1[3],double U2[3]);
- *
- * This version computes the line of intersection as well (if they are not coplanar):
- * int moller_tri_tri_intersect_with_isectline(double V0[3],double V1[3],double V2[3],
- * double U0[3],double U1[3],double U2[3],int *coplanar,
- * double isectpt1[3],double isectpt2[3]);
- * coplanar returns whether the tris are coplanar
- * isectpt1, isectpt2 are the endpoints of the line of intersection
- */
-
-/*
-Copyright 2020 Tomas Akenine-Möller
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute,
-sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or
-substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
-OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include <math.h>
-
-#define FABS(x) ((double)fabs(x)) /* implement as is fastest on your machine */
-
-/* if USE_EPSILON_TEST is true then we do a check:
- if |dv|<EPSILON then dv=0.0;
- else no check is done (which is less robust)
-*/
-#define USE_EPSILON_TEST 0
-#define EPSILON 0.000001
-
-/* some macros */
-#define CROSS(dest, v1, v2) \
- dest[0] = v1[1] * v2[2] - v1[2] * v2[1]; \
- dest[1] = v1[2] * v2[0] - v1[0] * v2[2]; \
- dest[2] = v1[0] * v2[1] - v1[1] * v2[0];
-
-#define DOT(v1, v2) (v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2])
-
-#define SUB(dest, v1, v2) \
- dest[0] = v1[0] - v2[0]; \
- dest[1] = v1[1] - v2[1]; \
- dest[2] = v1[2] - v2[2];
-
-#define ADD(dest, v1, v2) \
- dest[0] = v1[0] + v2[0]; \
- dest[1] = v1[1] + v2[1]; \
- dest[2] = v1[2] + v2[2];
-
-#define MULT(dest, v, factor) \
- dest[0] = factor * v[0]; \
- dest[1] = factor * v[1]; \
- dest[2] = factor * v[2];
-
-#define SET(dest, src) \
- dest[0] = src[0]; \
- dest[1] = src[1]; \
- dest[2] = src[2];
-
-/* sort so that a<=b */
-#define SORT(a, b) \
- if (a > b) { \
- double _c; \
- _c = a; \
- a = b; \
- b = _c; \
- }
-
-#define ISECT(VV0, VV1, VV2, D0, D1, D2, isect0, isect1) \
- isect0 = VV0 + (VV1 - VV0) * D0 / (D0 - D1); \
- isect1 = VV0 + (VV2 - VV0) * D0 / (D0 - D2);
-
-#define COMPUTE_INTERVALS(VV0, VV1, VV2, D0, D1, D2, D0D1, D0D2, isect0, isect1) \
- if (D0D1 > 0.0f) { \
- /* here we know that D0D2<=0.0 */ \
- /* that is D0, D1 are on the same side, D2 on the other or on the plane */ \
- ISECT(VV2, VV0, VV1, D2, D0, D1, isect0, isect1); \
- } \
- else if (D0D2 > 0.0f) { \
- /* here we know that d0d1<=0.0 */ \
- ISECT(VV1, VV0, VV2, D1, D0, D2, isect0, isect1); \
- } \
- else if (D1 * D2 > 0.0f || D0 != 0.0f) { \
- /* here we know that d0d1<=0.0 or that D0!=0.0 */ \
- ISECT(VV0, VV1,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list