OGRE  1.12.13
Object-Oriented Graphics Rendering Engine
Ogre::ShadowCaster Class Referenceabstract

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

#include <OgreShadowCaster.h>

+ Inheritance diagram for Ogre::ShadowCaster:

Public Types

typedef std::vector< ShadowRenderable * > ShadowRenderableList
 
typedef VectorIterator< ShadowRenderableListShadowRenderableListIterator
 

Public Member Functions

virtual ~ShadowCaster ()
 
virtual bool getCastShadows (void) const =0
 Returns whether or not this object currently casts a shadow. More...
 
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. More...
 
virtual EdgeDatagetEdgeList (void)=0
 Returns details of the edges which might be used to determine a silhouette. More...
 
virtual const AxisAlignedBoxgetLightCapBounds (void) const =0
 Gets the world space bounding box of the light cap. More...
 
virtual Real getPointExtrusionDistance (const Light *l) const =0
 Get the distance to extrude for a point/spot light. More...
 
virtual ShadowRenderableListIterator getShadowVolumeRenderableIterator (ShadowTechnique shadowTechnique, const Light *light, HardwareIndexBufferSharedPtr *indexBuffer, size_t *indexBufferUsedSize, bool extrudeVertices, Real extrusionDistance, unsigned long flags=0)
 
virtual const ShadowRenderableListgetShadowVolumeRenderableList (ShadowTechnique shadowTechnique, const Light *light, HardwareIndexBufferSharedPtr *indexBuffer, size_t *indexBufferUsedSize, bool extrudeVertices, Real extrusionDistance, unsigned long flags=0)
 Gets an list of the renderables required to render the shadow volume. More...
 
virtual const AxisAlignedBoxgetWorldBoundingBox (bool derive=false) const =0
 Get the world bounding box of the caster. More...
 
bool hasEdgeList ()
 Returns whether the object has a valid edge list. More...
 

Static Public Member Functions

static void clearShadowRenderableList (ShadowRenderableList &shadowRenderables)
 Common implementation of releasing shadow renderables. More...
 
static void extrudeVertices (const HardwareVertexBufferSharedPtr &vertexBuffer, size_t originalVertexCount, const Vector4 &lightPos, Real extrudeDist)
 Utility method for extruding vertices based on a light. More...
 

Detailed Description

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

Member Typedef Documentation

◆ ShadowRenderableList

◆ ShadowRenderableListIterator

Constructor & Destructor Documentation

◆ ~ShadowCaster()

virtual Ogre::ShadowCaster::~ShadowCaster ( )
inlinevirtual

Member Function Documentation

◆ getCastShadows()

virtual bool Ogre::ShadowCaster::getCastShadows ( void  ) const
pure virtual

Returns whether or not this object currently casts a shadow.

Implemented in Ogre::MovableObject.

◆ getEdgeList()

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::StaticGeometry::Region, and Ogre::MovableObject.

◆ hasEdgeList()

bool Ogre::ShadowCaster::hasEdgeList ( )
inline

Returns whether the object has a valid edge list.

◆ getWorldBoundingBox()

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

Get the world bounding box of the caster.

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

◆ getLightCapBounds()

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

Gets the world space bounding box of the light cap.

Implemented in Ogre::MovableObject.

◆ getDarkCapBounds()

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.

◆ getShadowVolumeRenderableList()

virtual const ShadowRenderableList& Ogre::ShadowCaster::getShadowVolumeRenderableList ( ShadowTechnique  shadowTechnique,
const Light light,
HardwareIndexBufferSharedPtr indexBuffer,
size_t *  indexBufferUsedSize,
bool  extrudeVertices,
Real  extrusionDistance,
unsigned long  flags = 0 
)
inlinevirtual

Gets an list of 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.
indexBufferUsedSizeIf the rest of buffer is enough than it would be locked with HBL_NO_OVERWRITE semantic and indexBufferUsedSize would be increased, otherwise HBL_DISCARD would be used and indexBufferUsedSize would be reset.
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.

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

◆ getShadowVolumeRenderableIterator()

virtual ShadowRenderableListIterator Ogre::ShadowCaster::getShadowVolumeRenderableIterator ( ShadowTechnique  shadowTechnique,
const Light light,
HardwareIndexBufferSharedPtr indexBuffer,
size_t *  indexBufferUsedSize,
bool  extrudeVertices,
Real  extrusionDistance,
unsigned long  flags = 0 
)
inlinevirtual

◆ clearShadowRenderableList()

static void Ogre::ShadowCaster::clearShadowRenderableList ( ShadowRenderableList shadowRenderables)
static

Common implementation of releasing shadow renderables.

◆ extrudeVertices()

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.

◆ getPointExtrusionDistance()

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.


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