Copyright (c) Hyperion Entertainment and contributors.
OB3D IFF 3-D Object Format: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
Steven Solie (talk | contribs) Created page with "= OB3D = </pre> FORM OB3D (revision 1) ------------------------ by Roberto Speranz..." |
Steven Solie (talk | contribs) No edit summary |
||
| Line 1: | Line 1: | ||
= OB3D = |
= OB3D = |
||
< |
<pre> |
||
FORM OB3D (revision 1) |
FORM OB3D (revision 1) |
||
------------------------ |
------------------------ |
||
| Line 30: | Line 30: | ||
to the PREF chunk that are designed to inform the reader software of |
to the PREF chunk that are designed to inform the reader software of |
||
the precision of floats used in the file |
the precision of floats used in the file |
||
- the addition of a MACR chunk for |
- the addition of a MACR chunk for storing ASCII macros such as AREXX |
||
macros or scripts |
macros or scripts |
||
Latest revision as of 16:29, 2 May 2014
OB3D
FORM OB3D (revision 1)
------------------------
by
Roberto Speranza
This is a modified specification of the OB3D FORM, proposed a few
weeks ago. Much concern was raised about the earlier FORM's inflexibility.
I have tried to address that here by adding flexibility to the majority of
the chunks by making them tag-based.
This will define what I consider to be the bare minimum I require of
this FORM for my own program plus anything I can think of to accomodate other
programs I am aware of as well suggestions posed by others. Additional chunks
or additional tags for chunks currently defined in this proposal will have
to be discussed as soon as possible after this posting. I want this minimum
definition approved so that I can begin the task of re-writing my reader/writer
software to handle all of this. To add the flexibility requested, the reader
software has to increase in complexity somewhat. Here are a few
highlights of the revised FORM:
- almost all chunks are tag-based
- SPLN chunk updated to handle NURBs (non-uniform rational B-Splines)
- SURF and NURB chunk merged with a new chunk, PRIM, which will contain
ALL primitives; polygons, bicubic surfaces, NURB surfaces, and other
primitives such as spheres, cones, etc.
- precision concerns have been eliminated by the addition of variables
to the PREF chunk that are designed to inform the reader software of
the precision of floats used in the file
- the addition of a MACR chunk for storing ASCII macros such as AREXX
macros or scripts
The following is a list of chunks and their descriptions followed by
a detailed description of all the tags currently defined.
-----------------------------------------------------------------------------
FORM
struct FORMstruct
{
ULONG ID;
ULONG Size;
}
OB3D
PREF (optional)
struct PREFstruct
{
ULONG Id;
ULONG Size;
UWORD preflines;
ULONG prefsize;
UB�TE Prefs[prefsize];
UB�TE pad; /* to make chunk even length, if necessary */
}
The character array Prefs consists of lines of ASCII text terminated by
newlines (\n). The NumLines field tells you how many lines in case you want
to read it in a line at a time.
Each line takes the following form:
variable=value(s) (more than one value will be separated by spaces)
This type of preferences layout was selected for generality and easy
expansion. This will also allow for program preferences to be stored in IFF form.
If this chunk is present, it will contain preferences for the reader code
as well as any program preferences. Here are some variables to start us off:
Variable Suggested Value(s)
-------- ------------------
TIMEUNITS FRAMES or SECONDS depending on application
FRAMERATE 60
TIMEFLOAT IEEESINGLE (32 bit)
CHARSTRING ( length (UWORD) + length characters )
(not null terminated)
ULONGINT (32 bit)
TIMEBASE 1 (number to divide TIMEFLOAT by to get value in TIMEUNITS)
(primarily for specifying how to convert ULONGINTS to
a floating point quantity if desired)
STARTFRAME 1 (or whatever)
ATTFLOAT IEEESINGLE (32 bit)
CHARSTRING ( length (UWORD) + length characters )
(not null terminated)
UB�TE ( 8 bit)
UWORDINT (16 bit)
ULONGINT (32 bit)
ATTBASE 1 (number to divide ATTFLOAT by to get value in TIMEUNITS)
(primarily for specifying how to convert non-floating
point quantities to a floating point quantity if desired)
FLOAT IEEESINGLE (32 bit)
CHARSTRING ( length (UWORD) + length characters )
(not null terminated)
COORFLOAT IEEESINGLE (32 bit)
IEEEDOUBLE (64 bit)
IEEEEXTENDED (96 bit)
This is supported by the
MC6888x FPUs. Manx's m.lib
supports this format as a
long double.
CHARSTRING ( length (UWORD) + length characters )
(not null terminated)
ANGLEUNITS DEGREES
RADIANS
DISTANCEUNITS MILLIMETRES
CENTIMETRES
METRES
KILOMETRES
INCHES
FEET
�ARDS
MILES
-----------------------------------------------------------------------------
MACR (optional)
struct MACRstruct
{
ULONG Id;
ULONG Size;
ULONG NumMacros;
struct
{
UWORD namelen; /* length of name */
UB�TE name[namelen]; /* name of macro */
ULONG macsize;
UWORD maclines;
UB�TE Macro[macsize];
} [NumMacros]
UB�TE pad; /* to make chunk even length, if necessary */
}
The character array Macro consists of lines of ASCII text
terminated by newlines (\n). The field maclines tells you how many lines
of text are in the macro in case you want to read it one line at a time.
-----------------------------------------------------------------------------
SBAS (optional)
struct SBASstruct
{
ULONG ID;
ULONG Size;
ULONG NumSBASes;
struct
{
UWORD basisnum; /* basis number */
UWORD step; /* point step */
COORFLOAT Basis[4][4]; /* basis matrix */
} [NumSBASes];
UB�TE pad; /* to make chunk even length, if necessary */
}
This chunk is only required if bicubic surfaces or splines are stored in
the file. This chunk defines the basis matrix to convert the
control points of the spline to coefficients for the cubic equation that
describes the spline. The step parameter dictates how to apply the
basis matrix to splines which use more than 4 control points but are
still cubic in nature (like more than one linked up together).
I believe three basis numbers should be reserved for these common
splines:
Number Spline Type
------ -----------
0 Bezier spline
1 Uniform non-rational B-spline
2 Catmull-Rom spline
I selected these spline types because they are the most common
ones used in modellers and CAD packages. Any other type can be
defined at will, allowing for custom splines.
-----------------------------------------------------------------------------
TRGB (optional)
struct TRGBstruct
{
ULONG ID;
ULONG Size;
ULONG NumTRGBs;
struct
{
UWORD NumColours; /* number of components in colour model */
FLOAT ToRGB[NumColours][3]; /* transformation matrix */
} [NumTRGBs];
UB�TE pad; /* to make chunk even length, if necessary */
}
This chunk is optional if all colour data is specified using the RGB colour
model. The transformation matrix for RGB colour data is simply a 3X3 identity
matrix.
For any other colour model, this chunk should be present in order to specify
the number of components used for colours as well as the transformation matrix
used to multiply the colours in the file to RGB. This should suffice for most
colour models.
example:
[t00 t01 ... t0n][c0] = [R]
|t10 t11 ... t1n||c1| |G|
[t20 t21 ... t2n]|..| [B]
[..]
[cn]
-----------------------------------------------------------------------------
VERT (optional only when HIER chunk is present else not included)
struct VERTstruct
{
ULONG Id;
ULONG Size;
ULONG NumVERTs;
struct
{
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumVERTs];
UB�TE pad; /* to make chunk even length, if necessary */
}
The VERT chunk stores all vertex information. This structure is
now tag-based to allow for future expansion and flexibility. The
following tags are applicable to the VERT chunk:
OB3D_Parent
OB3D_Clone
OB3D_RelSurf
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
OB3D_Script
VERT_Position
VERT_Velocity
-----------------------------------------------------------------------------
EDGE (optional; if VERT chunk is missing, it is not included)
struct EDGEstruct
{
ULONG ID;
ULONG Size;
ULONG NumEDGEs;
struct
{
ULONG points[2]; /* index to two points of edge */
ULONG numtags; /* hook for future tags */
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumEDGEs]
UB�TE pad; /* to make chunk even length, if necessary */
}
The EDGE chunk stores all edges for programs that use a wireframe
representation in their editors or renderers. Programs that do not
require edges do not need to store this chunk in their files. This
will force programs who require edges to reconstruct the edges or
represent the objects with a bounding box. The tags that are
applicable to this chunk are:
none at this time
-----------------------------------------------------------------------------
SPLN (optional; if VERT chunk is missing, it is not included)
struct SPLNstruct
{
ULONG ID;
ULONG Size;
ULONG NumSPLNs;
struct
{
ULONG numpts; /* number of points */
ULONG points[numpts]; /* control pts indices */
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumSPLNs]
UB�TE pad; /* to make chunk even length, if necessary */
}
The SPLN chunk is used to store any spline information. By using various
tags, any cubic spline or NURB (non-uniform rational B-spline) can
be stored. The following is a list of tags that can be used for the SPLN
chunk:
SPLN_Basis
SPLN_NURB_Order
SPLN_TrimSurf
SPLN_NURBKnots
SPLN_NURBWeights
NOTE: (for cubic splines only)
numpts=4+n*basisstep
where n = any integer from 0 to infinity
bassistep = the step value of the basis matrix
used for the spline
-----------------------------------------------------------------------------
PRIM (optional unless HIER and VERT chunk are missing because it is not included)
struct PRIMstruct
{
ULONG ID;
ULONG Size;
ULONG NumPRIMs;
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [NumPRIMs];
UB�TE pad; /* to make chunk even length, if necessary */
}
Bicubic surfaces have played a very important role of late in CAD and
commercial graphics. Applications on the Amiga are now starting to model
objects using bicubic surfaces making this chunk a necessity.
The importance of the NURB (non-uniform rational B-Spline) has come
about due to the need to represent conics and quadrics accurately
using parametric surfaces. Bicubic surfaces can only approximate these
surfaces but NURB surfaces can represent them exactly and enjoy the
flexibility of B-splines as well.
By using various tags, this chunk can store any primitive including
bicubic surfaces, NURB surfaces or polygons.
This chunk will be used to specify primitive objects. It is
tag-based, allowing for expansion as different primitives are supported in
the future. The following tags are applicable to this chunk:
OB3D_Parent
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
OB3D_Script
PRIM_Points
PRIM_PolySmoothing
PRIM_SurfBasis
PRIM_NURBOrder
PRIM_Contours
PRIM_NURBKnots
PRIM_NURBWeights
PRIM_TextureSpace
PRIM_RectangularSolid
PRIM_Ellipsoid
PRIM_Prism
PRIM_SurfaceRevolution
PRIM_SemiInfiniteSpace
PRIM_RiSphere
PRIM_RiCone
PRIM_RiDisk
PRIM_RiCylinder
PRIM_Hyperboloid
PRIM_RiParaboloid
PRIM_RiTorus
-----------------------------------------------------------------------------
HIER (optional; excluded if file is missing both VERT and LAMP chunks)
struct HIERstruct
{
ULONG ID;
ULONG Size;
ULONG NumHiers; /* Number of Hierarchies in chunk */
struct
{
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumHiers];
UB�TE pad; /* to make chunk even length, if necessary */
}
The Hierarchy chunk is used to describe the relationships between objects,
paths and lamps. The following tags are applicable to this chunk:
OB3D_Name
OB3D_Parent
OB3D_Clone
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
OB3D_Texture
OB3D_Script
HIER_Type
HIER_CustomTypeName
HIER_HierStatus
HIER_BoundingBox
HIER_LampType
HIER_Size
HIER_Shear
HIER_LocalOrigin
HIER_Velocity
HIER_Axes
HIER_�PRAngles
HIER_X�ZAngles
HIER_Translate
HIER_Rel�PRAngles
HIER_RelX�ZAngles
-----------------------------------------------------------------------------
ATTR (optional if TXTR is not present)
struct ATTRstruct
{
ULONG ID;
ULONG size;
ULONG NumATTRs;
struct
{
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize]
} [numtags]
} [NumATTRs]
UB�TE pad; /* to make chunk even length, if necessary */
}
The ATTR chunk stores all information about attributes. The following tags
are used for this chunk:
OB3D_Name
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
ATTR_ColourSize
ATTR_Diffuse
ATTR_Reflect
ATTR_Transmit
ATTR_Ambient
ATTR_Illumin
ATTR_Opacity
ATTR_IndexRefract
ATTR_SpecHighLight
ATTR_PhongHighLight
ATTR_HighlightColour
ATTR_LightIntensity
ATTR_LightDirection
ATTR_ConeLight
ATTR_AreaLight
ATTR_Fog
ATTR_DepthCue
ATTR_EnvironIllumin
ATTR_EnvIndexRefract
I am sure there are attributes that have been missed. Further
discussion and debate over this specification should result in the
missing attributes being defined.
-----------------------------------------------------------------------------
TXTR (optional)
struct TXTRstruct
{
ULONG ID;
ULONG Size;
ULONG NumTXTRs;
struct
{
UWORD namelen;
UB�TE name[namelen]; /* name of texture */
ULONG numtags; /* number of tags for texture */
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumTXTRs];
UB�TE pad; /* to make chunk even length, if necessary */
}
The TXTR chunk stores all information about textures. The following tags
are used for this chunk:
OB3D_Name
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
OB3D_Texture
OB3D_Script
TXTR_RenderType
TXTR_Space
TXTR_BoundingBox
TXTR_Center
TXTR_BitMap
TXTR_Checker
TXTR_Gradient
TXTR_Brick
TXTR_Wood
TXTR_Wave
TXTR_BumpMap
I have just defined some textures to start us off. I attempted to define
some common textures used by most amiga rendering programs. Further
discussion and debate over this specification should result in the
missing attributes being defined.
-----------------------------------------------------------------------------
BACK (optional)
struct BACKstruct
{
ULONG ID;
ULONG Size;
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
}
The BACK chunk is used to store all information required to describe
the background of a rendered scene. As needs expand, tags can be added
to accomodate additional information.
BACK_GroundTexture
BACK_SkyTexture
BACK_EnviroTexture
-----------------------------------------------------------------------------
OBSV (optional)
struct OBSVstruct
{
ULONG ID;
ULONG Size;
ULONG NumOBSVs;
struct
{
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumOBSVs]
}
The OBSV chunk stores all parameters necessary to describe the view.
The following tags are applicable to this chunk:
OB3D_TimeStamp
OB3D_Cycle
OB3D_Interpolation
OBSV_ObserverHierarchy
OBSV_TargetHierarchy
OBSV_Observer
OBSV_Target
OBSV_Distance
OBSV_Orientation
OBSV_Tilt
OBSV_FieldofView
OBSV_RecordingMedium
OBSV_FocalLength
OBSV_Aperture
OBSV_StopNumber
OBSV_ShutterSpeed
OBSV_Separation
-----------------------------------------------------------------------------
DISP (optional)
struct DISPstruct
{
ULONG ID;
ULONG Size;
ULONG NumDisps;
struct
{
ULONG numtags;
struct
{
ULONG tagtype;
UB�TE data[tagsize];
} [numtags]
} [NumDisps]
}
The DISP chunk is to be used to save the various displays programs use.
The tags used for this chunk are:
OBSV_Observer
OBSV_Target
OBSV_Distance
OBSV_Orientation
OBSV_Tilt
OBSV_FieldofView
OBSV_RecordingMedium
OBSV_FocalLength
OBSV_Aperture
OBSV_StopNumber
OBSV_ShutterSpeed
OBSV_Separation
DISP_WindowParms
DISP_ViewStatus
DISP_FrameRate
-----------------------------------------------------------------------------
Tags for the OB3D FORM
----------------------
Label Offset
Data Description
---- -----------
OB3D_TagBase+ (0x00000000)
OB3D_Name 0
UWORD namelen;
UB�TE name[namelen]; name of entity (not null terminated)
OB3D_Parent 1
ULONG parent; index to parent entity
OB3D_Clone 2
ULONG clone; index to clone entity
OB3D_RelSurf 3
ULONG relsurf; index to clone entity
OB3D_TimeStamp 4
TIMEFLOAT timestamp; timestamp for tags that follow
OB3D_Cycle 5
TIMEFLOAT start,
TIMEFLOAT length; start ad length of cycle
OB3D_Interpolation 6
ULONG status; interpolate parameters to next key-frame
possible status flags are:
Label Value Description
----- ----- -----------
0x00000800 reserved for interpolation
to flags not yet contemplated
0x00000010
PVSPLINE 0x00000008 spline parameters to next
key-frame using positions
and velocities
PSPLINE 0x00000004 spline parameters to
next key-frame using
positions only
LINEAR 0x00000002 linearly interpolate
parameters to next key-frame
OFF 0x00000001 turn off
OB3D_Texture 7
ULONG texture; index to entity's texture
OB3D_Script 8
UWORD namelen;
UB�TE name[namelen]; name of script
-----------------------------------------------------------------------------
VERT_TagBase+ (0x00010000)
VERT_Position 0
COORFLOAT position[3]; position of vertex at the indicated key-frame
VERT_Velocity 1
COORFLOAT velocity[3]; velocity of vertex at the indicated key-frame
-----------------------------------------------------------------------------
SPLN_TagBase+ (0x00020000)
SPLN_Basis 0
UWORD basisnum; index to basis matrix for cubic spline
SPLN_NURB_Order 1
UWORD order; order of NURB
SPLN_TrimSurf 2
ULONG trimsurf; index to surface that this spline trims
SPLN_NURBKnots 3
UWORD num;
FLOAT knots[num]; array of knot values for NURB
SPLN_NURBWeights 4
COORFLOAT
weights[numpts]; array of weights for control points
-----------------------------------------------------------------------------
PRIM_PolyTagBase+ (0x00030000)
PRIM_Points 0
ULONG numpts;
ULONG points[numpts]; array of control point indices
(for NURB and bicubic surfaces,
numpts = upts*vpts
where there are vpts rows of upts indices)
PRIM_PolySmoothing 1
UWORD smoothing; The smoothing variable describes the type
of normal smoothing to use when rendering
polygons.
The following values are valid:
0 - no smoothing
1 - Phong normal smoothing
PRIM_SurfTagBase+ (0x00031000)
PRIM_SurfBasis 5
UWORD ubasis, vbasis; basis index for u and v direction
PRIM_NURBOrder 1
UWORD uorder, vorder; order of NURB for both u and v directions
PRIM_Contours 2
UWORD ucon, vcon; contours for both u and v direction
PRIM_NURBKnots 3
UWORD unum, vnum;
FLOAT uknots[unum];
FLOAT vknots[vnum]; NURB knots for both u and v direction
PRIM_NURBWeights 4
COORFLOAT weights
[numupts*numvpts]; array of weights for control points
PRIM_TextureSpace 5
FLOAT umin, vmin,
umax, vmax; Mapping limits in texture space
PRIM_PrimTagBase+ (0x00032000)
PRIM_RectangularSolid 0
orientation/size/position determined by parent
hierarchy
PRIM_Ellipsoid 1
orientation/size/position determined by parent
hierarchy
PRIM_Prism 2
ULONG hierindex; extrusion of any contour by a specified length
index to hierarchy containing the contour and
parent hierarchy determines the size
PRIM_SurfaceRevolution 3
UWORD axis; 0 - X, 1 - �, 2 - Z
FLOAT anglerev; a contour spun around a specific axis
PRIM_SemiInfiniteSpace 4
COORFLOAT
vec1[3], vec2[3]; a plane whose normal (right hand rule)
defines the direction in which the
space extends
PRIM_RiSphere 5
COORFLOAT radius;
COORFLOAT zmin, zmax;
FLOAT thetamax; sphere primitive ala RenderMan
PRIM_RiCone 6
COORFLOAT radius;
COORFLOAT height;
FLOAT thetamax; cone primitive ala RenderMan
PRIM_RiDisk 7
COORFLOAT radius;
COORFLOAT height;
FLOAT thetamax; disk primitive ala RenderMan
PRIM_RiCylinder 8
COORFLOAT radius;
COORFLOAT zmin, zmax;
FLOAT thetamax; cylinder primitive ala RenderMan
PRIM_Hyperboloid 9
COORFLOAT point1[3],
point2[3];
FLOAT thetamax; hyperboloid primitive ala RenderMan
PRIM_RiParaboloid 10
COORFLOAT radiusmax;
COORFLOAT zmin, zmax;
FLOAT thetamax; cylinder primitive ala RenderMan
PRIM_RiTorus 11
COORFLOAT majorrad, minorrad;
COORFLOAT phimin, phimax;
FLOAT thetamax; cylinder primitive ala RenderMan
for details of the RenderMan primitives above,
consult pp. 62-63 of the RenderMan Companion by
Steve Upstill (Publisher: Addison Wesley)
-----------------------------------------------------------------------------
HIER_TagBase+ (0x00040000)
HIER_Type 0
ULONG type; type of hierarchy
Currently, the following types are supported:
Type Label Description
---- ----- -----------
0 HT_EMPT� empty
1 HT_PATH path
2 HT_OBJECT object defined using vertices
4 HT_CSGOBJECT object defined using PRIMitives
5 HT_LAMP lamp and possibly objects
(for compatibility with existing software)
6 HT_CUSTOM custom object (type name supplied with tag)
10 HT_S�SOBJECTS objects for internal use only
HIER_CustomTypeName 1
UWORD namelen;
UB�TE name[namelen]; name of custom hierarchy type (not null terminated)
HIER_HierStatus 2
ULONG status; status of hierarchy
Label Value Description
----- ----- -----------
0x00800000 reserved for future use
to
0x00010000
HEEDGES 0x00008000 draw object during operation
HEEXTENT 0x00004000 draw extent during operation
HNEDGES 0x00002000 draw object when refreshing
HNEXTENT 0x00001000 draw extent when refreshing
0x00000800 reserved for future use
to
0x00000080
HUNION 0x00000040 object Boolean OR
HINTERSECT 0x00000020 object Boolean AND
HSUB 0x00000010 object subtract
HOFF 0x00000008 object/hierarchy is off
in editor
HTPEDIT 0x00000004 object surface trim curve
points are editable
HEDIT 0x00000002 object surface control
points are editable
HSELECT 0x00000001 object is selected
HIER_BoundingBox 3
FLOAT low[3], high[3]; bounding box of hierarchy
HIER_LampType 4
UWORD lamptype; lamp type/behaviour
0 - directional light source
1 - point source (inverse square law)
2 - conical light source
3 - cylindrical light source
4 - area light source
HIER_Size 5
COORFLOAT size[3]; size of axes
HIER_Shear 6
COORFLOAT shear[6]; size of shear components
0 - X-axis �-component
1 - X-axis Z-component
2 - �-axis X-component
3 - �-axis Z-component
4 - Z-axis X-component
5 - Z-axis �-component
HIER_LocalOrigin 7
COORFLOAT locorig[3]; position wrt. parent's space
HIER_Velocity 8
COORFLOAT velocity[3]; velocity wrt. parent's space
HIER_Axes 9
COORFLOAT axes[3][3]; normalized axes
row 0 - X axis
row 1 - � axis
row 2 - Z axis
HIER_�PRAngles 10
FLOAT yprang[3]; angles for yaw, pitch and roll
HIER_X�ZAngles 11
FLOAT xyzang[3]; angles for X, � and Z-axis rotations
in this order
HIER_Translate 12
COORFLOAT trans[3]; translate last local origin using this vector
HIER_Rel�PRAngles 13
FLOAT yprang[3]; relative angles for yaw, pitch and roll
from last key-frame
HIER_RelX�ZAngles 14
FLOAT xyzang[3]; relative angles for X, � and Z-axis rotations
in this order from last key-frame
-----------------------------------------------------------------------------
OBSV_TagBase+ (0x00050000)
OBSV_ObserverHierarchy 0
ULONG index; index to observer hierarchy
OBSV_TargetHierarchy 1
ULONG index; index to target hierarchy
OBSV_Observer 2
COORFLOAT Observer[3]; location of observer/camera
OBSV_Target 3
COORFLOAT Target[3]; location of target
OBSV_Distance 4
COORFLOAT Distance[3]; distance to focal plane
OBSV_Orientation 5
FLOAT yprang[3]; angles for yaw, pitch and roll of camera
OBSV_Tilt 6
FLOAT tilt; tilt angle of camera
OBSV_FieldofView 7
FLOAT separation; separation (for stereo)
OBSV_RecordingMedium 8
FLOAT recwidth,
recheight; width/height of recording medium ie.
35mm film, CCD, etc.
OBSV_FocalLength 9
FLOAT FocalLength; focal length of lens : mm
OBSV_Aperture 10
FLOAT aperture; size of aperture in mm
OBSV_StopNumber 11
FLOAT stopnum; stop number
OBSV_ShutterSpeed 12
FLOAT shutspeed; shutter speed
OBSV_Separation 13
FLOAT separation; view separation (for stereoscopic views)
-----------------------------------------------------------------------------
DISP_TagBase+ (0x00060000)
DISP_WindowParms 0
WORD left, top,
width, height; parameters of windows in virtual screen coordinates
DISP_ViewStatus 1
ULONG viewstatus; status of display
Label Value
----- -----
VOLUMERENDER 0x00000800 volume rendering
RADIOSIT� 0x00000400 radiosity
RA�TRACE 0x00000200 raytracing
PHONGSHADE 0x00000100 Phong shading
GORAUDSHADE 0x00000080 Goraud shading
SOLIDMODEL 0x00000040 solid shading
HIDDENLINE 0x00000020 hidden line removal
WIREFRAME 0x00000010 wireframe
ZBUFFER 0x00000008 z-buffer
SCANLINE 0x00000004 scanline
XSPECS 0x00000002 stereo with XSPECS
(interlaced)
PERSPECT 0x00000001 perspective on
DISP_FrameRate 2
FLOAT framerate; framerate in display
-----------------------------------------------------------------------------
BACK_TagBase+ (0x00070000)
BACK_GroundTexture 0
ULONG texindex; index to ground texture
BACK_SkyTexture 1
ULONG texindex; index to sky texture
BACK_EnviroTexture 2
ULONG texindex; index to environment texture
-----------------------------------------------------------------------------
->Light Characteristics<-
ATTR_LightTagBase+ (0x00080000)
ATTR_ColourSize 0
UWORD cols; number of colour components for attribute
ATTR_Diffuse 1
ATTFLOAT
diffuse[cols]; diffuse colour components
ATTR_Reflect 2
ATTFLOAT
reflect[cols]; reflected colour components
ATTR_Transmit 3
ATTFLOAT
transmit[cols]; transmitted colour components
ATTR_Ambient 4
ATTFLOAT
ambient [cols]; ambient colour components
ATTR_Illumin 5
ATTFLOAT
illumin [cols]; illuminated colour components
ATTR_Opacity 6
ATTFLOAT opacity; illuminated colour components
ATTR_IndexRefract 7
FLOAT indexref[cols]; indices or refraction for each colour components
7-14 reserved for future light characteristics
->Highlight Parameters<-
ATTR_HighlightTagBase+ (0x00081000)
ATTR_SpecHighLight 0
ATTFLOAT
specularpercent,
roughness; parameters for specular highlights
ATTR_PhongHighLight 1
ATTFLOAT
phongpercent,
phongsize; parameters for Phong highlights
ATTR_HighlightColour 2
ATTFLOAT
highlight[cols]; highlight colour components
18-19 reserved for future highlight types
->Lamp Attributes<-
ATTR_LampTagBase+ (0x00082000)
ATTR_LightIntensity 0
ATTFLOAT intensity; intensity of light source
ATTR_LightDirection 1
COORFLOAT dir[3]; direction of light source
ATTR_ConeLight 2
FLOAT coneangle,
conedeltaangle,
beamdistrib; parameters for conic light source
ATTR_AreaLight 3
UWORD width, height; sample grid size for area light source
24-30 reserved for future lamp characteristics
->Environmental Attributes<-
ATTR_EnviroTagBase+ (0x00083000)
ATTR_Fog 31
ATTFLOAT col[cols]; fog parameters
FLOAT mindist; distance to start fog and fog colours
ATTR_DepthCue 32
ATTFLOAT col[cols]; depth cue parameters
FLOAT mindist;
FLOAT maxdist; min. and max. distance over which depth cueing
will occur
ATTR_EnvironIllumin 33
ATTFLOAT illum[cols]; ambient illumination color components
ATTR_EnvIndexRefract 34
FLOAT index; index of refraction of the environment
35-50 reserved for future environment attributes
-----------------------------------------------------------------------------
TXTR_TagBase+ (0x00090000)
TXTR_Default 0
ULONG attindex; index to default attribute serve as a base attribute
to provide defaults to values not modified by
additional texture tags
TXTR_RenderType 1
ULONG rendertype; tags following this one will define textures for
the specified type of rendering
The following are valid rendertypes:
TXTR_SOLIDSHADING 0x00000001
TXTR_GORAUDSHADING 0x00000002
TXTR_PHONGSHADING 0x00000004
TXTR_ZBUFFER 0x00000008
TXTR_RA�TRACING 0x00000010
TXTR_RADIOSIT� 0x00000020
TXTR_VOLUMESHADING 0x00000040
TXTR_Space 2
UWORD size; the size of texture space
TXTR_BoundingBox 3
COORFLOAT low[size],
high[size]; bounding box of n-dimensional texture space
TXTR_Center 4
COORFLOAT cen[size]; limits of n-dimensional texture space
TXTR_BitMap 5
UWORD namelen;
UB�TE name[namelen]; (not null terminated)
UWORD channel; bitmap texture
TXTR_AttribTagBase+ (0x00091000)
TXTR_Checker 0
COORFLOAT scale[size];
ULONG att[2]; checker texture
TXTR_Gradient 1
ULONG att[size*2]; gradient texture
TXTR_Brick 2
COORFLOAT mortscale; thickness of mortar
COORFLOAT scale[size]; size of brick
ULONG attindex[2]; brick texture
TXTR_Wood 3
float ringscale;
ULONG lightcolour, indices to attributes for light-coloured wood,
darkcolour; dark-coloured wood and base attributes
TXTR_NormalTagBase+ (0x00092000)
TXTR_Wave 0
BOOL displacement;
FLOAT phase,amplitude,
wavelength,damping; wave normal mapping
TXTR_BumpMap 1
FLOAT minheight,
maxheight; bump map texture
(requires TXTR_BitMap tag to precede it)
--------------------------------------------------------------------------
SURF-X_TagBase+ (0x000A0000)
reserved for SurF-X program-specific tags
xxxxxx_TagBase+ (0x000B0000)-(0xFFFF0000)
reserved for other program-specific tags or tags for new chunks added to
this spec in the future
these sections can include private tags designed for internal use such
as cutting and pasting. tags that are general enough for all programs
should go in one of the chunk sections if appropriate