| 1 |
greg |
1.1 |
{ SCCSid "$SunId$ LBL" } |
| 2 |
|
|
|
| 3 |
|
|
{ |
| 4 |
|
|
Coordinate computations for mkillum output. |
| 5 |
|
|
|
| 6 |
greg |
2.2 |
For the spherical case, A1-A3 is the value at the positive pole, |
| 7 |
|
|
A4-A6 is the value at the negative pole, and A7 is the pole influence: |
| 8 |
greg |
1.1 |
|
| 9 |
|
|
il_alt - Altitude (1 to -1) for spherical coordinates |
| 10 |
|
|
il_azi - Azimuth (0 to 2*PI) for sphere |
| 11 |
|
|
|
| 12 |
greg |
2.2 |
For the hemispherical case, A1-A3 and A4 are the pole value and |
| 13 |
|
|
influence, respectively, and A5-A13 are the unit vectors for the |
| 14 |
greg |
1.1 |
hemisphere's coordinate system: |
| 15 |
|
|
|
| 16 |
|
|
il_alth - Altitude (1 to 0) for hemispherical coordinates |
| 17 |
|
|
il_azih - Azimuth (0 to 2*PI) for hemisphere |
| 18 |
|
|
} |
| 19 |
|
|
|
| 20 |
greg |
2.2 |
norm_rad(r) : if( r, r, r+2*PI ); |
| 21 |
|
|
{ sphere coordinates } |
| 22 |
greg |
1.1 |
il_alt = Dz; |
| 23 |
|
|
il_azi = norm_rad(atan2(Dy, Dx)); |
| 24 |
|
|
|
| 25 |
greg |
2.2 |
s_val(v, vN, vS) = noneg(if( il_alt-A7, |
| 26 |
|
|
linterp((il_alt-A7)/(1-A7), v, vN), |
| 27 |
|
|
if ( -il_alt-A7, |
| 28 |
|
|
linterp((-il_alt-A7)/(1-A7), v, vS), |
| 29 |
|
|
v ), |
| 30 |
|
|
v )); |
| 31 |
|
|
{ sphere values } |
| 32 |
|
|
s_red(r,g,b) = s_val(r, A1, A4); |
| 33 |
|
|
s_grn(r,g,b) = s_val(g, A2, A5); |
| 34 |
|
|
s_blu(r,g,b) = s_val(b, A3, A6); |
| 35 |
|
|
s_gry(r,g,b) = s_val(grey(r,g,b), grey(A1,A2,A3), grey(A4,A5,A6)); |
| 36 |
greg |
1.1 |
|
| 37 |
greg |
2.2 |
{ hemisphere coordinates } |
| 38 |
|
|
il_alth = sq(-Dx*arg(11)-Dy*arg(12)-Dz*arg(13)); |
| 39 |
|
|
il_azih = norm_rad(atan2(-Dx*arg(8)-Dy*arg(9)-Dz*arg(10), |
| 40 |
|
|
-Dx*arg(5)-Dy*arg(6)-Dz*arg(7))); |
| 41 |
|
|
|
| 42 |
|
|
h_val(v, vN) = noneg(if( il_alth-A4, linterp((il_alth-A4)/(1-A4), v, vN), v )); |
| 43 |
|
|
{ hemisphere values } |
| 44 |
|
|
h_red(r,g,b) = h_val(r, A1); |
| 45 |
|
|
h_grn(r,g,b) = h_val(g, A2); |
| 46 |
|
|
h_blu(r,g,b) = h_val(b, A3); |
| 47 |
|
|
h_gry(r,g,b) = h_val(grey(r,g,b), grey(A1,A2,A3)); |