

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.amigaos.net/w/index.php?action=history&amp;feed=atom&amp;title=TDDD_IFF_3-D_Rendering_Data</id>
	<title>TDDD IFF 3-D Rendering Data - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.amigaos.net/w/index.php?action=history&amp;feed=atom&amp;title=TDDD_IFF_3-D_Rendering_Data"/>
	<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=TDDD_IFF_3-D_Rendering_Data&amp;action=history"/>
	<updated>2026-05-06T17:10:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.amigaos.net/w/index.php?title=TDDD_IFF_3-D_Rendering_Data&amp;diff=2087&amp;oldid=prev</id>
		<title>Steven Solie: Created page with &quot;= TDDD =  &lt;pre&gt; FORM TDDD is used by Impulse&#039;s Turbo Silver 3.0 for 3D rendering data.  TDDD stands for &amp;quot;3D data description&amp;quot;.  The files contain object and (optiona...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.amigaos.net/w/index.php?title=TDDD_IFF_3-D_Rendering_Data&amp;diff=2087&amp;oldid=prev"/>
		<updated>2012-05-10T19:25:00Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= TDDD =  &amp;lt;pre&amp;gt; FORM TDDD is used by Impulse&amp;#039;s Turbo Silver 3.0 for 3D rendering data.  TDDD stands for &amp;quot;3D data description&amp;quot;.  The files contain object and (optiona...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= TDDD =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORM TDDD is used by Impulse&amp;#039;s Turbo Silver 3.0 for 3D rendering&lt;br /&gt;
data.  TDDD stands for &amp;amp;quot;3D data description&amp;amp;quot;.  The files contain&lt;br /&gt;
object and (optionally) observer data.&lt;br /&gt;
&lt;br /&gt;
Turbo Silver&amp;#039;s successor, &amp;amp;quot;Imagine&amp;amp;quot;, uses an upgraded FORM TDDD&lt;br /&gt;
when it reads/writes object data.&lt;br /&gt;
&lt;br /&gt;
Currently, in &amp;amp;quot;standard IFF&amp;amp;quot; terms, a FORM TDDD has only two chunk&lt;br /&gt;
types:  an INFO chunk describing observer data;  and an OBJ chunk&lt;br /&gt;
describing an object heirarchy.  The INFO chunk appears only in&lt;br /&gt;
Turbo Silver&amp;#039;s &amp;amp;quot;cell&amp;amp;quot; files, and the OBJ chunk appears in both&lt;br /&gt;
&amp;amp;quot;cell&amp;amp;quot; files and &amp;amp;quot;object&amp;amp;quot; files.&lt;br /&gt;
&lt;br /&gt;
The FORM has an (optional) INFO chunk followed by some number of&lt;br /&gt;
OBJ chunks.  (Note:  OBJ is followed by a space -- ckID = &amp;amp;quot;OBJ &amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The INFO and OBJ chunks, in turn, are made up of smaller chunks with&lt;br /&gt;
the standard IFF structure:  &amp;amp;lt;ID&amp;amp;gt; &amp;amp;lt;data-size&amp;amp;gt; &amp;amp;lt;data&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The INFO &amp;amp;quot;sub-chunks&amp;amp;quot; are relatively straightforward to interpret.&lt;br /&gt;
&lt;br /&gt;
The OBJ &amp;amp;quot;sub-chunks&amp;amp;quot; support object heirarchies, and are slightly&lt;br /&gt;
more difficult to interpret.  Currently, there are 3 types of OBJ&lt;br /&gt;
sub-chunks:  an EXTR chunk, describing an &amp;amp;quot;external&amp;amp;quot; object in a&lt;br /&gt;
seperate file; a DESC chunk, describing one node of a heirarchy;&lt;br /&gt;
and a TOBJ chunk marking the end of a heirarchy chain.  For each&lt;br /&gt;
DESC chunk, there must be a corresponding TOBJ chunk.  And an&lt;br /&gt;
EXTR chunk is equivalent to a DESC/TOBJ pair.&lt;br /&gt;
&lt;br /&gt;
In Turbo Silver and Imagine, the structure of the object heirarchy&lt;br /&gt;
is as follows.  There is a head object, and its (sexist) brothers.&lt;br /&gt;
Each brother may have child objects.  The children may have&lt;br /&gt;
grandchildren, and so on. The brother nodes are kept in a doubly&lt;br /&gt;
linked list, and each node has a (possibly NULL) pointer to a&lt;br /&gt;
doubly linked &amp;amp;quot;child&amp;amp;quot; list. The children point to the &amp;amp;quot;grandchildren&amp;amp;quot;&lt;br /&gt;
lists, and so on.  (In addition, each node has a &amp;amp;quot;back&amp;amp;quot; pointer to&lt;br /&gt;
its parent).&lt;br /&gt;
&lt;br /&gt;
Each of the &amp;amp;quot;head&amp;amp;quot; brothers is written in a seperate OBJ chunk,&lt;br /&gt;
along with all its descendants.  The descendant heirarchy is&lt;br /&gt;
supported as follows:&lt;br /&gt;
&lt;br /&gt;
    for each node of a doubly linked list,&lt;br /&gt;
&lt;br /&gt;
    1)  A DESC chunk is written, describing its object.&lt;br /&gt;
    2)  If it has children, steps 1) to 3) are performed&lt;br /&gt;
            for each child.&lt;br /&gt;
    3)  A TOBJ chunk is written, marking the end of the children.&lt;br /&gt;
