AlPerspectiveCamera
 
 
 

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