--- ray/src/rt/o_mesh.c 2006/02/25 19:49:16 2.11 +++ ray/src/rt/o_mesh.c 2014/07/08 18:25:00 2.14 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: o_mesh.c,v 2.11 2006/02/25 19:49:16 greg Exp $"; +static const char RCSid[] = "$Id: o_mesh.c,v 2.14 2014/07/08 18:25:00 greg Exp $"; #endif /* * Routines for computing ray intersections with meshes. @@ -59,11 +59,11 @@ OBJREC *o; static int volume_sign(r, v1, v2) /* get signed volume for ray and edge */ -register RAY *r; +RAY *r; int32 v1, v2; { - int reversed = 0; - register struct EdgeSide *ecp; + int reversed = 0; + struct EdgeSide *ecp; if (v1 > v2) { int32 t = v2; v2 = v1; v1 = t; @@ -113,9 +113,10 @@ RAY *r; "missing triangle vertices in mesh_hit"); sv1 = volume_sign(r, tvi[0], tvi[1]); sv2 = volume_sign(r, tvi[1], tvi[2]); + if (sv1 != sv2) /* compare volume signs */ + continue; sv3 = volume_sign(r, tvi[2], tvi[0]); - /* compare volume signs */ - if ((sv1 != sv2) | (sv2 != sv3)) + if (sv2 != sv3) continue; /* compute intersection */ getmeshvert(&tv[0], curmsh, tvi[0], MT_V); @@ -141,10 +142,10 @@ RAY *r; } -extern int +int o_mesh( /* compute ray intersection with a mesh */ OBJREC *o, - register RAY *r + RAY *r ) { RAY rcont; @@ -198,8 +199,7 @@ o_mesh( /* compute ray intersection with a mesh */ wt[2]*tv[2].n[i]; multv3(r->pert, rcont.pert, curmi->x.f.xfm); if (normalize(r->pert) != 0.0) - for (i = 0; i < 3; i++) - r->pert[i] -= r->ron[i]; + VSUB(r->pert, r->pert, r->ron); } else r->pert[0] = r->pert[1] = r->pert[2] = .0;