&lt;br /&gt;
For &amp;amp;quot;external&amp;amp;quot; objects, steps 1) to 3) are not performed, but&lt;br /&gt;
an EXTR chunk is written instead.  (This means that an external&lt;br /&gt;
object cannot have children unless they are stored in the same&lt;br /&gt;
&amp;amp;quot;external&amp;amp;quot; file).&lt;br /&gt;
&lt;br /&gt;
The TOBJ sub-chunks have zero size -- and no data.  The DESC&lt;br /&gt;
and EXTR sub-chunks are made up of &amp;amp;quot;sub-sub-chunks&amp;amp;quot;, again,&lt;br /&gt;
with the standard IFF structure:  &amp;amp;lt;ID&amp;amp;gt; &amp;amp;lt;data-size&amp;amp;gt; &amp;amp;lt;data&amp;amp;gt;.&lt;br /&gt;
&lt;br /&gt;
( &amp;amp;quot;External&amp;amp;quot; objects were used by Turbo Silver to allow a its&lt;br /&gt;
&amp;amp;quot;cell&amp;amp;quot; data files to refer to an &amp;amp;quot;object&amp;amp;quot; data file that is&lt;br /&gt;
&amp;amp;quot;external&amp;amp;quot; to the cell file.  Imagine abandons the idea of&lt;br /&gt;
individual cell files, and deals only in TDDD &amp;amp;quot;object&amp;amp;quot; files.&lt;br /&gt;
Currently, Imagine does not support EXTR chunks in TDD files.)&lt;br /&gt;
&lt;br /&gt;
Reader software WILL FOLLOW the standard IFF procedure of&lt;br /&gt;
skipping over any un-recognized chunks -- and &amp;amp;quot;sub-chunks&amp;amp;quot;&lt;br /&gt;
or &amp;amp;quot;sub-sub-chunks&amp;amp;quot;. The &amp;amp;lt;data-size&amp;amp;gt; field indicates how many&lt;br /&gt;
bytes to skip.  In addition it WILL OBSERVE the IFF rule that&lt;br /&gt;
an odd &amp;amp;lt;data-size&amp;amp;gt; may appear, in which case the corredponding&lt;br /&gt;
&amp;amp;lt;data&amp;amp;gt; field will be padded at the end with one extra byte to&lt;br /&gt;
give it an even size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, on with the details.&lt;br /&gt;
&lt;br /&gt;
First, there are several numerical fields appearing in the data,&lt;br /&gt;
describing object positions, rotation angles, scaling factors, etc.&lt;br /&gt;
They are stored as &amp;amp;quot;32-bit fractional&amp;amp;quot; numbers, such that the true&lt;br /&gt;
number is the 32-bit number divided by 65536.  So as an example,&lt;br /&gt;
the number 3.14159 is stored as (hexadecimal) $0003243F.  This&lt;br /&gt;
allows the data to be independant of any particular floating point&lt;br /&gt;
format. And it (actually) is the internal format used in the&lt;br /&gt;
&amp;amp;quot;integer&amp;amp;quot; version of Turbo Silver.  Numbers stored in this format&lt;br /&gt;
are called as &amp;amp;quot;FRACT&amp;amp;quot;s below.&lt;br /&gt;
&lt;br /&gt;
Second, there are several color (or RGB) fields in the data.&lt;br /&gt;
They are always stored as three UBYTEs representing the red,&lt;br /&gt;
green and blue components of the color.  Red is always first,&lt;br /&gt;
followed by green, and then blue.  For some of the data chunks,&lt;br /&gt;
Turbo Silver reads the color field into the 24 LSB&amp;#039;s of a&lt;br /&gt;
LONGword.  In such cases, the 3 RGB bytes are preceded by a&lt;br /&gt;
zero byte in the file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following &amp;amp;quot;typedef&amp;amp;quot;s are used below:&lt;br /&gt;
&lt;br /&gt;
typedef LONG    FRACT;                /* 4 bytes */&lt;br /&gt;
typedef UBYTE   COLOR[3];             /* 3 bytes */&lt;br /&gt;
&lt;br /&gt;
typedef struct vectors {&lt;br /&gt;
    FRACT X;          /* 4 bytes */&lt;br /&gt;
    FRACT Y;          /* 4 bytes */&lt;br /&gt;
    FRACT Z;          /* 4 bytes */&lt;br /&gt;
} VECTOR;             /* 12 bytes total */&lt;br /&gt;
&lt;br /&gt;
typedef struct matrices {&lt;br /&gt;
    VECTOR I;         /* 12 bytes */&lt;br /&gt;
    VECTOR J;         /* 12 bytes */&lt;br /&gt;
    VECTOR K;         /* 12 bytes */&lt;br /&gt;
} MATRIX;             /* 36 bytes total */&lt;br /&gt;
&lt;br /&gt;
typedef struct _tform {&lt;br /&gt;
    VECTOR r;         /* 12 bytes - position */&lt;br /&gt;
    VECTOR a;         /* 12 bytes - x axis */&lt;br /&gt;
    VECTOR b;         /* 12 bytes - y axis */&lt;br /&gt;
    VECTOR c;         /* 12 bytes - z axis */&lt;br /&gt;
    VECTOR s;         /* 12 bytes - size */&lt;br /&gt;
} TFORM;              /*  60 bytes total */&lt;br /&gt;
&lt;br /&gt;
The following structure is used in generating animated cells&lt;br /&gt;
from a single cell.  It can be attached to an object or to the&lt;br /&gt;
camera.  It is also used for Turbo Silver&amp;#039;s &amp;amp;quot;extrude along a&lt;br /&gt;
path&amp;amp;quot; feature.  (It is ignored &amp;amp;amp; forgotten by Imagine)&lt;br /&gt;
&lt;br /&gt;
typedef struct story {&lt;br /&gt;
    UBYTE  Path[18];  /* 18 bytes */&lt;br /&gt;
    VECTOR Translate; /* 12 bytes */&lt;br /&gt;
    VECTOR Rotate;    /* 12 bytes */&lt;br /&gt;
    VECTOR Scale;     /* 12 bytes */&lt;br /&gt;
    UWORD  info;      /*  2 bytes */&lt;br /&gt;
} STORY;              /* 56 bytes total */&lt;br /&gt;
&lt;br /&gt;
The Path[] name refers to a named object in the cell data.&lt;br /&gt;
The path object should be a sequence of points connected&lt;br /&gt;
with edges.  The object moves from the first point of the&lt;br /&gt;
first edge, to the last point of the last edge.  The edge&lt;br /&gt;
ordering is important.  The path is interpolated so that&lt;br /&gt;
the object always moves an equal distance in each frame of&lt;br /&gt;
the animation.  If there is no path the Path[] field should&lt;br /&gt;
be set to zeros.&lt;br /&gt;
The Translate vector is not currently used.&lt;br /&gt;
The Rotate &amp;amp;quot;vector&amp;amp;quot; specifies rotation angles about the&lt;br /&gt;
X, Y, and Z axes.&lt;br /&gt;
The Scale vector specfies X,Y, and Z scale factors.&lt;br /&gt;
The &amp;amp;quot;info&amp;amp;quot; word is a bunch of bit flags:&lt;br /&gt;
&lt;br /&gt;
    ABS_TRA    0x0001    - translate in world coorinates (not used)&lt;br /&gt;
    ABS_ROT    0x0002    - rotation in world coorinates&lt;br /&gt;
    ABS_SCL    0x0004    - scaling in world coorinates&lt;br /&gt;
    LOC_TRA    0x0010    - translate in local coorinates (not used)&lt;br /&gt;
    LOC_ROT    0x0020    - rotation in local coorinates&lt;br /&gt;
    LOC_SCL    0x0040    - scaling in local coorinates&lt;br /&gt;
    X_ALIGN    0x0100    - (not used)&lt;br /&gt;
    Y_ALIGN    0x0200    - align Y axis to path&amp;#039;s direction&lt;br /&gt;
    Z_ALIGN    0x0400    - (not used)&lt;br /&gt;
    FOLLOW_ME  0x1000    - children follow parent on path&lt;br /&gt;
&lt;br /&gt;
DESC sub-sub-chunks&lt;br /&gt;
-------------------&lt;br /&gt;
&lt;br /&gt;
NAME - size 18&lt;br /&gt;
&lt;br /&gt;
    BYTE    Name[18];       ; a name for the object.&lt;br /&gt;
&lt;br /&gt;
    Used for camera tracking, specifying story paths, etc.&lt;br /&gt;
&lt;br /&gt;
SHAP - size 4&lt;br /&gt;
&lt;br /&gt;
    WORD    Shape;          ; number indicating object type&lt;br /&gt;
    WORD    Lamp;           ; number indicating lamp type&lt;br /&gt;
&lt;br /&gt;
    Lamp numbers are composed of several bit fields:&lt;br /&gt;
&lt;br /&gt;
        Bits 0-1:&lt;br /&gt;
        0 - not a lamp&lt;br /&gt;
        1 - like sunlight&lt;br /&gt;
        2 - like a lamp - intensity falls off with distance.&lt;br /&gt;
        3 - unused/reserved&lt;br /&gt;
&lt;br /&gt;
        Bits 2:&lt;br /&gt;
                0 - non-shadow-casting light&lt;br /&gt;
                4 - shadow-casting light&lt;br /&gt;
&lt;br /&gt;
        Bits 3-4:&lt;br /&gt;
        0  - Spherical light source&lt;br /&gt;
        8  - Cylindrical light source.&lt;br /&gt;
        16 - Conical light source.&lt;br /&gt;
        24 - unused/reserved&lt;br /&gt;
&lt;br /&gt;
    Shape numbers are:&lt;br /&gt;
&lt;br /&gt;
        0 - Sphere&lt;br /&gt;
        1 - Stencil         ; not supported by Imagine&lt;br /&gt;
        2 - Axis            ; custom objects with points/triangles&lt;br /&gt;
        3 - Facets          ; illegal - for internal use only&lt;br /&gt;
        4 - Surface         ; not supported by Imagine&lt;br /&gt;
        5 - Ground&lt;br /&gt;
&lt;br /&gt;
    Spheres have thier radius set by the X size parameter.&lt;br /&gt;
    Stencils and surfaces are plane-parallelograms, with one&lt;br /&gt;
    point at the object&amp;#039;s position vector; one side lying along&lt;br /&gt;
    the object&amp;#039;s X axis with a length set by the X size; and&lt;br /&gt;
    another side starting from the position vector and going&lt;br /&gt;
    &amp;amp;quot;Y size&amp;amp;quot; units in the Y direction and &amp;amp;quot;Z size&amp;amp;quot; units in&lt;br /&gt;
    the X direction.  A ground object is an infinte plane&lt;br /&gt;
    perpendicular to the world Z axis.  Its Z coordinate sets&lt;br /&gt;
    its height, and the X and Y coordinates are only relevant&lt;br /&gt;
    to the position of the &amp;amp;quot;hot point&amp;amp;quot; used in selecting the&lt;br /&gt;
    object in the editor.  Custom objects have points, edges&lt;br /&gt;
    and triangles associated with them.  The size fields are&lt;br /&gt;
    relevant only for drawing the object axes in the editor.&lt;br /&gt;
    Shape number 3 is used internally for triangles of custom&lt;br /&gt;
    objects, and should never appear in a data file.&lt;br /&gt;
&lt;br /&gt;
POSI - size 12&lt;br /&gt;
&lt;br /&gt;
    VECTOR  Position;       ; the object&amp;#039;s position.&lt;br /&gt;
&lt;br /&gt;
    Legal coordinates are in the range -32768 to 32767 and 65535/65536.&lt;br /&gt;
    Currently, the ray-tracer only sees objects in the -1024 to 1024&lt;br /&gt;
    range.  Light sources, and the camera may be placed outside that&lt;br /&gt;
    range, however.&lt;br /&gt;
&lt;br /&gt;
AXIS - size 36&lt;br /&gt;
&lt;br /&gt;
    VECTOR  XAxis;&lt;br /&gt;
    VECTOR  YAxis;&lt;br /&gt;
    VECTOR  ZAxis;&lt;br /&gt;
