1 |
+ |
.\" RCSid $Id$ |
2 |
|
.EQ |
3 |
|
delim @@ |
4 |
|
.EN |
604 |
|
\f[I]definitions\f[R]. |
605 |
|
Once a function or variable has been defined, it may be used in later |
606 |
|
definitions, along with predefined functions such as \f[C]sin(x)\f[R] |
607 |
< |
and \f[C]cos(x)\f[R] and constants such as PI \**. |
607 |
> |
and \f[C]cos(x)\f[R] and constants such as \f[C]PI\f[R]\**. |
608 |
|
.FS |
609 |
|
TBD - There once was a footnote here |
610 |
|
.FE |
799 |
|
.RE |
800 |
|
.LP |
801 |
|
The following are sometimes defined, depending on the program: |
802 |
< |
.IP "\f[B]PI\f[R]" 3 |
802 |
> |
.IP "\f[B]\f[CB]PI\f[B]\f[R]" 3 |
803 |
|
The ratio of a circle\[cq]s circumference to its diameter. |
804 |
|
.RS 3 |
805 |
|
.RE |
839 |
|
surface normal |
840 |
|
.RS 3 |
841 |
|
.RE |
842 |
< |
.LP |
843 |
< |
\f[C]Px, Py, Pz\f[R] :intersection point |
842 |
> |
.IP "\f[B]\f[CB]Px, Py, Pz\f[B]\f[R]" 3 |
843 |
> |
intersection point |
844 |
> |
.RS 3 |
845 |
> |
.RE |
846 |
|
.IP "\f[B]\f[CB]T\f[B]\f[R]" 3 |
847 |
|
distance from start |
848 |
|
.RS 3 |
1577 |
|
.LP |
1578 |
|
Similar to data files, font files are usually read and stored in a |
1579 |
|
lookup table. |
1580 |
< |
The data structures for fonts are in src/common/font.h, and the routines |
1581 |
< |
for reading and spacing them are in \f[C]src/common/font.c\f[R]. |
1580 |
> |
The data structures for fonts are in \f[C]src/common/font.h\f[R], and |
1581 |
> |
the routines for reading and spacing them are in |
1582 |
> |
\f[C]src/common/font.c\f[R]. |
1583 |
|
The main structure type is \f[C]FONT\f[R]. |
1584 |
|
The routine \f[C]getfont(fname)\f[R] loads a font file from the |
1585 |
|
\f[I]Radiance\f[R] library (set by the \f[C]RAYPATH\f[R] environment |
1925 |
|
\f[I]Radiance\f[R] scene description, some of the same library routines |
1926 |
|
are called indirectly. |
1927 |
|
The header file \f[C]src/common/octree.h\f[R] is needed in addition to |
1928 |
< |
the \f[C]src/common/object.\f[R]h file. |
1928 |
> |
the \f[C]src/common/object.h\f[R] file. |
1929 |
|
The module \f[C]src/ot/writeoct.c\f[R] contains the main routines for |
1930 |
|
writing an octree to stdout, while \f[C]src/common/readoct.c\f[R] |
1931 |
|
contains the corresponding routines for reading an octree from a file. |
1972 |
|
differ from standard computer graphics images inasmuch as they contain |
1973 |
|
real physical data, namely radiance values at each pixel. |
1974 |
|
To do this, it is necessary to maintain floating point information, and |
1975 |
< |
we use a 4-byte/pixel encoding described in Chapter II.5 of Graphics |
1976 |
< |
Gems II [Arvo91,p.80]. |
1975 |
> |
we use a 4-byte/pixel encoding described in Chapter II.5 of |
1976 |
> |
\f[I]Graphics Gems II\f[R] [Arvo91,p.80]. |
1977 |
|
The basic idea is to store a 1-byte mantissa for each of three |
1978 |
|
primaries, and a common 1-byte exponent. |
1979 |
|
The accuracy of these values will be on the order of 1% (±1 in 200) over |
2018 |
|
.IP "\f[B]\f[CB]FORMAT\f[B]\f[R]" 3 |
2019 |
|
A line indicating the file\[cq]s format. |
2020 |
|
At most one \f[C]FORMAT\f[R] line is allowed, and it must be assigned a |
2021 |
< |
value of either \f[C]32- bit_rle_rgbe\f[R] or \f[C]32-bit_rle_xyze\f[R] |
2021 |
> |
value of either \f[C]32-bit_rle_rgbe\f[R] or \f[C]32-bit_rle_xyze\f[R] |
2022 |
|
to be a valid \f[I]Radiance\f[R] picture. |
2023 |
|
.RS 3 |
2024 |
|
.RE |
2067 |
|
or override old ones. |
2068 |
|
.RS 3 |
2069 |
|
.RE |
2070 |
< |
.LP |
2071 |
< |
\f[C]PRIMARIES\f[R] The CIE (x,y) chromaticity coordinates of the three |
2072 |
< |
(RGB) primaries and the white point used to standardize the |
2069 |
< |
picture\[cq]s color system. |
2070 |
> |
.IP "\f[B]\f[CB]PRIMARIES\f[B]\f[R]" 3 |
2071 |
> |
The CIE (x,y) chromaticity coordinates of the three (RGB) primaries and |
2072 |
> |
the white point used to standardize the picture\[cq]s color system. |
2073 |
|
This is used mainly by the \f[B]ra_xyze\f[R] program to convert between |
2074 |
|
color systems. |
2075 |
|
If no \f[C]PRIMARIES\f[R] line appears, we assume the standard primaries |
2076 |
|
defined in \f[C]src/common/color.h\f[R], namely |
2077 |
|
\f[C]0.640 0.330 0.290 0.600 0.150 0.060 0.333 0.333\f[R] for red, |
2078 |
|
green, blue and white, respectively. |
2079 |
< |
.PP |
2079 |
> |
.RS 3 |
2080 |
> |
.RE |
2081 |
> |
.LP |
2082 |
|
As always, the end of the header is indicated by an empty line. |
2083 |
|
.SH 4 |
2084 |
|
Resolution String |
2171 |
|
.IP "\f[B]New run-length encoded\f[R]" 3 |
2172 |
|
In this format, the four scanline components (three primaries and |
2173 |
|
exponent) are separated for better compression using adaptive run-length |
2174 |
< |
encoding (described by Glassner in Chapter II.8 of Graphics Gems II |
2175 |
< |
[Arvo91,p.89]). |
2174 |
> |
encoding (described by Glassner in Chapter II.8 of \f[I]Graphics Gems |
2175 |
> |
II\f[R] [Arvo91,p.89]). |
2176 |
|
The record begins with an unnormalized pixel having two bytes equal to |
2177 |
|
2, followed by the upper byte and the lower byte of the scanline length |
2178 |
|
(which must be less than 32768). |
2206 |
|
\f[C]luminance(col)\f[R]. |
2207 |
|
.PP |
2208 |
|
If the \f[C]FORMAT\f[R] string indicates XYZ data, then the units of the |
2209 |
< |
Y primary are already lm/st/m\*{2\*}, so the above conversion is |
2209 |
> |
Y primary are already lm/sr/m\*{2\*}, so the above conversion is |
2210 |
|
unnecessary. |
2211 |
|
.SH 3 |
2212 |
|
\f[BI]Radiance\f[B] programs |
2588 |
|
Here are the relevant calls for reading and copying information headers: |
2589 |
|
.IP "\f[B]\f[CB]int checkheader(FILE *fin, char *fmt, FILE *fout);\f[B]\f[R]" 3 |
2590 |
|
Read the header information from \f[C]fin\f[R], copying to |
2591 |
< |
\f[C]fou\f[R]t (unless fout is \f[C]NULL\f[R]), checking any |
2591 |
> |
\f[C]fout\f[R] (unless fout is \f[C]NULL\f[R]), checking any |
2592 |
|
\f[C]FORMAT\f[R] line against the string \f[C]fmt\f[R]. |
2593 |
|
The \f[C]FORMAT\f[R] line (if it exists) will not be copied to |
2594 |
|
\f[C]fout\f[R]. |
2645 |
|
Macro** | puts real exposure value \f[C]ex\f[R] to stream \f[C]fp\f[R]. |
2646 |
|
.RS 3 |
2647 |
|
.RE |
2648 |
< |
.LP |
2649 |
< |
\f[C]iscolcor(s)\f[R] :Macro returns non-zero if the line \f[C]s\f[R] is |
2650 |
< |
a \f[C]COLORCORR\f[R] setting. |
2648 |
> |
.IP "\f[B]\f[CB]iscolcor(s)\f[B]\f[R]" 3 |
2649 |
> |
Macro returns non-zero if the line \f[C]s\f[R] is a \f[C]COLORCORR\f[R] |
2650 |
> |
setting. |
2651 |
> |
.RS 3 |
2652 |
> |
.RE |
2653 |
|
.IP "\f[B]\f[CB]colcorval(cc,s)\f[B]\f[R]" 3 |
2654 |
|
Macro assign color correction value from line \f[C]s\f[R] in the |
2655 |
|
\f[C]COLOR\f[R] variable \f[C]cc\f[R]. |
2722 |
|
.RS 3 |
2723 |
|
.RE |
2724 |
|
.IP "\f[B]\f[CB]scanlen(rs)\f[B]\f[R]" 3 |
2725 |
< |
Macro to get the scanline length from the \f[C]RESOL\f[R]U structure |
2725 |
> |
Macro to get the scanline length from the \f[C]RESOLU\f[R] structure |
2726 |
|
pointed to by \f[C]rs\f[R]. |
2727 |
|
.RS 3 |
2728 |
|
.RE |
2732 |
|
.RS 3 |
2733 |
|
.RE |
2734 |
|
.IP "\f[B]\f[CB]fscnresolu(slp,nsp,fp)\f[B]\f[R]" 3 |
2735 |
< |
Macro to read in a resolution string from \f[C]f\f[R]p and assign the |
2735 |
> |
Macro to read in a resolution string from \f[C]fp\f[R] and assign the |
2736 |
|
scanline length and number of scanlines to the integers pointed to by |
2737 |
|
\f[C]slp\f[R] and \f[C]nsp\f[R], respectively. |
2738 |
|
This call expects standard English-text ordered scanlines, and returns |
3137 |
|
access routines in \f[C]src/common/portio.c\f[R] for reading and writing |
3138 |
|
portable binary data. |
3139 |
|
The information header is handled by the routines in |
3140 |
< |
s\f[C]rc/common/header.c\f[R], similar to the method described for |
3140 |
> |
\f[C]src/common/header.c\f[R], similar to the method described for |
3141 |
|
\f[I]Radiance\f[R] picture files. |
3142 |
|
Here are the main calls from \f[C]src/rt/ambio.c\f[R]: |
3143 |
|
.IP "\f[B]\f[CB]putambmagic(FILE *fp);\f[B]\f[R]" 3 |