Encapsulates
creation, deletion and manipulation of perspective cameras.
Synopsis
#include <AlPerspectiveCamera.h> class AlPerspectiveCamera : public AlCamera , public AlSettable , public AlPickable , public AlAnimatable enum AlCameraWindowFitType { kFillFit, kHorizontalFit, kVerticalFit }; AlPerspectiveCamera(); virtual ~AlPerspectiveCamera(); virtual statusCode deleteObject(); virtual AlObject* copyWrapper() const; statusCode create(); virtual AlObjectType type() const; AlCameraNode* eye() const; AlCameraNode* view() const; AlCameraNode* up() const; statusCode worldEye( double&, double&, double& ) const; statusCode worldView( double&, double&, double& ) const; statusCode worldUp( double&, double&, double& ) const; statusCode worldEyeViewUp( double&, double&, double&, double&, double&, double&, double&, double&, double& ) const; statusCode setWorldEye( double, double, double); statusCode setWorldView( double, double, double ); statusCode setWorldUp( double, double, double ); statusCode setWorldEyeViewUp( double, double, double, double, double, double, double, double, double ); double twistAngle() const; statusCode setTwistAngle( double ); statusCode changeTwistAngleBy( double ); statusCode filmBack(double&, double&) const; statusCode filmOffset(double&, double&) const; statusCode setFilmBack(double, double); statusCode setFilmOffset(double, double); double focalLength() const; statusCode setFocalLength(double); double angleOfView() const; statusCode setAngleOfView( double ); statusCode depthOfField(boolean&, double&, double&) const; statusCode setDepthOfField(boolean, double, double); int placementFitCode() const; double placementShift() const; statusCode setPlacementFitCode( AlCameraWindowFitType ); statusCode setPlacementShift( double ); statusCode autoFocus( boolean &enabled ) const; statusCode setAutoFocus( boolean enabled );
Description
This class encapsulates
all the functionality for creating, deleting and manipulating a
perspective camera. The user cannot create, delete or manipulate
orthographic cameras.
A camera is made of 4
parts - an AlPerspectiveCamera object and 3 attached AlCameraNodes
that represent eye, view and up position of the camera. These camera
nodes are members of the universe’s DAG structure.
The view direction vector
is the vector between the eye position and the view position. The
up direction vector is the vector between the eye position and the
up position. There are methods to get these positions and to access
the attached camera nodes.
To create a perspective
camera, the user must instantiate and call the create method on
an AlPerspectiveCamera object. This creates the necessary eye, view
and up AlCameraNodes, groups them under an AlGroupNode and inserts
the group into the universe’s DAG structure. The user cannot instantiate
an AlCameraNode directly.
When a camera is created,
if the coordinate system is specified as kZUp (when initializing the
universe) the camera’s default eye, view and up positions are respectively
(0.0, -12.0, 0.0), (0.0, 0.0, 0.0), (0.0, -12.0, 1.0). If the coordinate
system is specified as kYUp, then eye, view and up positions are
(0.0, 0.0, 12.0), (0.0, 0.0, 0.0), (0.0, 1.0, 12.0).
There are two ways to
delete a camera object. When the deleteObject() method of an AlPerspectiveCamera
object is called, its three camera nodes are deleted. Alternatively,
when a camera node is deleted, its associated camera (and other
camera nodes) are deleted. The group node that originally grouped
the eye, view and up nodes is not deleted.
AlPerspectiveCamera::AlPerspectiveCamera()
Description
Constructs
an AlPerspectiveCamera wrapper object.
AlPerspectiveCamera::~AlPerspectiveCamera()
Description
Deletes
an AlPerspectiveCamera wrapper object.
AlObject *AlPerspectiveCamera::copyWrapper()
const
Description
Creates a copy of the AlPerspectiveCamera.
The returned AlPerspectiveCamera will reference the same data as
the original.
statusCode AlPerspectiveCamera::deleteObject()
Description
Removes all parts of the camera from
the DAG and deletes them. This includes detaching and deleting the
’eye’, ’view’, and ’up’ DAG nodes.
Return Codes
sSuccess - the camera
data was successfully deleted
sInvalidObject - the
camera was not valid (already deleted?)
statusCode AlPerspectiveCamera::create()
Description
Creates
a camera and all associated eye, view, and up camera nodes and attaches
them to the camera. The camera is given default parameters for
a perspective camera.
Return Codes
sSuccess - everything
was created
sInsufficientMemory -
not enough memory
sFailure - not created
AlObjectType AlPerspectiveCamera::type()
const
Description
Returns the class identifier ’kPerspectiveCameraType’.
AlPerspectiveCamera* AlPerspectiveCamera::asPerspectiveCameraPtr()
Description
This virtual function returns
a non-null pointer to itself, indicating that it is safe to cast
to an object of this class.
AlCameraNode* AlPerspectiveCamera::eye()
const
Description
Returns a pointer to this camera’s eye node.
If the eye node does not exist or is of the wrong type, then this
method returns NULL.
AlCameraNode* AlPerspectiveCamera::view()
const
Description
Returns a pointer to this camera’s view
node. If the view node does not exist or is of the wrong type, then
this method returns NULL.
AlCameraNode* AlPerspectiveCamera::up()
const
Description
Returns a pointer to this camera’s up node.
If the up node does not exist or is of the wrong type, then this
method returns NULL.
statusCode AlPerspectiveCamera::worldEye(
double &x, double &y, double &z ) const
Description
Returns
the camera’s world eye position in x,y, & z in world space.
Arguments
> double &x -
the position along the x axis
> double &y -
the position along the y axis
> double &z -
the position along the z axis
Return Codes
sSuccess - the position
was successfully returned
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::worldView(
double &x, double &y, double &z ) const
Description
Returns
the camera’s view position in x,y, & z in world space. The
view direction vector (the direction the camera is pointing in)
is the vector between the eye position and the view position.
Arguments
> double &x -
the position along the x axis
> double &y -
the position along the y axis
> double &z -
the position along the z axis
Return Codes
sSuccess - the position
was successfully returned
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::worldUp(
double &x, double &y, double &z ) const
Description
Returns
the camera’s up position in x,y, & z in world space. The ’up’
vector (the direction that indicates the camera’s up direction)
is the vector between the eye position and the up position.
Arguments
> double &x -
the position along the x axis
> double &y -
the position along the y axis
> double &z -
the position along the z axis
Return Codes
sSuccess - the position
was successfully returned
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::worldEyeViewUp(
double &ex, double &ey, double &ez,double &vx, double
&vy, double &vz,double &ux, double &uy, double &uz)
const
Description
Returns the world eye, view and
up positions in ex, ey, ez, vx, vy, vz, ux, uy & uz in world space.
Note that the view direction vector is the vector between the eye
and view positions and that the up direction vector is the vector
between the eye and up positions.
Arguments
> double &ex -
the eye position along the x axis
> double &ey -
the eye position along the y axis
> double &ez -
the eye position along the z axis
> double &vx -
the view position along the x axis
> double &vy -
the view position along the y axis
> double &vz -
the view position along the z axis
> double &ux -
the up position along the x axis
> double &uy -
the up position along the y axis
> double &uz -
the up position along the z axis
Return Codes
sSuccess - the position
was successfully returned
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setWorldEye(
double x, double y, double z )
Description
Sets the
camera’s world eye position to be x,y, & z in world space. To
do this, the camera’s eye, view and up nodes may be changed.
Arguments
< double x - the new
world eye position along the x axis
< double y - the new
world eye position along the y axis
< double z - the new
world eye position along the z axis
Return Codes
sSuccess - the position
was successfully set
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setWorldView(
double x, double y, double z)
Description
Sets the
camera’s world view position to be x,y, & z in world space.
To do this, the camera’s eye, view and up nodes may be changed.
Arguments
< double x - the new
world view position along the x axis
< double y - the new
world view position along the y axis
< double z - the new
world view position along the z axis
Return Codes
sSuccess - the position
was successfully set
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setWorldUp(
double x, double y, double z )
Description
Sets the
camera’s world up position to be x,y, & z in world space. To
do this, the camera’s eye, view and up nodes may be changed.
Arguments
< double x - the new
world up position along the x axis
< double y - the new
world up position along the y axis
< double z - the new
world up position along the z axis
Return Codes
sSuccess - the position
was successfully set
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setWorldEyeViewUp(
double ex, double ey, double ez,double vx, double vy, double vz,double
ux, double uy, double uz )
Description
Sets
the camera’s world eye,view and up positions to be ex, ey, ez,
vx, vy, vz, ux, uy, uz in world space. To do this, the camera’s
eye, view and up nodes may be changed.
Arguments
< double ex - the
eye position along the x axis
< double ey - the
eye position along the y axis
< double ez - the
eye position along the z axis
< double vx - the
view position along the x axis
< double vy - the
view position along the y axis
< double vz - the
view position along the z axis
< double ux - the
up position along the x axis
< double uy - the
up position along the y axis
< double uz - the
up position along the z axis
Return Codes
sSuccess - the position
was successfully set
sInvalidObject - the
camera is not valid
double AlPerspectiveCamera::twistAngle()
const
Description
Returns the camera’s twist angle
in degrees. Angle can be either positive or negative. Zero will
be returned if the camera is not valid.
statusCode AlPerspectiveCamera::setTwistAngle(
double twistAngle)
Description
Sets the camera’s
twist angle to the given twistAngle. Angle is in degrees and can
be either positive or negative.
Arguments
< double twistAngle
- the new twist angle
Return Codes
sSuccess - the twist
angle was successfully set
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::changeTwistAngleBy(
double deltaTwistAngle)
Description
Changes
the twist angle by the given deltaTwistAngle. Angle is in degrees
and can be either positive or negative.
Arguments
< deltaTwistAngle
- the change in twist angle to apply to the camera
Return Codes
sSuccess - the twist
angle was successfully changed
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::filmBack(double&
filmXSize, double& filmYSize) const
Description
Returns
the film back size in the X and Y directions.
Arguments
> double& filmXSize
- the film back size (in inches) in the X direction
> double& filmYSize
- the film back size (in inches) in the Y direction
Return Codes
sSuccess - operation
was successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::filmOffset(double&
filmXOffset, double& filmYOffset) const
Description
Returns
the film offset in the X and Y directions.
Arguments
> double& filmXOffset
- the film offset (in inches) in the X direction
> double& filmYOffset
- the film offset (in inches) in the Y direction
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setFilmBack(double
filmXSize, double filmYSize)
Description
Sets
the film back size in the X and Y directions.
Arguments
< double filmXSize
- the film back size (in inches) in the X direction
< double filmYSize
- the film back size (in inches) in the Y direction
Return Codes
sSuccess - the operation
successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setFilmOffset(double filmXOffset,
double filmYOffset)
Description
Sets
the film offset in the X and Y directions.
Arguments
< double filmXOffset
- the film offset (in inches) in the X direction
< double filmYOffset
- the film offset (in inches) in the Y direction
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
double AlPerspectiveCamera::focalLength()
const
Description
Returns the camera’s focal length.
-1 is returned if the camera is not valid.
statusCode AlPerspectiveCamera::setFocalLength(
double focalLength)
Description
Sets the camera’s
focal length.
Arguments
< double focalLength
- the new focal length
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
sInvalidArgument - the
focalLength is less than or equal to zero
double AlPerspectiveCamera::angleOfView()
const
Description
Returns the camera’s angle of view.
Valid range is from 2.0 to 179.0 degrees. -1 is returned if the
camera is not valid.
statusCode AlPerspectiveCamera::setAngleOfView(
double angleOfView)
Description
Sets the camera’s
angle of view. Valid range is from 2.0 to 179.0 degrees.
Arguments
< double angleOfView
- the new angle of view
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
sInvalidArgument - if
angleOfView is not in the valid range
statusCode AlPerspectiveCamera::depthOfField(boolean& dofEnabled,
double& fStop, double& focalDistance) const
Description
Returns the camera’s depth of field
information.
Arguments
> boolean& dofEnabled
- TRUE if depth of field is enabled, FALSE if not
> double& fStop
- camera’s f-Stop
> double& focalDistance
- distance from eye point to plane in focus
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setDepthOfField(boolean dofEnabled,
double fStop, double focalDistance)
Description
Sets
the camera’s depth of field information.
Arguments
< boolean dofEnabled
- TRUE to enable depth of field, FALSE to disable it
< double fStop - camera’s
f-Stop
< double focalDistance
- distance from eye point to plane in focus
Return Codes
sSuccess -the operation
was successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::autoFocus(boolean&
enabled) const
Description
Returns the camera’s
auto focus information.
Arguments
> boolean& enabled
- TRUE if auto focus enabled, FALSE if not
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
statusCode AlPerspectiveCamera::setAutoFocus(
boolean enabled )
Description
Sets the camera’s auto
focus information.
Arguments
< boolean enabled
- TRUE to enable auto focus, FALSE to disable it
Return Codes
sSuccess - the operation
was successful
sInvalidObject - the
camera is not valid
double AlPerspectiveCamera::placementShift()
const
Description
Returns the placement_shift of
the camera. 0 is returned if the camera is not valid.
int AlPerspectiveCamera::placementFitCode()
const
Description
Returns the placement_fit_code
of the camera.
Return values
-1 is returned if the
camera is not valid.
0 - FILL_FIT
1 - HORIZONTAL_FIT
2 - VERTICAL_FIT
statusCode AlPerspectiveCamera::setPlacementShift(
double placementShift )
Description
Sets the placement shift of the camera.
Arguments
< placementShift -
value to set the placement shift to.
Return Codes
sSuccess - if successful
sInvalidObject - if the
camera is not valid
statusCode AlPerspectiveCamera::setPlacementFitCode( AlCameraWindowFitType
fitCode )
Description
Sets the placement fit type of the
camera.
Arguments
< fitCode - value
to set the placement fit code to.
Return Codes
sSuccess - if successful
sInvalidObject - if the
camera is not valid