18 |
|
|
19 |
|
|
20 |
|
int |
21 |
+ |
flat_tri(v1, v2, v3, n1, n2, n3) /* determine if triangle is flat */ |
22 |
+ |
FVECT v1, v2, v3, n1, n2, n3; |
23 |
+ |
{ |
24 |
+ |
double d1, d2, d3; |
25 |
+ |
FVECT vt1, vt2, vn; |
26 |
+ |
/* compute default normal */ |
27 |
+ |
vt1[0] = v2[0] - v1[0]; vt1[1] = v2[1] - v1[1]; vt1[2] = v2[2] - v1[2]; |
28 |
+ |
vt2[0] = v3[0] - v2[0]; vt2[1] = v3[1] - v2[1]; vt2[2] = v3[2] - v2[2]; |
29 |
+ |
fcross(vn, vt1, vt2); |
30 |
+ |
if (normalize(vn) == 0.0) |
31 |
+ |
return(DEGEN); |
32 |
+ |
/* compare to supplied normals */ |
33 |
+ |
d1 = DOT(vn, n1); d2 = DOT(vn, n2); d3 = DOT(vn, n3); |
34 |
+ |
if (d1 < 0 && d2 < 0 && d3 < 0) { |
35 |
+ |
if (d1 > -COSTOL || d2 > -COSTOL || d3 > -COSTOL) |
36 |
+ |
return(RVBENT); |
37 |
+ |
return(RVFLAT); |
38 |
+ |
} |
39 |
+ |
if (d1 < COSTOL || d2 < COSTOL || d3 < COSTOL) |
40 |
+ |
return(ISBENT); |
41 |
+ |
return(ISFLAT); |
42 |
+ |
} |
43 |
+ |
|
44 |
+ |
|
45 |
+ |
int |
46 |
|
comp_baryc(bcm, v1, v2, v3) /* compute barycentric vectors */ |
47 |
|
register BARYCCM *bcm; |
48 |
|
FLOAT *v1, *v2, *v3; |