&lt;br /&gt;
    These are direction vectors for the object coordinate system.&lt;br /&gt;
    They must be &amp;amp;quot;orthogonal unit vectors&amp;amp;quot; - i.e. the sum of the&lt;br /&gt;
    squares of the vevtor components must equal one (or close to it),&lt;br /&gt;
    and the vectors must be perpendicular.&lt;br /&gt;
&lt;br /&gt;
SIZE - size 12&lt;br /&gt;
&lt;br /&gt;
    VECTOR  Size;&lt;br /&gt;
&lt;br /&gt;
    See SHAP chunk above.  The sizes are used in a variety of ways&lt;br /&gt;
    depending on the object shape.  For custom objects, they are&lt;br /&gt;
    the lengths of the coordinate axes drawn in the editor.  If the&lt;br /&gt;
    object has its &amp;amp;quot;Quickdraw&amp;amp;quot; flag set, the axes lengths are also&lt;br /&gt;
    used to set the size of a rectangular solid that is drawn rather&lt;br /&gt;
    than drawing all the points and edges.&lt;br /&gt;
&lt;br /&gt;
PNTS - size 2 + 12 * point count&lt;br /&gt;
&lt;br /&gt;
    UWORD   PCount;         ; point count&lt;br /&gt;
    VECTOR  Points[];       ; points&lt;br /&gt;
&lt;br /&gt;
    This chunk has all the points for custom objects.  The are&lt;br /&gt;
    refered to by thier position in the array.&lt;br /&gt;
&lt;br /&gt;
EDGE - size 4 + 4 * edge cout&lt;br /&gt;
&lt;br /&gt;
    UWORD   ECount;         ; edge count&lt;br /&gt;
    UWORD   Edges[][2];     ; edges&lt;br /&gt;
&lt;br /&gt;
    This chunk contins the edge list for custom objects.&lt;br /&gt;
    The Edges[][2] array is pairs of point numbers that&lt;br /&gt;
    are connected by the edges.  Edges are refered to by thier&lt;br /&gt;
    position in the Edges[] array.&lt;br /&gt;
&lt;br /&gt;
FACE - size 2 + 6 * face count&lt;br /&gt;
&lt;br /&gt;
    UWORD   TCount;         ; face count&lt;br /&gt;
    UWORD   Connects[][3];  ; faces&lt;br /&gt;
&lt;br /&gt;
    This chunk contains the triangle (face) list for custom objects.&lt;br /&gt;
    The Connects[][3] array is triples of edge numbers that are&lt;br /&gt;
    connected by triangles.&lt;br /&gt;
&lt;br /&gt;
PTHD - size 2 + 6 * axis count - Imagine only&lt;br /&gt;
&lt;br /&gt;
    UWORD   ACount;         ; axis count&lt;br /&gt;
    TFORM   PData[][3];     ; axis data&lt;br /&gt;
&lt;br /&gt;
    This chunk contains the axis data for Imagine &amp;amp;quot;path&amp;amp;quot; objects.&lt;br /&gt;
    The PData array contains a TFORM structure for each point along&lt;br /&gt;
    the path.  The &amp;amp;quot;Y size&amp;amp;quot; item for the last point on the path tells&lt;br /&gt;
    whether the path is closed or not.  Zero means closed, non-zero&lt;br /&gt;
    means open.  Otherwise the Y size field is the distance along&lt;br /&gt;
    the path to the next path point/axis.&lt;br /&gt;
&lt;br /&gt;
COLR - size 4&lt;br /&gt;
REFL - size 4&lt;br /&gt;
TRAN - size 4&lt;br /&gt;
SPC1 - size 4 - Imagine only&lt;br /&gt;
&lt;br /&gt;
    BYTE    pad;            ; pad byte - must be zero&lt;br /&gt;
    COLOR   col;            ; RGB color&lt;br /&gt;
&lt;br /&gt;
    These are the main object RGB color, and reflection, transmission&lt;br /&gt;
    and specularity coefficients.&lt;br /&gt;
&lt;br /&gt;
CLST - size 2 + 3 * count&lt;br /&gt;
RLST - size 2 + 3 * count&lt;br /&gt;
TLST - size 2 + 3 * count&lt;br /&gt;
&lt;br /&gt;
    UWORD   count;          ; count of colors&lt;br /&gt;
    COLOR   colors[];       ; colors&lt;br /&gt;
&lt;br /&gt;
    These are the color, reflection and transmission coefficients&lt;br /&gt;
    for each face in custom objects. The count should match the&lt;br /&gt;
    face count in the FACE chunk. The ordering corresponds to the&lt;br /&gt;
    face order.&lt;br /&gt;
&lt;br /&gt;
TPAR - size 64 - not written by Imagine - see TXT1 below&lt;br /&gt;
&lt;br /&gt;
    FRACT   Params[16];     ; texture parameters&lt;br /&gt;
&lt;br /&gt;
    This is the list of parameters for texture modules when&lt;br /&gt;
    texture mapping is used.&lt;br /&gt;
&lt;br /&gt;
TXT1 - variable size - Imagine only&lt;br /&gt;
&lt;br /&gt;
    This chunk contains texture data when texture mapping is used.&lt;br /&gt;
&lt;br /&gt;
    UWORD   Flags;          ; texture flags:&lt;br /&gt;
                            ;    1 - TXTR_CHILDREN - apply to child objs&lt;br /&gt;
    TFORM   TForm;          ; local coordinates of texture axes.&lt;br /&gt;
    FRACT   Params[16];     ; texture parameters&lt;br /&gt;
    UBYTE   PFlags[16];     ; parameter flags (currently unused)&lt;br /&gt;
    UBYTE   Length;         ; length of texture file name&lt;br /&gt;
    UBYTE   Name[Length];   ; texture file name (not NULL terminated)&lt;br /&gt;
    UBYTE   pad;            ; (if necessary to make an even length)&lt;br /&gt;
