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

Comparing ray/src/cv/mgflib/context.c (file contents):
Revision 1.15 by greg, Fri Jul 22 12:50:24 1994 UTC vs.
Revision 1.16 by greg, Fri Sep 2 16:04:19 1994 UTC

# Line 445 | Line 445 | int    fl;
445          double  x, y, z;
446          register int    i;
447  
448 <        if (clr->flags & fl)            /* already done */
448 >        fl &= ~clr->flags;                      /* ignore what's done */
449 >        if (!fl)                                /* everything's done! */
450                  return;
451          if (!(clr->flags & (C_CSXY|C_CSSPEC)))  /* nothing set! */
452                  *clr = c_dfcolor;
453 <        else if (fl & C_CSXY) {         /* cspec -> cxy */
453 >        if (fl & C_CSXY) {              /* cspec -> cxy */
454                  x = y = z = 0.;
455                  for (i = 0; i < C_CNSS; i++) {
456                          x += cie_xf.ssamp[i] * clr->ssamp[i];
# Line 460 | Line 461 | int    fl;
461                  clr->cx = x / z;
462                  clr->cy = y / z;
463                  clr->flags |= C_CSXY;
464 <        } else {                        /* cxy -> cspec */
464 >        } else if (fl & C_CSSPEC) {     /* cxy -> cspec */
465                  z = (cie_xf.ssum + cie_yf.ssum + cie_zf.ssum) / 3.;
466                  x = clr->cx * z / cie_xf.ssum;
467                  y = clr->cy * z / cie_yf.ssum;
# Line 473 | Line 474 | int    fl;
474                                          z * cie_zf.ssamp[i] ;
475                  clr->flags |= C_CSSPEC;
476          }
477 +        if (fl & C_CSEFF) {             /* compute efficacy */
478 +                if (clr->flags & C_CDSPEC) {            /* from spectrum */
479 +                        y = 0.;
480 +                        for (i = 0; i < C_CNSS; i++)
481 +                                y += cie_yf.ssamp[i] * clr->ssamp[i];
482 +                        clr->eff = C_CLPWM * y / clr->ssum;
483 +                } else /* clr->flags & C_CDXY */ {      /* from (x,y) */
484 +                        clr->eff = clr->cx*cie_xf.eff + clr->cy*cie_yf.eff +
485 +                                        (1. - clr->cx - clr->cy)*cie_zf.eff;
486 +                }
487 +                clr->flags |= C_CSEFF;
488 +        }
489   }
490  
491  
# Line 543 | Line 556 | double w1, w2;
556          register int    i;
557  
558          if ((c1->flags|c2->flags) & C_CDSPEC) {         /* spectral mixing */
559 <                c_ccvt(c1, C_CSSPEC);
560 <                c_ccvt(c2, C_CSSPEC);
561 <                w1 /= (double)c1->ssum;
562 <                w2 /= (double)c2->ssum;
559 >                c_ccvt(c1, C_CSSPEC|C_CSEFF);
560 >                c_ccvt(c2, C_CSSPEC|C_CSEFF);
561 >                w1 /= c1->eff*c1->ssum;
562 >                w2 /= c1->eff*c2->ssum;
563                  scale = 0.;
564                  for (i = 0; i < C_CNSS; i++) {
565                          cmix[i] = w1*c1->ssamp[i] + w2*c2->ssamp[i];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines