The conventional suffix for a INST
file is `.inst'.
There is no INST BINARY format.
An INST
applies a 4x4 transformation to another OOGL object. It
begins with INST
followed by these sections which may appear in
any order:
geom oogl-object
specifies the OOGL object to be instantiated. See section Embedded objects and external-object 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" object, 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
object (list of
transformations) object, or a LIST
whose members are ultimately
TLIST
objects. In effect, the transforms
keyword takes a
collection of 4x4 matrices and replicates the geom
object, 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
object, though a single-membered LIST would do this more efficiently.
See section Transformation matrices, for the matrix format.
Two more INST fields are accepted: location
and origin
.
location [global or camera or ndc or screen or local]
Normally an INST specifies a position relative to its parent object;
the location
field allows putting an object elsewhere.
location global
attaches the object to the global (a.k.a. universe)
coordinate system -- the same as that in which geomview's World objects,
alien geometry, and cameras are placed.
location camera
places the object 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 camera space are the same as global coordinates.
When a camera is reset, the global origin is at (0,0,-3.0).
location ndc
places the object 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.vectpastes
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 object just nearer than the near clipping
plane and make it (partially) invisible, due to floating-point error.
location screen
places the object 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 object 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.
INST
Files.
Go to the first, previous, next, last section, table of contents.