&lt;br /&gt;
BRS1 - variable size - Imagine only (version 1.0)&lt;br /&gt;
BRS2 - variable size - Imagine only (version 1.1)&lt;br /&gt;
&lt;br /&gt;
    UWORD   Flags;          ; brush type:&lt;br /&gt;
                            ;    0 - Color&lt;br /&gt;
                            ;    1 - Reflection&lt;br /&gt;
                            ;    2 - Filter&lt;br /&gt;
                            ;    3 - Altitude&lt;br /&gt;
    UWORD   WFlags;         ; brush wrapping flags:&lt;br /&gt;
                            ;    1   WRAP_X        - wrap type&lt;br /&gt;
                            ;    2   WRAP_Z        - wrap type&lt;br /&gt;
                            ;    4   WRAP_CHILDREN - apply to children&lt;br /&gt;
                            ;    8   WRAP_REPEAT   - repeating brush&lt;br /&gt;
                            ;    16  WRAP_FLIP     - flip with repeats&lt;br /&gt;
    TFORM   TForm;          ; local coordinates of brush axes.&lt;br /&gt;
    (UWORD   FullScale;)    ; full scale value&lt;br /&gt;
    (UWORD   MaxSeq;)       ; highest number for sequenced brushes&lt;br /&gt;
    UBYTE   Length;         ; length of brush file name&lt;br /&gt;
    UBYTE   Name[Length];   ; brush file name (not NULL terminated)&lt;br /&gt;
    UBYTE   pad;            ; (if necessary to make an even length)&lt;br /&gt;
&lt;br /&gt;
    The FullScale and MaxSeq items are in BRS2 chunks only.&lt;br /&gt;
&lt;br /&gt;
SURF - size 5 - not written by Imagine&lt;br /&gt;
&lt;br /&gt;
    BYTE    SProps[5];      ; object properties&lt;br /&gt;
&lt;br /&gt;
    This chunk contains object (surface) properties used&lt;br /&gt;
    by Turbo Silver.&lt;br /&gt;
&lt;br /&gt;
    SProps[0] - PRP_SURFACE ; surface type&lt;br /&gt;
                            ;   0 - normal&lt;br /&gt;
                            ;   4 - genlock&lt;br /&gt;
                            ;   5 - IFF brush&lt;br /&gt;
    SProps[1] - PRP_BRUSH   ; brush number (if IFF mapped)&lt;br /&gt;
    SProps[2] - PRP_WRAP    ; IFF brush wrapping type&lt;br /&gt;
                            ;   0 - no wrapping&lt;br /&gt;
                            ;   1 - wrap X&lt;br /&gt;
                            ;   2 - wrap Z&lt;br /&gt;
                            ;   3 - wrap X and Z&lt;br /&gt;
    SProps[3] - PRP_STENCIL ; stencil number for stencil objects&lt;br /&gt;
    SProps[4] - PRP_TEXTURE ; texture number if texture mapped&lt;br /&gt;
&lt;br /&gt;
MTTR - size 2 - not written by Imagine - see PRP1 chunk.&lt;br /&gt;
&lt;br /&gt;
    UBYTE   Type;           ; refraction type (0-4)&lt;br /&gt;
    UBYTE   Index;          ; custom index of refraction&lt;br /&gt;
&lt;br /&gt;
    This chunk contains refraction data for transparent or&lt;br /&gt;
    glossy objects.  If the refraction type is 4, the object&lt;br /&gt;
    has a &amp;amp;quot;custom&amp;amp;quot; refractive index stored in the Index field.&lt;br /&gt;
    The Index field is 100 * (true index of refraction - 1.00)&lt;br /&gt;
    -- so it must be in the range of 1.00 to 3.55.  The&lt;br /&gt;
    refraction types is 0-3 specify 0) Air - 1.00, 1) Water - 1.33,&lt;br /&gt;
    2) Glass - 1.67 or 3) Crystal 2.00.&lt;br /&gt;
&lt;br /&gt;
SPEC - size 2 - not written by Imagine - see SPC1 above.&lt;br /&gt;
&lt;br /&gt;
    UBYTE   Specularity;    ; range of 0-255&lt;br /&gt;
    UBYTE   Hardness;       ; specular exponent (0-31)&lt;br /&gt;
&lt;br /&gt;
    This chunk contains specular information.  The Specularity&lt;br /&gt;
    field is the amount of specular reflection -- 0 is none,&lt;br /&gt;
    255 is fully specular.  The &amp;amp;quot;specular exponent&amp;amp;quot; controls&lt;br /&gt;
    the &amp;amp;quot;tightness&amp;amp;quot; of the specular spots.  A value of zero&lt;br /&gt;
    gives broad specular spots and a value of 31 gives smaller&lt;br /&gt;
    spots.&lt;br /&gt;
&lt;br /&gt;
PRP0 - size 6 - not written by Imagine&lt;br /&gt;
&lt;br /&gt;
    UBYTE   Props[6];       ; more object properties&lt;br /&gt;
&lt;br /&gt;
    This chunk contains object properties that programs other&lt;br /&gt;
    than Turbo Silver might support.&lt;br /&gt;
&lt;br /&gt;
    Props[0] - PRP_BLEND    ; blending factor (0-255)&lt;br /&gt;
    Props[1] - PRP_SMOOTH   ; roughness factor&lt;br /&gt;
    Props[2] - PRP_SHADE    ; shading on/off flag&lt;br /&gt;
    Props[3] - PRP_PHONG    ; phong shading on/off flag&lt;br /&gt;
    Props[4] - PRP_GLOSSY   ; glossy on/off flag&lt;br /&gt;
    Props[5] - PRP_QUICK    ; Quickdraw on/off flag&lt;br /&gt;
&lt;br /&gt;
    The blending factor controls the amount of dithering used&lt;br /&gt;
    on the object - 255 is fully dithered.  &lt;br /&gt;
    The roughness factor controls how rough the object should&lt;br /&gt;
    appear - 0 is smooth, 255 is max roughness.&lt;br /&gt;
    The shading flag is interpreted differently depending on&lt;br /&gt;
    whether the object is a light source or not.  For light&lt;br /&gt;
    sources, it sets the light to cast shadows or not.  For&lt;br /&gt;
    normal objects, if the flag is set, the object is always&lt;br /&gt;
    considered as fully lit - i.e. it&amp;#039;s color is read directly&lt;br /&gt;
    from the object (or IFF brush), and is not affected by light&lt;br /&gt;
    sources.&lt;br /&gt;
    The phong shading is on by default - a non-zero value turns&lt;br /&gt;
    it off.&lt;br /&gt;
    The glossy flag sets the object to be glossy or not.  If&lt;br /&gt;
    the object is glossy, the &amp;amp;quot;transmit&amp;amp;quot; colors and the index&lt;br /&gt;
    of refraction control the amount of &amp;amp;quot;sheen&amp;amp;quot;.  The glossy&lt;br /&gt;
    feature is meant to simulate something like a wax coating&lt;br /&gt;
    on the object with the specified index of refraction. The&lt;br /&gt;
    trasmission coefficients control how much light from the&lt;br /&gt;
    object makes it through the wax coating.&lt;br /&gt;
    The Quickdraw flag, if set, tells the editor not to draw&lt;br /&gt;
    all the points and edges for the object, but to draw a&lt;br /&gt;
    rectanglular solid centered at the object position, and&lt;br /&gt;
    with sizes detemined by the axis lengths.&lt;br /&gt;
&lt;br /&gt;
PRP1 - size 8 - Imagine only&lt;br /&gt;
&lt;br /&gt;
    UBYTE   IProps[8];       ; more object properties&lt;br /&gt;
&lt;br /&gt;
    This chunk contains object properties that programs other&lt;br /&gt;
    than Imagine might support.&lt;br /&gt;
&lt;br /&gt;
    IProps[0] - IPRP_DITHER   ; blending factor (0-255)&lt;br /&gt;
    IProps[1] - IPRP_HARD     ; hardness factor (0-255)&lt;br /&gt;
    IProps[2] - IPRP_ROUGH    ; roughness factor (0-255)&lt;br /&gt;
    IProps[3] - IPRP_SHINY    ; shinyness factor (0-255)&lt;br /&gt;
    IProps[4] - IPRP_INDEX    ; index of refraction&lt;br /&gt;
    IProps[5] - IPRP_QUICK    ; flag - Quickdraw on/off&lt;br /&gt;
    IProps[6] - IPRP_PHONG    ; flag - Phong shading on/off&lt;br /&gt;
    IProps[7] - IPRP_GENLOCK  ; flag - Genlock on/off&lt;br /&gt;
&lt;br /&gt;
    The blending factor controls the amount of dithering used&lt;br /&gt;
    on the object - 255 is fully dithered.  &lt;br /&gt;
    The hardness factor controls how tight the specular spot&lt;br /&gt;
    should be - 0 is a big soft spot, 255 is a tight hot spot&lt;br /&gt;
    The roughness factor controls how rough the object should&lt;br /&gt;
    appear - 0 is smooth, 255 is max roughness.&lt;br /&gt;
    The shiny factor in interaction with the object&amp;#039;s filter&lt;br /&gt;
    values controls how shiny the object appears.  Setting it&lt;br /&gt;
    to anything but zero forces the object to be non-transparent&lt;br /&gt;
    since then the filter values are used in the shiny (reflection)&lt;br /&gt;
    calculations.  A value of 255 means maximum shinyness.&lt;br /&gt;
&lt;br /&gt;
INTS - size 4 - not written by Imagine&lt;br /&gt;
&lt;br /&gt;
    FRACT   Intensity;      ; light intensity&lt;br /&gt;
&lt;br /&gt;
    This is the intensity field for light source objects.&lt;br /&gt;
    an intensity of 255 for a sun-like light fully lights&lt;br /&gt;
    object surfaces which are perpendicular to the direction&lt;br /&gt;
    to the light source.  For lamp-like light sources, the&lt;br /&gt;
    necessary intensity will depend on the distance to the light.&lt;br /&gt;
&lt;br /&gt;
INT1 - size 12 - Imagine only&lt;br /&gt;
&lt;br /&gt;
    VECTOR  Intensity;      ; light intensity&lt;br /&gt;
&lt;br /&gt;
    This is like INTS above, but has seperate R, G &amp;amp;amp; B intensities.&lt;br /&gt;
&lt;br /&gt;
STRY - size 56 - not written by Imagine&lt;br /&gt;
&lt;br /&gt;
    STORY   story;          ; a story structure for the object.&lt;br /&gt;
&lt;br /&gt;
    The story structure is described above.&lt;br /&gt;
&lt;br /&gt;
ANID - size 64 - Imagine only&lt;br /&gt;
&lt;br /&gt;
    LONG    Cellno;         ; cell number&lt;br /&gt;
    TFORM   TForm;          ; object position/axes/size in that cell.&lt;br /&gt;
&lt;br /&gt;
    For Imagine&amp;#039;s &amp;amp;quot;Cycle&amp;amp;quot; objects, within EACH DESC chunk in the&lt;br /&gt;
    file - that is, for each object of the group, there will be&lt;br /&gt;
    a series of ANID chunks.  The cell number sequences of each&lt;br /&gt;
    part of the must agree with the sequence for the head object,&lt;br /&gt;
    and the first cell number must be zero.&lt;br /&gt;
&lt;br /&gt;
FORD - size 56 + 12 * PC - Imagine only&lt;br /&gt;
&lt;br /&gt;
    WORD    NumC;           ; number of cross section points&lt;br /&gt;
    WORD    NumF;           ; number of slices&lt;br /&gt;
    WORD    Flags;          ; orientation flag&lt;br /&gt;
    WORD    pad;            ; reserved&lt;br /&gt;
    MATRIX  TForm;          ; object rotation/scaling transformation&lt;br /&gt;
    VECTOR  Shift;          ; object translation&lt;br /&gt;
    VECTOR  Points[PC];     ; &amp;amp;quot;Forms&amp;amp;quot; editor points&lt;br /&gt;
&lt;br /&gt;
    For Imagine&amp;#039;s &amp;amp;quot;Forms&amp;amp;quot; objects, the &amp;amp;quot;PNTS&amp;amp;quot; chunk above is not&lt;br /&gt;
    written out, but this structure is written instead.  The point&lt;br /&gt;
    count is PC = NumC + 4 * NumF.  The object&amp;#039;s real points are&lt;br /&gt;
    then calculated from these using a proprietary algorithm.&lt;br /&gt;
    The tranformation parameters above allow the axes of the&lt;br /&gt;
    real object be moved around relative to the &amp;amp;quot;Forms&amp;amp;quot; points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DESC notes&lt;br /&gt;
----------&lt;br /&gt;
&lt;br /&gt;
Again, most of these fields are optional, and defaults are supplied.&lt;br /&gt;
However, if there is a FACE chunk, there must also be a CLST chunk,&lt;br /&gt;
an RLST chunk and a TLST chunk -- all with matching &amp;amp;quot;count&amp;amp;quot; fields.&lt;br /&gt;
The SHAP chunk is not optional. &lt;br /&gt;
&lt;br /&gt;
Defaults are:  Colors set to (240,240,240); reflection and&lt;br /&gt;
transmission coefficients set to zero; illegal shape; no story or&lt;br /&gt;
special surface types; position at (0,0,0); axes aligned to the&lt;br /&gt;
world axes; size fields all 32.0; intensity at 300; no name;&lt;br /&gt;
no points/edges or faces; texture parameters set to zero; refraction&lt;br /&gt;
type 0 with index 1.00; specular, hardness and roughness set to zero;&lt;br /&gt;
blending at 255; glossy off; phong shading on; not a light source;&lt;br /&gt;
not brightly lit;&lt;br /&gt;
&lt;br /&gt;
In Imagine, defaults are the same, but with colors (255,255,255).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INFO sub-chunks&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
BRSH - size 82&lt;br /&gt;
&lt;br /&gt;
    WORD    Number;        ; Brush number (between 0 and 7)&lt;br /&gt;
    CHAR    Filename[80];  ; IFF ILBM filename&lt;br /&gt;
&lt;br /&gt;
    There may be more than one of these.&lt;br /&gt;
&lt;br /&gt;
STNC - size 82&lt;br /&gt;
&lt;br /&gt;
    Same format as BRSH chunk.&lt;br /&gt;
&lt;br /&gt;
TXTR - size 82&lt;br /&gt;
&lt;br /&gt;
    Same format as BRSH chunk.  The Filename field is the name of&lt;br /&gt;
    a code module that can be loaded with LoadSeg().&lt;br /&gt;
&lt;br /&gt;
OBSV - size 28&lt;br /&gt;
&lt;br /&gt;
    VECTOR  Camera;         ; Camera position&lt;br /&gt;
    VECTOR  Rotate;         ; Camera rotation angles&lt;br /&gt;
    FRACT   Focal;          ; Camera focal length&lt;br /&gt;
&lt;br /&gt;
    This tells where the camera is, how it is aimed, and its&lt;br /&gt;
    focal length.  The rotation angles are in degrees, and specify&lt;br /&gt;
    rotations around the X, Y, and Z axes.  The camera looks down&lt;br /&gt;
    its own Y axis, with the top of the picture in the direction of&lt;br /&gt;
    the Z axis.  If the rotation angles are all zero, its axes&lt;br /&gt;
    are aligned with the world coordinate axes.  The rotations are&lt;br /&gt;
    performed in the order ZXY about the camera axes.  A positive&lt;br /&gt;
    angle rotates Y toward Z, Z toward X, and X toward Y for&lt;br /&gt;
    rotations about the X, Y, and Z axes respectively.  To&lt;br /&gt;
    understand the focal length, imagine a 320 x 200 pixel&lt;br /&gt;
    rectangle perpendicular to, and centered on the camera&amp;#039;s&lt;br /&gt;
    Y axis.  Any objects in the infinite rectangular cone defined&lt;br /&gt;
    by the camera position and the 4 corners of the rectangle will&lt;br /&gt;
    appear in the picture.&lt;br /&gt;
&lt;br /&gt;
OTRK - size 18&lt;br /&gt;
&lt;br /&gt;
    BYTE    Trackname[18];&lt;br /&gt;
&lt;br /&gt;
    This chunk specifies the name of an object that the camera&lt;br /&gt;
    is &amp;amp;quot;tracked&amp;amp;quot; to.  If the name is NULL, the camera doesn&amp;#039;t&lt;br /&gt;
    track.  Otherwise, if the object is moved inside Turbo Silver,&lt;br /&gt;
    the camera will follow it.&lt;br /&gt;
&lt;br /&gt;
OSTR - size 56&lt;br /&gt;
&lt;br /&gt;
    STORY   CStory;         ; a STORY structure for the camera&lt;br /&gt;
&lt;br /&gt;
    The story structure is defined above.&lt;br /&gt;
&lt;br /&gt;
FADE - size 12&lt;br /&gt;
&lt;br /&gt;
    FRACT   FadeAt;         ; distance to start fade&lt;br /&gt;
    FRACT   FadeBy;         ; distance of total fade&lt;br /&gt;
    BYTE    pad;            ; pad byte - must be zero&lt;br /&gt;
    COLOR   FadeTo;         ; RGB color to fade to&lt;br /&gt;
