commit aa79affa86b89328fea7635eec8f274d2c77dc27
parent b67720f2fa6264a6d810fed1c170c85bfabe2757
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Thu, 11 Jun 2020 09:28:57 +0200
BugFix: some degenerated triangles where not detected
Diffstat:
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/senc3d_scene.c b/src/senc3d_scene.c
@@ -141,7 +141,7 @@ senc3d_scene_create
}
/* Get triangles */
FOR_EACH(nt, 0, ntris) {
- int j;
+ int j, dg;
trg_id_t s;
medium_id_t med[2]
= { SENC3D_UNSPECIFIED_MEDIUM, SENC3D_UNSPECIFIED_MEDIUM };
@@ -161,10 +161,18 @@ senc3d_scene_create
ASSERT(ind[j] <= VRTX_MAX__);
tmp.vertice_id[j] = (vrtx_id_t)ind[j];
}
- if(tmp.vertice_id[0] == tmp.vertice_id[1]
+ dg = tmp.vertice_id[0] == tmp.vertice_id[1]
|| tmp.vertice_id[0] == tmp.vertice_id[2]
- || tmp.vertice_id[1] == tmp.vertice_id[2])
- {
+ || tmp.vertice_id[1] == tmp.vertice_id[2];
+ if(!dg) {
+ double edge1[3], edge2[3], n[3];
+ const union double3* vertices = darray_position_cdata_get(&scn->vertices);
+ d3_sub(edge1, vertices[tmp.vertice_id[1]].vec, vertices[tmp.vertice_id[0]].vec);
+ d3_sub(edge2, vertices[tmp.vertice_id[2]].vec, vertices[tmp.vertice_id[0]].vec);
+ d3_cross(n, edge1, edge2);
+ dg = d3_len(n) == 0;
+ }
+ if(dg) {
log_err(scn->dev, LIB_NAME":%s: triangle "PRTF_TRG" is degenerated.\n",
FUNC_NAME, nt);
res = RES_BAD_ARG;