ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/genambpos.pl
Revision: 2.10
Committed: Wed Apr 20 20:57:57 2016 UTC (8 years ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2, rad5R1, rad5R3
Changes since 2.9: +2 -2 lines
Log Message:
Added missing id count

File Contents

# Content
1 #!/usr/bin/perl -w
2 # RCSid $Id: genambpos.pl,v 2.9 2014/09/03 14:05:55 greg Exp $
3 #
4 # Visualize ambient positions and gradients
5 #
6 use strict;
7 sub userror {
8 print STDERR "Usage: genambpos [-l lvl][-w minwt][-r rad][-s sf][-p][-d] scene.amb > ambloc.rad\n";
9 exit 1;
10 }
11 my $lvlsel = -1;
12 my $scale = 0.25;
13 my $doposgrad = 0;
14 my $dodirgrad = 0;
15 my $minwt = 0.5001**6;
16 my $fixedrad="";
17 my $savedARGV = "genambpos @ARGV";
18 # Get options
19 while ($#ARGV >= 0) {
20 if ("$ARGV[0]" =~ /^-p/) {
21 $doposgrad=1;
22 } elsif ("$ARGV[0]" =~ /^-d/) {
23 $dodirgrad=1;
24 } elsif ("$ARGV[0]" =~ /^-l/) {
25 $lvlsel = $ARGV[1];
26 shift @ARGV;
27 } elsif ("$ARGV[0]" =~ /^-w/) {
28 $minwt = $ARGV[1];
29 shift @ARGV;
30 } elsif ("$ARGV[0]" =~ /^-s/) {
31 $scale = $ARGV[1];
32 shift @ARGV;
33 } elsif ("$ARGV[0]" =~ /^-r/) {
34 $fixedrad = "-e psiz:$ARGV[1]";
35 shift @ARGV;
36 } elsif ("$ARGV[0]" =~ /^-./) {
37 userror();
38 } else {
39 last;
40 }
41 shift @ARGV;
42 }
43 userror() if ($#ARGV != 0);
44 my $cmd = "getinfo < $ARGV[0] " .
45 q[| sed -n 's/^.* -aa \([.0-9][^ ]*\) .*$/\1/p'];
46 my $ambacc=`$cmd`;
47 die "Missing -aa setting in header\n" if (! $ambacc );
48 die "Zero -aa setting in header\n" if ($ambacc <= .00001);
49 $scale *= $ambacc;
50 my $ambfmt = '
51 void glow posglow
52 0
53 0
54 4 ${agr} ${agg} ${agb} 0
55
56 posglow sphere position${recno}
57 0
58 0
59 4 ${ px } ${ py } ${ pz } ${ psiz }
60 ';
61 my $posgradfmt = '
62 void glow arrglow
63 0
64 0
65 4 ${wt*agr} ${wt*agg} ${wt*agb} 0
66
67 arrglow cone pgarrow${recno}
68 0
69 0
70 8
71 ${ cx0 } ${ cy0 } ${ cz0 }
72 ${ cx1 } ${ cy1 } ${ cz1 }
73 ${ cr0 } 0
74
75 void brightfunc pgpat
76 2 posfunc ambpos.cal
77 0
78 6 ${ px } ${ py } ${ pz } ${ pgx } ${ pgy } ${ pgz }
79
80 pgpat colorfunc pgpat
81 4 1 if(corralled,.1,1) if(corralled,.1,1) ambpos.cal
82 0
83 7 ${ px } ${ py } ${ pz } ${ ux } ${ uy } ${ uz } ${ cflags }
84
85 pgpat glow pgval
86 0
87 0
88 4 ${avr} ${avg} ${avb} 0
89
90 void mixfunc pgeval
91 4 pgval void ellipstencil ambpos.cal
92 0
93 9 ${ px } ${ py } ${ pz } ${ux/r0} ${uy/r0} ${uz/r0} ${vx/r1} ${vy/r1} ${vz/r1}
94
95 pgeval polygon pgellipse${recno}
96 0
97 0
98 12
99 ${ px1 } ${ py1 } ${ pz1 }
100 ${ px2 } ${ py2 } ${ pz2 }
101 ${ px3 } ${ py3 } ${ pz3 }
102 ${ px4 } ${ py4 } ${ pz4 }
103 ';
104 $posgradfmt .= '
105 void glow tipglow
106 0
107 0
108 4 ${2*agr} ${2*agg} ${2*agb} 0
109
110 tipglow sphere atip${recno}
111 0
112 0
113 4 ${ cx1 } ${ cy1 } ${ cz1 } ${psiz/7}
114 ' if ($dodirgrad);
115 my $dirgradfmt='
116 void brightfunc dgpat
117 2 dirfunc ambpos.cal
118 0
119 9 ${ px } ${ py } ${ pz } ${ nx } ${ ny } ${ nz } ${ dgx } ${ dgy } ${ dgz }
120
121 dgpat glow dgval
122 0
123 0
124 4 ${avr} ${avg} ${avb} 0
125
126 dgval ring dgdisk${recno}a
127 0
128 0
129 8
130 ${ px+dgx/dg*eps*.5 } ${ py+dgy/dg*eps*.5 } ${ pz+dgz/dg*eps*.5 }
131 ${ dgx } ${ dgy } ${ dgz }
132 0 ${ r0/2 }
133
134 dgval ring dgdisk${recno}b
135 0
136 0
137 8
138 ${ px-dgx/dg*eps*.5 } ${ py-dgy/dg*eps*.5 } ${ pz-dgz/dg*eps*.5 }
139 ${ -dgx } ${ -dgy } ${ -dgz }
140 0 ${ r0/2 }
141 ';
142 # Load & convert ambient values
143 print "# Output produced by: $savedARGV\n";
144 system "lookamb -h -d $ARGV[0] | rcalc -e 'LV:$lvlsel;MW:$minwt;SF:$scale'" .
145 " -f rambpos.cal -e cond=acond $fixedrad -o '$ambfmt'";
146 if ($doposgrad) {
147 system "lookamb -h -d $ARGV[0] " .
148 "| rcalc -e 'LV:$lvlsel;MW:$minwt;SF:$scale'" .
149 " -f rambpos.cal -e cond=pcond $fixedrad -o '$posgradfmt'";
150 }
151 if ($dodirgrad) {
152 system "lookamb -h -d $ARGV[0] " .
153 "| rcalc -e 'LV:$lvlsel;MW:$minwt;SF:$scale'" .
154 " -f rambpos.cal -e cond=dcond -o '$dirgradfmt'";
155 }
156 exit;