&lt;br /&gt;
SKYC - size 8&lt;br /&gt;
&lt;br /&gt;
    BYTE    pad;            ; pad byte - must be zero&lt;br /&gt;
    COLOR   Horizon;        ; horizon color&lt;br /&gt;
    BYTE    pad;            ; pad byte - must be zero&lt;br /&gt;
    COLOR   Zenith;         ; zenith color&lt;br /&gt;
&lt;br /&gt;
AMBI - size 4&lt;br /&gt;
&lt;br /&gt;
    BYTE    pad;            ; pad byte - must be zero&lt;br /&gt;
    COLOR   Ambient;        ; abmient light color&lt;br /&gt;
&lt;br /&gt;
GLB0 - size 8&lt;br /&gt;
&lt;br /&gt;
    BYTE    Props[8];       ; an array of 8 &amp;amp;quot;global properties&amp;amp;quot; used&lt;br /&gt;
                            ; by Turbo Silver.&lt;br /&gt;
&lt;br /&gt;
    Props[0] - GLB_EDGING       ; edge level (globals requester)&lt;br /&gt;
    Props[1] - GLB_PERTURB      ; perturbance (globals requester)&lt;br /&gt;
    Props[2] - GLB_SKY_BLEND    ; sky blending factor (0-255)&lt;br /&gt;
    Props[3] - GLB_LENS         ; lens type (see below)&lt;br /&gt;
    Props[4] - GLB_FADE         ; flag - Sharp/Fuzzy focus (globals)&lt;br /&gt;
    Props[5] - GLB_SIZE         ; &amp;amp;quot;apparant size&amp;amp;quot; (see below)&lt;br /&gt;
    Props[6] - GLB_RESOLVE      ; resolve depth (globals requester)&lt;br /&gt;
    Props[7] - GLB_EXTRA        ; flag - genlock sky on/off&lt;br /&gt;
&lt;br /&gt;
    The edging and perturbance values control the heuristics in&lt;br /&gt;
    ray tracing.  The sky blending factor is zero for no blending,&lt;br /&gt;
    and 255 for full blending.  The lens type is a number from 0&lt;br /&gt;
    4, corresponding to the boxes in the &amp;amp;quot;camera&amp;amp;quot; requester, and&lt;br /&gt;
    correspond to 0) Manual, 1) Wide angle, 2) Normal, 3) Telephoto,&lt;br /&gt;
    and 4) Custom.  It is used in setting the camera&amp;#039;s focal length&lt;br /&gt;
    if the camera is tracked to an object.  The Sharp/Fuzzy flag&lt;br /&gt;
    turns the &amp;amp;quot;fade&amp;amp;quot; feature on and off - non-zero means on.&lt;br /&gt;
    The &amp;amp;quot;apparant size&amp;amp;quot; parameter is 100 times the &amp;amp;quot;custom size&amp;amp;quot;&lt;br /&gt;
    parameter in the camera requester.  And is used to set the&lt;br /&gt;
    focal length for a custom lens.  The &amp;amp;quot;resolve depth&amp;amp;quot; controls&lt;br /&gt;
    the number of rays the ray tracer will shoot for a single pixel.&lt;br /&gt;
    Each reflective/refractive ray increments the depth counter, and&lt;br /&gt;
    the count is never allowed to reach the &amp;amp;quot;resolve depth&amp;amp;quot;.  If both&lt;br /&gt;
    a reflective and a refractive ray are traced, each ray gets its&lt;br /&gt;
    own version of the count - so theoretically, a resolve depth of&lt;br /&gt;
    4 could allow much more than 4 rays to be traced.  The &amp;amp;quot;genlock&lt;br /&gt;
    sky&amp;amp;quot; flag controls whether the sky will be colored, or set to&lt;br /&gt;
    the genlock color (color 0 - black) in the final picture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All of the INFO sub-chunks are optional, as is the INFO chunk.&lt;br /&gt;
Default values are supplied if the chunks are not present.  The&lt;br /&gt;
defaults are:  no brushes, stencils, or textures defined; no story&lt;br /&gt;
for the camera; horizon and zenith and ambient light colors set&lt;br /&gt;
to black; fade color set to (80,80,80);  un-rotated, un-tracked&lt;br /&gt;
camera at (-100, -100, 100); and global properties array set to&lt;br /&gt;
[30, 0, 0, 0, 0, 100, 8, 0].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EXTR sub-sub-chunks&lt;br /&gt;
-------------------&lt;br /&gt;
&lt;br /&gt;
MTRX - size 60&lt;br /&gt;
&lt;br /&gt;
    VECTOR  Translate;      ; translation vector&lt;br /&gt;
    VECTOR  Scale;          ; X,Y and Z scaling factors&lt;br /&gt;
    MATRIX  Rotate;         ; rotation matrix&lt;br /&gt;
&lt;br /&gt;
    The translation vector is i world coordinates.&lt;br /&gt;
    The scaling factors are with respect to local axes.&lt;br /&gt;
    The rotation matrix is with respect to the world axes,&lt;br /&gt;
    and it should be a &amp;amp;quot;unit matrix&amp;amp;quot;.&lt;br /&gt;
    The rotation is such that a rotated axis&amp;#039;s X,Y, and Z&lt;br /&gt;
    components are the dot products of the MATRIX&amp;#039;s I,J,&lt;br /&gt;
    and K vectors with the un-rotated axis vector.&lt;br /&gt;
&lt;br /&gt;
LOAD - size 80&lt;br /&gt;
&lt;br /&gt;
    BYTE    Filename[80];   ; the name of the external file&lt;br /&gt;
&lt;br /&gt;
    This chunk contains the name of an external object file.&lt;br /&gt;
    The external file should be a FORM TDDD file.  It may contain&lt;br /&gt;
    an any number of objects possibly grouped into heirarchy(ies).&lt;br /&gt;
&lt;br /&gt;
Both of these chunks are required.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Steven Solie</name></author>
	</entry>
</feed>