1 |
{ |
2 |
Calculation of 2d picture coordinates. |
3 |
Picture is projected onto xy plane with lower left corner at origin. |
4 |
|
5 |
A1 - Ratio of height to width for tiles. |
6 |
A2 - Average red value for fadered or grey for fadegrey |
7 |
A3 - Average green value for fadegreen |
8 |
A4 - Average blue value for fadeblue |
9 |
A2, A3, A4 - Chroma key color for mixpict |
10 |
} |
11 |
{ straight coordinates } |
12 |
pic_u = Px; |
13 |
pic_v = Py; |
14 |
{ picture aspect ratio } |
15 |
pic_aspect = if(arg(0)-.5, arg(1), 1); |
16 |
{ compute borders for mixture } |
17 |
inpic = if(and(pic_u, and(pic_v, |
18 |
if(pic_aspect-1, and(1-pic_u,pic_aspect-pic_v), |
19 |
and(1/pic_aspect-pic_u,1-pic_v) ) ) ), 1, 0); |
20 |
{ chroma-key mixing } |
21 |
chroma_sum`P = A2 + A3 + A4; |
22 |
chroma_tol`P = 0.02 * chroma_sum`P; |
23 |
intol`P(a,b) : and(a-b+chroma_tol`P, b-a+chroma_tol`P); |
24 |
ischroma`P(r,g,s) = if(FTINY-chroma_sum`P, .001-s, |
25 |
if(.001-s, -1, |
26 |
and(intol`P(r*chroma_sum`P,A2*s),intol`P(g*chroma_sum`P,A3*s)) |
27 |
) ); |
28 |
infore(r,g,b) = if(inpic-.5, if(ischroma`P(r,g,r+g+b), 0, 1), 0); |
29 |
{ standard tiling } |
30 |
tile_u = mod(pic_u,max(1,1/pic_aspect)); |
31 |
tile_v = mod(pic_v,max(1,pic_aspect)); |
32 |
{ tiling with inversion matching } |
33 |
match_u = tri(pic_u,max(1,1/pic_aspect)); |
34 |
match_v = tri(pic_v,max(1,pic_aspect)); |
35 |
{ brick-type staggering } |
36 |
stag_u = if(pic_aspect-1, |
37 |
frac(if(frac(pic_v/pic_aspect/2)-.5,pic_u,pic_u+.5)), |
38 |
mod(if(frac(pic_v/2)-.5,pic_u,pic_u+.5/pic_aspect), |
39 |
1/pic_aspect)); |
40 |
stag_v = tile_v; |
41 |
{ fade colors for distant viewing } |
42 |
fadered(r,g,b) = fade(r, A2, T*.1); |
43 |
fadegreen(r,g,b) = fade(g, A3, T*.1); |
44 |
fadeblue(r,g,b) = fade(b, A4, T*.1); |
45 |
fadegrey(r,g,b) = fade(grey(r,g,b), A2, T*.1); |