pfiInputXformSpheric(3pf) OpenGL Performer 3.2.2 libpfui Reference Pages
NAME
pfiGetIXformSphericClassType, pfiNewIXformSpheric, pfiIXformSphericMode,
pfiGetIXformSphericMode, pfiIXformSphericParameter,
pfiGetIXformSphericParameter, pfiCreate2DIXformSpheric,
pfiUpdate2DIXformSpheric, pfiIXformSphericSetWorld,
pfiIXformSphericReadPathFile, pfiIXformSphericPrintPathStuff -
pfiInputXformSpheric functions.
FUNCTION SPECIFICATION
#include <Performer/pfui.h>
pfType * pfiGetIXformSphericClassType(void);
pfiInputXformSpheric * pfiNewIXformSpheric(void *arena);
void -
pfiIXformSphericMode(pfiInputXformSpheric *spheric,
int mode, int val);
int -
pfiGetIXformSphericMode(pfiInputXformSpheric *spheric,
int mode);
void -
pfiIXformSphericParameter(pfiInputXformSpheric *spheric,
int _param, float _val);
float -
pfiGetIXformSphericParameter(pfiInputXformSpheric *spheric,
int _param);
pfiInputXformSpheric * pfiCreate2DIXformSpheric(void *arena);
int pfiUpdate2DIXformSpheric(pfiInputXform *spheric,
pfiInputCoord *icoord, void *data);
void -
pfiIXformSphericSetWorld(pfiInputXformSpheric *spheric,
int worldNumber, int in_or_out);
void -
pfiIXformSphericReadPathFile(pfiInputXformSpheric *spheric,
char *filename);
void -
pfiIXformSphericPrintPathStuff(pfiInputXformSpheric *spheric);
DESCRIPTION
pfiInputXformSpheric functions.
A pfiInputXformSpheric is a child of the pfiInputXform class and so
pfiInputXform routines may be called with a pfiInputXformSpheric. See
Page 1
pfiInputXformSpheric(3pf) OpenGL Performer 3.2.2 libpfui Reference Pages
the pfiInputXform reference page for information on pfiInputXform
functionality. The pfiInputXformSpheric has a complete C++ API following
the conventions of general OpenGL Performer C++ API; C++ methods are
declared in /usr/include/Performer/pfui/pfiSpheric.h.
The motion model is based on a spheric coordinate system - there is the
concept of a center (or origin - but it is not limited to 0,0,0). The
view is always towards the center - with the ability to change the
radius, rotation around (think of spinning a globe), tilt (tilting a
globe), and even roll (rolling your head to the side while looking at a
globe).
Mouse motion
Left mouse button - hold down then up and down motion lengthens or
shortens the radius.
Middle mouse button - hold down then up and down motion tilts up and
down. Left and right motion spins around.
Right mouse button - hold down then up and down motion proceeds along
rails to the next or previous "worlds". If there are no destinations
then this button will do nothing.
This motion model can be constrained with minimum and maximum values for
any of these parameters. These values can be set using the C get and set
functions: pfiGetIXformSphericParameter and pfiIXformSphericParameter.
In C++: getParameter and setParameter. These functions all use
parameters defined in pfui.h.
This motion model also has the concept of multiple "worlds". This allows
you to within a space without always having the same center. Imaging
rotating around a room containing an object of interest set off to one
side. When viewing the whole room more rotational freedom is allowed,
the center of motion is the center of the room, etc. Once interested in
viewing the object the center of motion becomes the object and rotational
freedom is limited in order to simplify viewing the model. This can be
accomplished by having one world defined by the center of the room, and
this has a transition to a second world defined by the center of the
object. These parameters are of the form of radius for the "in" point(s)
and the out point (radius, around, tilt). There is the ability to have
multiple children "worlds" per world - the limit is currently two.
To make setting these parameters less bulky there is a configuration file
that can be loaded using pfiIXformSphericReadPathFile. To jump to a
particular world use pfiIXformSphericSetWorld. To print out information
about these paths from world to world use pfiIXformSphericPrintPathStuff.
Path file format
This file is formatted as follows (this is a legal file also):
Page 2
pfiInputXformSpheric(3pf) OpenGL Performer 3.2.2 libpfui Reference Pages
# at the beginning of a line comments the entire line
#
# The first tag that must be used is world. These must occur in
# monotonically increasing order (0 1 2 3 ...).
world 0
#
# A world can have 0-2 children. Each must be specified on a
# separate line and refer to a world number defined in this file.
child 1
#
# This is the center of motion - X Y Z floating point numbers.
center 0 0 0
#
# The remaining parameters are the same names as the definitions
# in pfui.h but using C++ style lowercase names. That means
# the names are all lowercase except the first letter of words other
# than the first word. For example PFIXSPH_NEAR_MIN_AROUND becomes
# nearMinAround. And all parameters other than those specified
# above (world, child, center) are single floating point numbers.
minRadius 12.040635
maxRadius 100
inRadius 16.4774
outRadius 100
inAround -70.6169
outAround 0
inTilt 40.5644
outTilt 30
nearScaleLinearVelocity 0.0048
farScaleLinearVelocity 0.7
nearMaxAngularVelocity 0.7
farMaxAngularVelocity 4
nearMaxRollVelocity 0.2
farMaxRollVelocity 0.2
#
# This is the next world...
world 1
center 0 0 0
minRadius 2.001
maxRadius 3
outRadius 3
inRadius 2
outAround -90
inAround -90
outTilt 90
inTilt 90
pfiInit should be called once before any pfiInputXformSpheric routines
and before the forked creation of any additional processes that will be
calling pfiInputXformSpheric routines.
Page 3
pfiInputXformSpheric(3pf) OpenGL Performer 3.2.2 libpfui Reference Pages
NOTES
The libpfui source code, object code and documentation are provided as
unsupported software. Routines are subject to change in future releases.
CAVEATS
This motion model doesn't really pay attention to collisions or position
resets. It is best to turn off collision checking while using the
spheric motion model. And hitting reset will reset the position until
any movement - then the position prior to the reset is used again.
Page 4