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

Comparing ray/src/cal/cal/xyz_rgb.cal (file contents):
Revision 1.1 by greg, Sat Feb 22 02:07:21 2003 UTC vs.
Revision 1.2 by greg, Thu Apr 28 17:20:34 2005 UTC

# Line 1 | Line 1
1 + { RCSid $Id$ }
2   {
3          Convert between XYZ and RGB coordinates.
4  
# Line 7 | Line 8
8          those in ray/src/common/color.h.
9   }
10  
11 + CIE_pri(i) = select(i, 0.640,0.330, 0.290,0.600, 0.150,0.060, 1/3,1/3);
12 +
13   {*** The whole calculation is based on the CIE (x,y) chromaticities below ***}
14  
15 < CIE_x_r :       0.640 ;         { nominal CRT primaries }
16 < CIE_y_r :       0.330 ;
17 < CIE_x_g :       0.290 ;
18 < CIE_y_g :       0.600 ;
19 < CIE_x_b :       0.150 ;
20 < CIE_y_b :       0.060 ;
21 < CIE_x_w :       1/3 ;           { use true white }
22 < CIE_y_w :       1/3 ;
15 > CIE_x_r =       CIE_spec(1);
16 > CIE_y_r =       CIE_spec(2);
17 > CIE_x_g =       CIE_spec(3);
18 > CIE_y_g =       CIE_spec(4);
19 > CIE_x_b =       CIE_spec(5);
20 > CIE_y_b =       CIE_spec(6);
21 > CIE_x_w =       CIE_spec(7);
22 > CIE_y_w =       CIE_spec(8);
23  
24   WHTEFFICACY :   179. ;          { luminous efficacy of uniform white light }
25  
26   { Derived constants }
27  
28 < CIE_D :         CIE_x_r*(CIE_y_g - CIE_y_b) +
28 > CIE_D =         CIE_x_r*(CIE_y_g - CIE_y_b) +
29                                  CIE_x_g*(CIE_y_b - CIE_y_r) +
30                                  CIE_x_b*(CIE_y_r - CIE_y_g) ;
31  
32 < CIE_C_rD :      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_g - CIE_y_b) -
32 > CIE_C_rD =      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_g - CIE_y_b) -
33                                    CIE_y_w*(CIE_x_g - CIE_x_b) +
34                                    CIE_x_g*CIE_y_b - CIE_x_b*CIE_y_g     ) ;
35  
36 < CIE_C_gD :      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_b - CIE_y_r) -
36 > CIE_C_gD =      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_b - CIE_y_r) -
37                                    CIE_y_w*(CIE_x_b - CIE_x_r) -
38                                    CIE_x_r*CIE_y_b + CIE_x_b*CIE_y_r     ) ;
39  
40 < CIE_C_bD :      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_r - CIE_y_g) -
40 > CIE_C_bD =      (1./CIE_y_w) *  ( CIE_x_w*(CIE_y_r - CIE_y_g) -
41                                    CIE_y_w*(CIE_x_r - CIE_x_g) +
42                                    CIE_x_r*CIE_y_g - CIE_x_g*CIE_y_r     ) ;
43  
44   { Convert CIE XYZ coordinates to RGB }
45  
46 < XYZ2RGB(i,j) : select(i*3+j+1,
46 > XYZ2RGB(i,j) = select(i*3+j+1,
47          (CIE_y_g - CIE_y_b - CIE_x_b*CIE_y_g + CIE_y_b*CIE_x_g)/CIE_C_rD,
48          (CIE_x_b - CIE_x_g - CIE_x_b*CIE_y_g + CIE_x_g*CIE_y_b)/CIE_C_rD,
49          (CIE_x_g*CIE_y_b - CIE_x_b*CIE_y_g)/CIE_C_rD,
# Line 54 | Line 57 | XYZ2RGB(i,j) : select(i*3+j+1,
57  
58   noneg(x) : if(x, x, 0);
59  
60 < R(X,Y,Z) :      noneg(XYZ2RGB(0,0)*X + XYZ2RGB(0,1)*Y + XYZ2RGB(0,2)*Z);
61 < G(X,Y,Z) :      noneg(XYZ2RGB(1,0)*X + XYZ2RGB(1,1)*Y + XYZ2RGB(1,2)*Z);
62 < B(X,Y,Z) :      noneg(XYZ2RGB(2,0)*X + XYZ2RGB(2,1)*Y + XYZ2RGB(2,2)*Z);
60 > R(X,Y,Z) =      noneg(XYZ2RGB(0,0)*X + XYZ2RGB(0,1)*Y + XYZ2RGB(0,2)*Z);
61 > G(X,Y,Z) =      noneg(XYZ2RGB(1,0)*X + XYZ2RGB(1,1)*Y + XYZ2RGB(1,2)*Z);
62 > B(X,Y,Z) =      noneg(XYZ2RGB(2,0)*X + XYZ2RGB(2,1)*Y + XYZ2RGB(2,2)*Z);
63  
64   { Convert RGB to CIE XYZ coordinates }
65  
66 < RGB2XYZ(i,j) : select(i*3+j+1,
66 > RGB2XYZ(i,j) = select(i*3+j+1,
67          CIE_x_r*CIE_C_rD/CIE_D,CIE_x_g*CIE_C_gD/CIE_D,CIE_x_b*CIE_C_bD/CIE_D,
68          CIE_y_r*CIE_C_rD/CIE_D,CIE_y_g*CIE_C_gD/CIE_D,CIE_y_b*CIE_C_bD/CIE_D,
69          (1.-CIE_x_r-CIE_y_r)*CIE_C_rD/CIE_D,
# Line 68 | Line 71 | RGB2XYZ(i,j) : select(i*3+j+1,
71          (1.-CIE_x_b-CIE_y_b)*CIE_C_bD/CIE_D
72   );
73  
74 < X(R,G,B) :      RGB2XYZ(0,0)*R + RGB2XYZ(0,1)*G + RGB2XYZ(0,2)*B;
75 < Y(R,G,B) :      RGB2XYZ(1,0)*R + RGB2XYZ(1,1)*G + RGB2XYZ(1,2)*B;
76 < Z(R,G,B) :      RGB2XYZ(2,0)*R + RGB2XYZ(2,1)*G + RGB2XYZ(2,2)*B;
74 > X(R,G,B) =      RGB2XYZ(0,0)*R + RGB2XYZ(0,1)*G + RGB2XYZ(0,2)*B;
75 > Y(R,G,B) =      RGB2XYZ(1,0)*R + RGB2XYZ(1,1)*G + RGB2XYZ(1,2)*B;
76 > Z(R,G,B) =      RGB2XYZ(2,0)*R + RGB2XYZ(2,1)*G + RGB2XYZ(2,2)*B;
77  
78   { Convert spectral radiance in watts/sr/m^2 to luminance in cd/m^2 }
79  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines