Encapsulates methods common to all lights.
Synopsis
#include <AlLight.h>
class AlLight : public AlObject , public AlAnimatable
virtual ~AlLight();
virtual statusCode deleteObject();
virtual AlObjectType type() const;
virtual const char* name() const;
virtual statusCode setName( const char* );
statusCode parameter( const AlLightFields, double& ) const;
statusCode setParameter( const AlLightFields, const double );
AlLightNode* lightNode() const;
virtual AlLightNode* lookAtNode() const;
virtual AlLightNode* upNode() const;
boolean hasLinkedObjects() const;
AlObject* firstLinkedObject() const;
AlObject* nextLinkedObject( AlObject * ) const;
statusCode applyIteratorToLinkedObjects( AlIterator *iter, int& rc );
statusCode linkObjectToLight( AlObject * );
statusCode unlinkObjectFromLight( AlObject * );
boolean exclusivity() const;
statusCode setExclusivity( boolean );
statusCode color( double&, double&, double& ) const;
statusCode setColor( double, double, double );
statusCode worldPosition( double&, double&, double& ) const;
Description
This virtual class contains methods which are common to all types of lights. This includes color, linkage to objects and exclusivity.
To create a light, the user must instantiate and call the create method of a specific type of light (eg. a point light or
a spot light). When a light is created, three light nodes are created, grouped under a group node, which is inserted into
the universe’s DAG. These light nodes represent the position, "look at" and "up" points of the light.
Even though three light nodes are created for all lights, only the spot light class uses the information in the "look at"
and "up" nodes. All other classes either don’t have a direction or store direction in a different manner. The direction vector
of a spot light is the vector between its position point and its "look at" point. The "up" direction vector of a spot light
is the vector between its position point and its "up" point.
There are two ways to delete a light object. When an AlLight object is deleted, its three light nodes are deleted. Alternatively,
when a light node is deleted, its associated light (and other light nodes) are deleted. The group node that originally grouped
the position, "look at" and "up" nodes is not deleted.
The light classes are derived as follows, where a class inherits the functionality defined in the class above it. The user
can only instantiate ambient, point, direction, spot, linear and area lights.
For directional lights, the light positions are (in Z-up coordinate system) position at (0,0,0), view at (0,0,-1), and up
at (0,1,-1). For linear lights, the axis by default starts at the position point and extends (2,0,0). For area lights, the
short axis starts at the position point and extends (0,1,0); the long axis starts at the position point and extends (2,0,0).
All lights have an "exclusive" flag. If this flag is TRUE, then the light will only illuminate objects to which it is linked.
If the flag is FALSE, the light will illuminate objects that have no light links. The default for new lights is FALSE.
AlLight::~AlLight()
Description
Deletes an AlLight wrapper object.
statusCode AlLight::deleteObject()
Description
Deletes the light’s associated nodes (for position, look at and up) and deletes the light. A light can be deleted in two ways.
If AlLight::deleteObject() is called, it deletes the associated AlLightNodes.
If AlLightNode::deleteObject() is called, it deletes the associated AlLight.
Return Codes
sSuccess - the light and its associated light nodes were deleted
sInvalidObject - light was invalid
sFailure - the light could not be deleted
AlObjectType AlLight::type() const
Description
Returns the class identifier, which could be any one of kAmbientLightType, kAreaLightType, kSpotLightType, kPointLightType,
kDirectionLightType, kLinearLightType.
const char* AlLight::name() const
Description
Returns a pointer to this light’s name.
statusCode AlLight::setName(const char *newName)
Description
Changes the camera DAG node’s name to the given name. If the given name is not unique, then a unique name is generated based
on the given name and assigned to the camera. In this case, a status code of sNameChangedToUniqueOne is returned.
Arguments
< cost char* newName - the name to be assigned to this light
Return Codes
sSuccess - everything was successful
sInsufficientMemory - not enough memory available
sInvalidObject - the light was invalid
sNameChangedToUniqueOne - the object’s name was changed to be a unique version of the given name
statusCode AlLight::parameter( const AlLightFields field, double& result ) const
Description
Finds the value of a given light field.
Arguments
< field - light field type
> result - returned result of the field
Return code
sSuccess - field was returned
sInvalidArgument - field was not legal for this light
sFailure - field could not be returned
sInvalidObject - the light was invalid
statusCode AlLight::setParameter( const AlLightFields field,const double value)
Description
Changes the value of the light field. If the given field is not valid then a status code of sFailure is returned.
Arguments
< field - light field type
< value - new value that the light field is to take
Return Codes
sSuccess - field was changed
sInvalidArgument - field was not legal for this light
sFailure - field could not be changed
sInvalidObject - the light was invalid
AlLightNode *AlLight::lightNode() const
Description
Returns a pointer to the DAG node that represents the light’s position.
AlLightNode *AlLight::lookAtNode() const
Description
Returns a pointer to the ’look at’ node attached to this light. This method does not apply to all lights (eg. a point light
doesn’t have a ’look at’ direction).
AlLightNode *AlLight::upNode() const
Description
Returns a pointer to the ’up’ node attached to this light. This method doesn’t apply to all lights (eg. a point light doesn’t
have a ’up’ direction).
statusCode AlLight::color( double &r, double &g, double &b) const
Description
Returns the color of the light in r,g & b, (for red, green and blue). Valid values for r,g & b are between 0.0 and 255.0.
Arguments
> r - is the current red value of the light
> g - is the current green value of the light
> b - is the current blue value of the light
Return Codes
sSuccess - color retrieved
sInvalidObject - object is invalid
boolean AlLight::exclusivity() const
Description
Returns TRUE if the exclusive flag of this light is TRUE. Otherwise, returns FALSE. If a light’s exclusive flag is TRUE, then
the light will only illuminate objects to which it is linked. If the flag is FALSE, the light will illuminate objects that
have no light links. Default is FALSE.
statusCode AlLight::setColor( double r, double g, double b)
Description
Sets the color of the light to be r,g & b (for red, green and blue). Valid values for r,g & b are between 0.0 and 255.0.
Arguments
< r - is the new red value
< g - is the new green value
< b - is the new blue value
Return Codes
sSuccess - the color was set
sInvalidObject - invalid light
sInvalidArgument - color out of range
boolean AlLight::hasLinkedObjects() const
Description
Returns TRUE if this light has any objects linked to it. Otherwise, returns FALSE.
AlObject* AlLight::firstLinkedObject() const
Description
Returns a pointer to the first object that is linked to this light. If there are no objects linked to this light, then NULL
is returned. Only objects with 3D geometry can be linked to a light. Cameras, lights, curves and CVs cannot be linked to a
light. Surfaces and faces can be linked to a light.
AlObject* AlLight::nextLinkedObject( AlObject* toThis ) const
Description
Returns a pointer to the object following the given object that is linked to this light. NULL is returned if there is no following
object. NULL is returned if the given AlObject wasn’t found in the light list. Only objects with 3D geometry can be linked
to a light. Cameras, lights, curves and CVs cannot be linked to a light. Surfaces and faces can be linked to a light.
Arguments
< toThis - the object whose following linked object is returned.
statusCode AlLight::applyIteratorToLinkedObjects( AlIterator *iter, int& rc )
Description
Applies an iterator to each linked object.
Arguments
< iter - the iterator to apply
> rc - the return value of the last application of the iterator
Return Codes
sSuccess - the iterator was successfully applied to each object
sInvalidArgument - ’iter’ was NULL
statusCode AlLight::linkObjectToLight( AlObject *obj )
Description
Links the given object to the light. If the light’s exclusive flag is on, then the light will only illuminate objects to which
it is linked. Only objects with 3D geometry can be linked to a light. Cameras, lights, curves and CVs cannot be linked to
a light. Surfaces, faces, and shells can be linked to a light.
Arguments
< obj - the object to link to the light
Return Codes
sSuccess - linking object to this light was successful
sAlreadyCreated - this object was already linked to this light
sInvalidObject - light is invalid
sInvalidArgument - object was NULL or not a face, surface, or shell
statusCode AlLight::unlinkObjectFromLight( AlObject *obj )
Description
Unlinks the given object from the light. If the light’s exclusive flag is on, then the light will only illuminate objects
to which it is linked.
Arguments
< AlObject *obj - the object to link to the light
Return Codes
sSuccess - linking object to this light was successful
sObjectNotFound - this object wasn’t linked to this light
sInvalidObject - light is invalid
sInvalidArgument - object was NULL or not a face, surface, or shell
statusCode AlLight::setExclusivity( boolean newExclusive )
Description
Sets the exclusive flag of this light. If a light’s exclusive flag is TRUE, then the light will only illuminate objects to
which it is linked. If the flag is FALSE, the light will illuminate objects that have no light links. Default is FALSE.
Arguments
< newExclusive - is the new value of the exclusive flag
Return Codes
sSuccess - exclusivity set
sInvalidObject - object invalid
statusCode AlLight::worldPosition( double &x, double &y, double &z ) const
Description
Returns the point in world space where this light is positioned. This is the same as the position of the position light node.
Arguments
> x - the x coordinate of the light position
> y - the y coordinate of the light position
> z - the z coordinate of the light position
Return Codes
sSuccess - world Position retrieved
sInvalidObject - object invalid
sFailure - an error occurred