--- ray/src/cal/cal/Sharp.cal 2003/02/22 02:07:21 1.1 +++ ray/src/cal/cal/Sharp.cal 2005/04/28 17:20:34 1.2 @@ -1,74 +1,12 @@ +{ RCSid $Id: Sharp.cal,v 1.2 2005/04/28 17:20:34 greg Exp $ } { Convert between XYZ and Sharp RGB coordinates - - 3/22/02 } - -{*** The whole calculation is based on the CIE (x,y) chromaticities below ***} - -CIE_x_r : .6898; -CIE_y_r : .3206; -CIE_x_g : .0736; -CIE_y_g : .9003; -CIE_x_b : .1166; -CIE_y_b : .0374; -CIE_x_w : 1/3; -CIE_y_w : 1/3; - -WHTEFFICACY : 179. ; { luminous efficacy of uniform white light } - -{ Derived constants } - -CIE_D : CIE_x_r*(CIE_y_g - CIE_y_b) + - CIE_x_g*(CIE_y_b - CIE_y_r) + - CIE_x_b*(CIE_y_r - CIE_y_g) ; - -CIE_C_rD : (1./CIE_y_w) * ( CIE_x_w*(CIE_y_g - CIE_y_b) - - CIE_y_w*(CIE_x_g - CIE_x_b) + - CIE_x_g*CIE_y_b - CIE_x_b*CIE_y_g ) ; - -CIE_C_gD : (1./CIE_y_w) * ( CIE_x_w*(CIE_y_b - CIE_y_r) - - CIE_y_w*(CIE_x_b - CIE_x_r) - - CIE_x_r*CIE_y_b + CIE_x_b*CIE_y_r ) ; - -CIE_C_bD : (1./CIE_y_w) * ( CIE_x_w*(CIE_y_r - CIE_y_g) - - CIE_y_w*(CIE_x_r - CIE_x_g) + - CIE_x_r*CIE_y_g - CIE_x_g*CIE_y_r ) ; - -{ Convert CIE XYZ coordinates to RGB } - -XYZ2RGB(i,j) : select(i*3+j+1, - (CIE_y_g - CIE_y_b - CIE_x_b*CIE_y_g + CIE_y_b*CIE_x_g)/CIE_C_rD, - (CIE_x_b - CIE_x_g - CIE_x_b*CIE_y_g + CIE_x_g*CIE_y_b)/CIE_C_rD, - (CIE_x_g*CIE_y_b - CIE_x_b*CIE_y_g)/CIE_C_rD, - (CIE_y_b - CIE_y_r - CIE_y_b*CIE_x_r + CIE_y_r*CIE_x_b)/CIE_C_gD, - (CIE_x_r - CIE_x_b - CIE_x_r*CIE_y_b + CIE_x_b*CIE_y_r)/CIE_C_gD, - (CIE_x_b*CIE_y_r - CIE_x_r*CIE_y_b)/CIE_C_gD, - (CIE_y_r - CIE_y_g - CIE_y_r*CIE_x_g + CIE_y_g*CIE_x_r)/CIE_C_bD, - (CIE_x_g - CIE_x_r - CIE_x_g*CIE_y_r + CIE_x_r*CIE_y_g)/CIE_C_bD, - (CIE_x_r*CIE_y_g - CIE_x_g*CIE_y_r)/CIE_C_bD -); - -noneg(x) : if(x, x, 0); - -R(X,Y,Z) : noneg(XYZ2RGB(0,0)*X + XYZ2RGB(0,1)*Y + XYZ2RGB(0,2)*Z); -G(X,Y,Z) : noneg(XYZ2RGB(1,0)*X + XYZ2RGB(1,1)*Y + XYZ2RGB(1,2)*Z); -B(X,Y,Z) : noneg(XYZ2RGB(2,0)*X + XYZ2RGB(2,1)*Y + XYZ2RGB(2,2)*Z); - -{ Convert RGB to CIE XYZ coordinates } - -RGB2XYZ(i,j) : select(i*3+j+1, - CIE_x_r*CIE_C_rD/CIE_D,CIE_x_g*CIE_C_gD/CIE_D,CIE_x_b*CIE_C_bD/CIE_D, - CIE_y_r*CIE_C_rD/CIE_D,CIE_y_g*CIE_C_gD/CIE_D,CIE_y_b*CIE_C_bD/CIE_D, - (1.-CIE_x_r-CIE_y_r)*CIE_C_rD/CIE_D, - (1.-CIE_x_g-CIE_y_g)*CIE_C_gD/CIE_D, - (1.-CIE_x_b-CIE_y_b)*CIE_C_bD/CIE_D -); - -X(R,G,B) : RGB2XYZ(0,0)*R + RGB2XYZ(0,1)*G + RGB2XYZ(0,2)*B; -Y(R,G,B) : RGB2XYZ(1,0)*R + RGB2XYZ(1,1)*G + RGB2XYZ(1,2)*B; -Z(R,G,B) : RGB2XYZ(2,0)*R + RGB2XYZ(2,1)*G + RGB2XYZ(2,2)*B; - -{ Convert spectral radiance in watts/sr/m^2 to luminance in cd/m^2 } - -luminance(r,g,b) = WHTEFFICACY * Y(r,g,b) ; +CIE_x_r = .6898; +CIE_y_r = .3206; +CIE_x_g = .0736; +CIE_y_g = .9003; +CIE_x_b = .1166; +CIE_y_b = .0374; +CIE_x_w = 1/3; +CIE_y_w = 1/3;