ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/sm_geom.c
(Generate patch)

Comparing ray/src/hd/sm_geom.c (file contents):
Revision 3.7 by gwlarson, Tue Oct 6 18:16:53 1998 UTC vs.
Revision 3.8 by gwlarson, Wed Nov 11 12:05:38 1998 UTC

# Line 27 | Line 27 | FVECT v1,v2;
27   {
28     return(EQUAL(v1[0],v2[0]) && EQUAL(v1[1],v2[1])&& EQUAL(v1[2],v2[2]));
29   }
30 + #if 0
31 + extern FVECT Norm[500];
32 + extern int Ncnt;
33 + #endif
34  
31
35   int
36   convex_angle(v0,v1,v2)
37   FVECT v0,v1,v2;
38   {
39      FVECT cp,cp01,cp12,v10,v02;
40      double dp;
41 <    /*
42 <      VSUB(v10,v1,v0);
40 <      VSUB(v02,v0,v2);
41 <      VCROSS(cp,v10,v02);
42 <   */
43 <      /* test sign of (v0Xv1)X(v1Xv2). v1 */
41 >
42 >    /* test sign of (v0Xv1)X(v1Xv2). v1 */
43      VCROSS(cp01,v0,v1);
44      VCROSS(cp12,v1,v2);
45      VCROSS(cp,cp01,cp12);
46          
47      dp = DOT(cp,v1);
48 + #if 0
49 +    VCOPY(Norm[Ncnt++],cp01);
50 +    VCOPY(Norm[Ncnt++],cp12);
51 +    VCOPY(Norm[Ncnt++],cp);
52 + #endif
53      if(ZERO(dp) || dp < 0.0)
54 <       return(FALSE);
54 >      return(FALSE);
55      return(TRUE);
56   }
57  
58   /* calculates the normal of a face contour using Newell's formula. e
59  
60 <               a =  SUMi (yi - yi+1)(zi + zi+1)
60 >               a =  SUMi (yi - yi+1)(zi + zi+1)smMesh->samples->max_samp+4);
61                 b =  SUMi (zi - zi+1)(xi + xi+1)
62                 c =  SUMi (xi - xi+1)(yi + yi+1)
63   */
# Line 78 | Line 82 | int norm;
82  
83    if(!norm)
84       return(0);
81
85    
86    mag = normalize(n);
87  
# Line 179 | Line 182 | intersect_ray_plane(orig,dir,peq,pd,r)
182     double *pd;
183     FVECT r;
184   {
185 <  double t;
185 >  double t,d;
186    int hit;
187      /*
188        Plane is Ax + By + Cz +D = 0:
# Line 190 | Line 193 | intersect_ray_plane(orig,dir,peq,pd,r)
193         line is  l = p1 + (p2-p1)t
194       */
195      /* Solve for t: */
196 <    t =  -(DOT(FP_N(peq),orig) + FP_D(peq))/(DOT(FP_N(peq),dir));
197 <    if(t < 0)
196 >  d = DOT(FP_N(peq),dir);
197 >  if(ZERO(d))
198 >     return(0);
199 >  t =  -(DOT(FP_N(peq),orig) + FP_D(peq))/d;
200 >
201 >  if(t < 0)
202         hit = 0;
203      else
204         hit = 1;
# Line 212 | Line 219 | intersect_ray_oplane(orig,dir,n,pd,r)
219     double *pd;
220     FVECT r;
221   {
222 <  double t;
222 >  double t,d;
223    int hit;
224      /*
225        Plane is Ax + By + Cz +D = 0:
# Line 223 | Line 230 | intersect_ray_oplane(orig,dir,n,pd,r)
230         line is  l = p1 + (p2-p1)t
231       */
232      /* Solve for t: */
233 <    t =  -(DOT(n,orig))/(DOT(n,dir));
233 >    d= DOT(n,dir);
234 >    if(ZERO(d))
235 >       return(0);
236 >    t =  -(DOT(n,orig))/d;
237      if(t < 0)
238         hit = 0;
239      else
# Line 286 | Line 296 | FVECT p0,p1,p2;
296         that plane and do an in-circle test in the plane
297       */
298      
299 <    /* find the equation of the plane defined by p1-p3 */
299 >    /* find the equation of the plane defined by p0-p2 */
300      tri_plane_equation(p0,p1,p2,&peq,FALSE);
301  
302      /* define a coordinate system on the plane: the x axis is in
# Line 298 | Line 308 | FVECT p0,p1,p2;
308      if(!intersect_vector_plane(p,peq,NULL,np))
309          return(FALSE);
310  
311 <    /* create coordinate system on  plane: p2-p1 defines the x_axis*/
311 >    /* create coordinate system on  plane: p1-p0 defines the x_axis*/
312      VSUB(x_axis,p1,p0);
313      normalize(x_axis);
314      /* The y axis is  */
# Line 338 | Line 348 | int sides[3];
348      /* Find the normal to the triangle ORIGIN:v0:v1 */
349      if(!NTH_BIT(*nset,0))
350      {
351 <        VCROSS(n[0],v1,v0);
351 >        VCROSS(n[0],v0,v1);
352          SET_NTH_BIT(*nset,0);
353      }
354      /* Test the point for sidedness */
# Line 356 | Line 366 | int sides[3];
366      /* Test next edge */
367      if(!NTH_BIT(*nset,1))
368      {
369 <        VCROSS(n[1],v2,v1);
369 >        VCROSS(n[1],v1,v2);
370          SET_NTH_BIT(*nset,1);
371      }
372      /* Test the point for sidedness */
# Line 372 | Line 382 | int sides[3];
382      /* Test next edge */
383      if(!NTH_BIT(*nset,2))
384      {
385 <        VCROSS(n[2],v0,v2);
385 >        VCROSS(n[2],v2,v0);
386          SET_NTH_BIT(*nset,2);
387      }
388      /* Test the point for sidedness */
# Line 398 | Line 408 | FVECT v0,v1,v2,p;
408      double d;
409      FVECT n;  
410  
411 <    VCROSS(n,v1,v0);
411 >    VCROSS(n,v0,v1);
412      /* Test the point for sidedness */
413      d  = DOT(n,p);
414      if(d > 0.0)
415        return(FALSE);
416  
417      /* Test next edge */
418 <    VCROSS(n,v2,v1);
418 >    VCROSS(n,v1,v2);
419      /* Test the point for sidedness */
420      d  = DOT(n,p);
421      if(d > 0.0)
422         return(FALSE);
423  
424      /* Test next edge */
425 <    VCROSS(n,v0,v2);
425 >    VCROSS(n,v2,v0);
426      /* Test the point for sidedness */
427      d  = DOT(n,p);
428      if(d > 0.0)
# Line 506 | Line 516 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
516      if(sides[0][0] == GT_INVALID)
517      {
518        if(!NTH_BIT(nset,0))
519 <        VCROSS(n[0],t1,t0);
519 >        VCROSS(n[0],t0,t1);
520        /* Test the point for sidedness */
521        d  = DOT(n[0],p0);
522        if(d >= 0.0)
# Line 519 | Line 529 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
529      if(sides[0][1] == GT_INVALID)
530      {
531        if(!NTH_BIT(nset,1))
532 <        VCROSS(n[1],t2,t1);
532 >        VCROSS(n[1],t1,t2);
533          /* Test the point for sidedness */
534          d  = DOT(n[1],p0);
535          if(d >= 0.0)
# Line 532 | Line 542 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
542      if(sides[0][2] == GT_INVALID)
543      {
544        if(!NTH_BIT(nset,2))
545 <        VCROSS(n[2],t0,t2);
545 >        VCROSS(n[2],t2,t0);
546        /* Test the point for sidedness */
547        d  = DOT(n[2],p0);
548        if(d >= 0.0)
# Line 548 | Line 558 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
558      if(sides[1][0] == GT_INVALID)
559      {
560        if(!NTH_BIT(nset,0))
561 <        VCROSS(n[0],t1,t0);
561 >        VCROSS(n[0],t0,t1);
562        /* Test the point for sidedness */
563        d  = DOT(n[0],p1);
564        if(d >= 0.0)
# Line 562 | Line 572 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
572      if(sides[1][1] == GT_INVALID)
573      {
574        if(!NTH_BIT(nset,1))
575 <        VCROSS(n[1],t2,t1);
575 >        VCROSS(n[1],t1,t2);
576        /* Test the point for sidedness */
577        d  = DOT(n[1],p1);
578        if(d >= 0.0)
# Line 576 | Line 586 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
586      if(sides[1][2] == GT_INVALID)
587      {
588        if(!NTH_BIT(nset,2))
589 <        VCROSS(n[2],t0,t2);
589 >        VCROSS(n[2],t2,t0);
590        /* Test the point for sidedness */
591        d  = DOT(n[2],p1);
592        if(d >= 0.0)
# Line 592 | Line 602 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
602      if(sides[2][0] == GT_INVALID)
603      {
604        if(!NTH_BIT(nset,0))
605 <        VCROSS(n[0],t1,t0);
605 >        VCROSS(n[0],t0,t1);
606        /* Test the point for sidedness */
607        d  = DOT(n[0],p2);
608        if(d >= 0.0)
# Line 605 | Line 615 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
615      if(sides[2][1] == GT_INVALID)
616      {
617        if(!NTH_BIT(nset,1))
618 <        VCROSS(n[1],t2,t1);
618 >        VCROSS(n[1],t1,t2);
619        /* Test the point for sidedness */
620        d  = DOT(n[1],p2);
621        if(d >= 0.0)
# Line 618 | Line 628 | set_sidedness_tests(t0,t1,t2,p0,p1,p2,test,sides,nset,
628      if(sides[2][2] == GT_INVALID)
629      {
630        if(!NTH_BIT(nset,2))
631 <        VCROSS(n[2],t0,t2);
631 >        VCROSS(n[2],t2,t0);
632        /* Test the point for sidedness */
633        d  = DOT(n[2],p2);
634        if(d >= 0.0)
# Line 1305 | Line 1315 | BCOORD bi[3];
1315  
1316      if(b[i] <= 0.0)
1317      {
1308 #ifdef EXTRA_DEBUG
1309      if(b[i] < 0.0)
1310        printf("under %f\n",b[i]);
1311 #endif
1318        bi[i]= 0;
1319      }
1320      else
1321        if(b[i] >= 1.0)
1322        {
1317 #ifdef EXTRA_DEBUG
1318        if(b[i] > 1.0)
1319          printf("over %f\n",b[i]);
1320 #endif
1323          bi[i]= MAXBCOORD;
1324        }
1325        else
# Line 1326 | Line 1328 | BCOORD bi[3];
1328    bi[2] = bi[0] +  bi[1];
1329    if(bi[2] > MAXBCOORD)
1330    {
1329 #ifdef EXTRA_DEBUG
1330      printf("sum over %f\n",b[0]+b[1]);
1331 #endif
1331        bi[2] = 0;
1332        bi[1] = MAXBCOORD - bi[0];
1333    }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines