1 |
{ RCSid $Id$ } |
2 |
{ |
3 |
Compute ambient position factors for genambpos.pl |
4 |
} |
5 |
and(a,b) : if(a,b,a); |
6 |
{ level selector } |
7 |
cond = if(LV+.5, and($10-LV-.5,LV+.5-$10), 1); |
8 |
px = $1; py = $2; pz = $3; |
9 |
r0 = SF*$12; r1 = SF*$13; |
10 |
nx = $4; ny = $5; nz = $6; |
11 |
ux = $7; uy = $8; uz = $9; |
12 |
vx = ny*uz - nz*uy; |
13 |
vy = nz*ux - nx*uz; |
14 |
vz = nx*uy - ny*ux; |
15 |
avr = $14; avg = $15; avb = $16; |
16 |
{ magnified position gradient } |
17 |
pgx = ($17*ux + $18*vx)/SF; |
18 |
pgy = ($17*uy + $18*vy)/SF; |
19 |
pgz = ($17*uz + $18*vz)/SF; |
20 |
pg = sqrt(pgx*pgx + pgy*pgy + pgz*pgz); |
21 |
{ direction gradient } |
22 |
dgx = $19*ux + $20*vx; |
23 |
dgy = $19*uy + $20*vy; |
24 |
dgz = $19*uz + $20*vz; |
25 |
val = avr + avg + avb; { ambient position color } |
26 |
agr = select($10+1, val, 0, 0, val, 0, val, val); |
27 |
agg = select($10+1, 0, val, 0, val, val, 0, val/2); |
28 |
agb = select($10+1, 0, 0, val, 0, val, val, val/2); |
29 |
psiz = r0/10; |
30 |
{ base polygon vertices } |
31 |
px1 = px + r0*ux + r1*vx + .0001*nx; |
32 |
py1 = py + r0*uy + r1*vy + .0001*ny; |
33 |
pz1 = pz + r0*uz + r1*vz + .0001*nz; |
34 |
px2 = px - r0*ux + r1*vx + .0001*nx; |
35 |
py2 = py - r0*uy + r1*vy + .0001*ny; |
36 |
pz2 = pz - r0*uz + r1*vz + .0001*nz; |
37 |
px3 = px - r0*ux - r1*vx + .0001*nx; |
38 |
py3 = py - r0*uy - r1*vy + .0001*ny; |
39 |
pz3 = pz - r0*uz - r1*vz + .0001*nz; |
40 |
px4 = px + r0*ux - r1*vx + .0001*nx; |
41 |
py4 = py + r0*uy - r1*vy + .0001*ny; |
42 |
pz4 = pz + r0*uz - r1*vz + .0001*nz; |
43 |
alen = psiz*3; { arrow length & coordinates } |
44 |
cx0 = px + psiz*psiz/alen*pgx/pg; |
45 |
cy0 = py + psiz*psiz/alen*pgy/pg; |
46 |
cz0 = pz + psiz*psiz/alen*pgz/pg; |
47 |
cr0 = psiz*sqrt(1 - psiz*psiz/(alen*alen)); |
48 |
cx1 = px + alen*pgx/pg; |
49 |
cy1 = py + alen*pgy/pg; |
50 |
cz1 = pz + alen*pgz/pg; |