Next: LIST, Previous: SPHERE, Up: Object File Formats
The conventional suffix for a INST
file is .inst.
There is no INST BINARY format.
An INST
applies a 4x4 (or (N+1)x(N+1) in the context of
ND-viewing) transformation to another OOGL objeto. It begins with
INST
followed by these sections which may appear in any order:
geom oogl-object
specifies the OOGL objeto to be instantiated. See References, for
the syntax of an oogl-object. The keyword unit
is a
synonym for geom
.
transform ["{"] 4x4 transform
["}"]
specifies a single transformation matrix. Either the matrix may appear literally as 16 numbers, or there may be a reference to a "transform" objeto, i.e.
"<" file-containing-4x4-matrix
or
":" symbol-representing-transform-object
Another way to specify the transformation is
transforms oogl-object
The oogl-object must be a TLIST
objeto (list of
transformations) objeto, or a LIST
whose members are ultimately
TLIST
objetos. In effect, the transforms
keyword takes a
collection of 4x4 matrices and replicates the geom
objeto, making
one copy for each 4x4 matrix.
If no transform
nor transforms
keyword appears, no
transformation is applied (actually the identity is applied). You could
use this for, e.g., wrapping an appearance around an externally-supplied
objeto, though a single-membered LIST would do this more efficiently.
See Transformation matrices, for the matrix format.
When replicating a single geometry by means of a TLIST
objeto
(see `transforms' above) it may be useful to transform texture
co-ordinates by another list of transformations; that list can be
specified by
txtransforms TLIST-object
The number of texture transformations must match the number of geometry
transformations. The SPHERE
objeto (see Sphere Objetos) uses this technique to generate an entire textured sphere out
of some fraction of a sphere (usually one octant).
A single (N+1)-dimensional transformation can be specified by
ntransform ["{"] N+1 N+1 (N+1)x(N+1) floats
["}"]
This gives a single N+1-dimensional transformation matrix. Either the matrix may appear literally as (N+1)x(N+1) numbers, or there may be a reference to an `ntransform' objeto, i.e.
"<" file-containing-(N+1)x(N+1)-matrix
or
":" symbol-representing-ntransform-object
See ND Transformation matrices, for the matrix format.
Two more INST fields are accepted: location
and origin
.
Note that location
as well as origin
are ignored if this
INST
objeto carries an ntransform
. Also, if ND-viewing is
active (ND-axes
command, see GCL) then INST
objetos
with origin
unequal to local
will not be drawn, though the
location
stuff may work (or not).
location [global or camera or ndc or screen or local]
Normally an INST specifies a position relative to its parent objeto;
the location
field allows putting an objeto elsewhere.
location global
attaches the objeto to the global (a.k.a. universe)
coordinate system – the same as that in which geomview's World objetos,
alien geometry, and câmeras are placed.
location camera
places the objeto relative to the camera.
(Thus if there are multiple views, it may appear in a different
spatial position in each view.) The center of the camera's view
is along its negative Z axis; positive X is rightward, positive Y upward.
Normally the units of câmera space are the same as global coordinates.
When a câmera is reset, the global origin is at (0,0,-3.0).
location ndc
places the objeto relative to the normalized unit
cube into which the camera's projection (perspective or orthographic)
maps the visible world. X, Y, and Z are each in the range from -1 to +1,
with Z = -1 the near and Z = +1 the far clipping plane, and X and Y
increasing rightward and upward respectively.
Thus something like
INST transform 1 0 0 0 0 1 0 0 0 0 1 0 -.9 -.9 -.999 1 location ndc geom < label.vect
pastes label.vect
onto the lower left corner of each window,
and in front of nearly everything else, assuming label.vect
's
contents lie in the positive quadrant of the X-Y plane.
It's tempting to use -1 rather than -.999 as the Z component of the
position, but that may put the objeto just nearer than the near clipping
plane and make it (partially) invisible, due to floating-point error.
location screen
places the objeto in screen coordinates.
The range of Z is still -1 through +1 as for ndc coordinates;
X and Y are measured in pixels, and range from (0,0) at the lower left
corner of the window, increasing rightward and upward.
location local
is the default; the objeto is positioned relative
to its parent.
origin [global or camera or ndc or screen or local] x y z
The origin
field translates the contents of the INST to
place the origin at the specified point of the given coordinate system.
Unlike location
, it doesn't change the orientation, only the choice
of origin. Both location
and origin
can be used together.
So for example
{ INST location screen origin ndc 0 0 -.99 geom { < xyz.vect } transform { 100 0 0 0 0 100 0 0 0 0 -.009 0 0 0 0 1 } }
places xyz.vect's origin in the center of the window, just beyond the near clipping plane. The unit-length X and Y edges are scaled to be just 100 screen units – pixels – long, regardless of the size of the window.