| 1 | greg | 2.7 | { RCSid $Id: rambpos.cal,v 2.6 2014/05/15 17:30:53 greg Exp $ } | 
| 2 | greg | 2.1 | { | 
| 3 |  |  | Compute ambient position factors for genambpos.pl | 
| 4 |  |  | } | 
| 5 |  |  | and(a,b) : if(a,b,a); | 
| 6 |  |  | { level selector } | 
| 7 | greg | 2.2 | lvl = $10; | 
| 8 |  |  | wt = $11; | 
| 9 | greg | 2.5 | r0 = SF*$12; r1 = SF*$13; | 
| 10 | greg | 2.6 | eps = r0*.015; | 
| 11 | greg | 2.5 | acond = and( r0-5e-5, and( wt-MW, if(LV+.5, and(lvl-LV+.5,LV+.5-lvl), 6.5-lvl) ) ); | 
| 12 | greg | 2.1 | nx = $4; ny = $5; nz = $6; | 
| 13 |  |  | ux = $7; uy = $8; uz = $9; | 
| 14 |  |  | vx = ny*uz - nz*uy; | 
| 15 |  |  | vy = nz*ux - nx*uz; | 
| 16 |  |  | vz = nx*uy - ny*ux; | 
| 17 | greg | 2.6 | px = $1 + nx*eps; | 
| 18 |  |  | py = $2 + ny*eps; | 
| 19 |  |  | pz = $3 + nz*eps; | 
| 20 | greg | 2.3 | avr = .5/PI*$14; avg = .5/PI*$15; avb = .5/PI*$16; | 
| 21 | greg | 2.1 | { magnified position gradient } | 
| 22 |  |  | pgx = ($17*ux + $18*vx)/SF; | 
| 23 |  |  | pgy = ($17*uy + $18*vy)/SF; | 
| 24 |  |  | pgz = ($17*uz + $18*vz)/SF; | 
| 25 |  |  | pg = sqrt(pgx*pgx + pgy*pgy + pgz*pgz); | 
| 26 | greg | 2.4 | pcond = and( acond, pg - .0001 ); | 
| 27 | greg | 2.1 | { direction gradient } | 
| 28 |  |  | dgx = $19*ux + $20*vx; | 
| 29 |  |  | dgy = $19*uy + $20*vy; | 
| 30 |  |  | dgz = $19*uz + $20*vz; | 
| 31 | greg | 2.6 | dg = sqrt(dgx*dgx + dgy*dgy + dgz*dgz); | 
| 32 | greg | 2.7 | { corral flags pattern } | 
| 33 |  |  | cflags = $21; | 
| 34 |  |  | { ambient position color } | 
| 35 |  |  | val = avr + avg + avb; | 
| 36 | greg | 2.2 | agr = select(lvl+1, val, 0, 0, val, 0, val, val); | 
| 37 |  |  | agg = select(lvl+1, 0, val, 0, val, val, 0, val/2); | 
| 38 |  |  | agb = select(lvl+1, 0, 0, val, 0, val, val, val/2); | 
| 39 | greg | 2.1 | psiz = r0/10; | 
| 40 | greg | 2.6 | dcond = and( acond, dg - .0001 ); | 
| 41 | greg | 2.1 | { base polygon vertices } | 
| 42 | greg | 2.6 | px1 = px + r0*ux + r1*vx; | 
| 43 |  |  | py1 = py + r0*uy + r1*vy; | 
| 44 |  |  | pz1 = pz + r0*uz + r1*vz; | 
| 45 |  |  | px2 = px - r0*ux + r1*vx; | 
| 46 |  |  | py2 = py - r0*uy + r1*vy; | 
| 47 |  |  | pz2 = pz - r0*uz + r1*vz; | 
| 48 |  |  | px3 = px - r0*ux - r1*vx; | 
| 49 |  |  | py3 = py - r0*uy - r1*vy; | 
| 50 |  |  | pz3 = pz - r0*uz - r1*vz; | 
| 51 |  |  | px4 = px + r0*ux - r1*vx; | 
| 52 |  |  | py4 = py + r0*uy - r1*vy; | 
| 53 |  |  | pz4 = pz + r0*uz - r1*vz; | 
| 54 | greg | 2.1 | alen = psiz*3;                  { arrow length & coordinates } | 
| 55 |  |  | cx0 = px + psiz*psiz/alen*pgx/pg; | 
| 56 |  |  | cy0 = py + psiz*psiz/alen*pgy/pg; | 
| 57 |  |  | cz0 = pz + psiz*psiz/alen*pgz/pg; | 
| 58 |  |  | cr0 = psiz*sqrt(1 - psiz*psiz/(alen*alen)); | 
| 59 |  |  | cx1 = px + alen*pgx/pg; | 
| 60 |  |  | cy1 = py + alen*pgy/pg; | 
| 61 |  |  | cz1 = pz + alen*pgz/pg; |