Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions
Ogre::ShadowCaster Class Reference

This class defines the interface that must be implemented by shadow casters. More...

#include <OgreShadowCaster.h>

Inheritance diagram for Ogre::ShadowCaster:
Inheritance graph
[legend]

List of all members.

Public Types

typedef vector
< ShadowRenderable * >::type 
ShadowRenderableList
typedef VectorIterator
< ShadowRenderableList
ShadowRenderableListIterator

Public Member Functions

virtual ~ShadowCaster ()
virtual bool getCastShadows (void) const =0
 Returns whether or not this object currently casts a shadow.
virtual EdgeDatagetEdgeList (void)=0
 Returns details of the edges which might be used to determine a silhouette.
virtual bool hasEdgeList (void)=0
 Returns whether the object has a valid edge list.
virtual const AxisAlignedBoxgetWorldBoundingBox (bool derive=false) const =0
 Get the world bounding box of the caster.
virtual const AxisAlignedBoxgetLightCapBounds (void) const =0
 Gets the world space bounding box of the light cap.
virtual const AxisAlignedBoxgetDarkCapBounds (const Light &light, Real dirLightExtrusionDist) const =0
 Gets the world space bounding box of the dark cap, as extruded using the light provided.
virtual
ShadowRenderableListIterator 
getShadowVolumeRenderableIterator (ShadowTechnique shadowTechnique, const Light *light, HardwareIndexBufferSharedPtr *indexBuffer, bool extrudeVertices, Real extrusionDistance, unsigned long flags=0)=0
 Gets an iterator over the renderables required to render the shadow volume.
virtual Real getPointExtrusionDistance (const Light *l) const =0
 Get the distance to extrude for a point/spot light.

Static Public Member Functions

static void extrudeVertices (const HardwareVertexBufferSharedPtr &vertexBuffer, size_t originalVertexCount, const Vector4 &lightPos, Real extrudeDist)
 Utility method for extruding vertices based on a light.

Protected Member Functions

Real getExtrusionDistance (const Vector3 &objectPos, const Light *light) const
 Helper method for calculating extrusion distance.
virtual void updateEdgeListLightFacing (EdgeData *edgeData, const Vector4 &lightPos)
 Tells the caster to perform the tasks necessary to update the edge data's light listing.
virtual void generateShadowVolume (EdgeData *edgeData, const HardwareIndexBufferSharedPtr &indexBuffer, const Light *light, ShadowRenderableList &shadowRenderables, unsigned long flags)
 Generates the indexes required to render a shadow volume into the index buffer which is passed in, and updates shadow renderables to use it.
virtual void extrudeBounds (AxisAlignedBox &box, const Vector4 &lightPos, Real extrudeDist) const
 Utility method for extruding a bounding box.

Detailed Description

This class defines the interface that must be implemented by shadow casters.

Definition at line 109 of file OgreShadowCaster.h.


Member Typedef Documentation

Definition at line 128 of file OgreShadowCaster.h.

Definition at line 129 of file OgreShadowCaster.h.


Constructor & Destructor Documentation

virtual Ogre::ShadowCaster::~ShadowCaster ( ) [virtual]

Definition at line 112 of file OgreShadowCaster.h.


Member Function Documentation

virtual void Ogre::ShadowCaster::extrudeBounds ( AxisAlignedBox box,
const Vector4 lightPos,
Real  extrudeDist 
) const [protected, virtual]

Utility method for extruding a bounding box.

Parameters:
boxOriginal bounding box, will be updated in-place
lightPos4D light position in object space, when w=0.0f this represents a directional light
extrudeDistThe distance to extrude
static void Ogre::ShadowCaster::extrudeVertices ( const HardwareVertexBufferSharedPtr vertexBuffer,
size_t  originalVertexCount,
const Vector4 lightPos,
Real  extrudeDist 
) [static]

Utility method for extruding vertices based on a light.

Remarks:
Unfortunately, because D3D cannot handle homogeneous (4D) position coordinates in the fixed-function pipeline (GL can, but we have to be cross-API), when we extrude in software we cannot extrude to infinity the way we do in the vertex program (by setting w to 0.0f). Therefore we extrude by a fixed distance, which may cause some problems with larger scenes. Luckily better hardware (ie vertex programs) can fix this.
Parameters:
vertexBufferThe vertex buffer containing ONLY xyz position values, which must be originalVertexCount * 2 * 3 floats long.
originalVertexCountThe count of the original number of vertices, i.e. the number in the mesh, not counting the doubling which has already been done (by VertexData::prepareForShadowVolume) to provide the extruded area of the buffer.
lightPos4D light position in object space, when w=0.0f this represents a directional light
extrudeDistThe distance to extrude
virtual void Ogre::ShadowCaster::generateShadowVolume ( EdgeData edgeData,
const HardwareIndexBufferSharedPtr indexBuffer,
const Light light,
ShadowRenderableList shadowRenderables,
unsigned long  flags 
) [protected, virtual]

Generates the indexes required to render a shadow volume into the index buffer which is passed in, and updates shadow renderables to use it.

Parameters:
edgeDataThe edge information to use
indexBufferThe buffer into which to write data into; current contents are assumed to be discardable.
lightThe light, mainly for type info as silhouette calculations should already have been done in updateEdgeListLightFacing
shadowRenderablesA list of shadow renderables which has already been constructed but will need populating with details of the index ranges to be used.
flagsAdditional controller flags, see ShadowRenderableFlags
virtual bool Ogre::ShadowCaster::getCastShadows ( void  ) const [pure virtual]

Returns whether or not this object currently casts a shadow.

Implemented in Ogre::MovableObject, and Ogre::TerrainQuadTreeNode::Movable.

virtual const AxisAlignedBox& Ogre::ShadowCaster::getDarkCapBounds ( const Light light,
Real  dirLightExtrusionDist 
) const [pure virtual]

Gets the world space bounding box of the dark cap, as extruded using the light provided.

Implemented in Ogre::MovableObject.

virtual EdgeData* Ogre::ShadowCaster::getEdgeList ( void  ) [pure virtual]

Returns details of the edges which might be used to determine a silhouette.

Implemented in Ogre::Entity, Ogre::ManualObject, Ogre::MovableObject, and Ogre::StaticGeometry::Region.

Real Ogre::ShadowCaster::getExtrusionDistance ( const Vector3 objectPos,
const Light light 
) const [protected]

Helper method for calculating extrusion distance.

virtual const AxisAlignedBox& Ogre::ShadowCaster::getLightCapBounds ( void  ) const [pure virtual]

Gets the world space bounding box of the light cap.

Implemented in Ogre::MovableObject.

virtual Real Ogre::ShadowCaster::getPointExtrusionDistance ( const Light l) const [pure virtual]

Get the distance to extrude for a point/spot light.

Implemented in Ogre::MovableObject.

virtual ShadowRenderableListIterator Ogre::ShadowCaster::getShadowVolumeRenderableIterator ( ShadowTechnique  shadowTechnique,
const Light light,
HardwareIndexBufferSharedPtr indexBuffer,
bool  extrudeVertices,
Real  extrusionDistance,
unsigned long  flags = 0 
) [pure virtual]

Gets an iterator over the renderables required to render the shadow volume.

Remarks:
Shadowable geometry should ideally be designed such that there is only one ShadowRenderable required to render the the shadow; however this is not a necessary limitation and it can be exceeded if required.
Parameters:
shadowTechniqueThe technique being used to generate the shadow
lightThe light to generate the shadow from
indexBufferThe index buffer to build the renderables into, the current contents are assumed to be disposable.
extrudeVerticesIf true, this means this class should extrude the vertices of the back of the volume in software. If false, it will not be done (a vertex program is assumed).
extrusionDistanceThe distance to extrude the shadow volume
flagsTechnique-specific flags, see ShadowRenderableFlags

Implemented in Ogre::Entity, Ogre::ManualObject, Ogre::MovableObject, and Ogre::StaticGeometry::Region.

virtual const AxisAlignedBox& Ogre::ShadowCaster::getWorldBoundingBox ( bool  derive = false) const [pure virtual]

Get the world bounding box of the caster.

Implemented in Ogre::Entity, and Ogre::MovableObject.

virtual bool Ogre::ShadowCaster::hasEdgeList ( void  ) [pure virtual]

Returns whether the object has a valid edge list.

Implemented in Ogre::Entity, Ogre::ManualObject, Ogre::MovableObject, and Ogre::StaticGeometry::Region.

virtual void Ogre::ShadowCaster::updateEdgeListLightFacing ( EdgeData edgeData,
const Vector4 lightPos 
) [protected, virtual]

Tells the caster to perform the tasks necessary to update the edge data's light listing.

Can be overridden if the subclass needs to do additional things.

Parameters:
edgeDataThe edge information to update
lightPos4D vector representing the light, a directional light has w=0.0

The documentation for this class was generated from the following file:

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sat Jan 14 2012 18:40:54