OGRE
14.3
Object-Oriented Graphics Rendering Engine
|
This class defines the interface that must be implemented by shadow casters. More...
#include <OgreShadowCaster.h>
Public Types | |
typedef Ogre::ShadowRenderableList | 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. More... | |
const AxisAlignedBox & | getDarkCapBounds (const Light &light, Real dirLightExtrusionDist) const |
Gets the world space bounding box of the dark cap, as extruded using the light provided. More... | |
virtual EdgeData * | getEdgeList (void) |
Returns details of the edges which might be used to determine a silhouette. More... | |
const AxisAlignedBox & | getLightCapBounds (void) const |
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 const ShadowRenderableList & | getShadowVolumeRenderableList (const Light *light, const HardwareIndexBufferPtr &indexBuffer, size_t &indexBufferUsedSize, float extrusionDistance, int flags=0) |
Gets an list of the renderables required to render the shadow volume. More... | |
virtual const AxisAlignedBox & | getWorldBoundingBox (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... | |
This class defines the interface that must be implemented by shadow casters.
|
inlinevirtual |
|
pure virtual |
Returns whether or not this object currently casts a shadow.
Implemented in Ogre::MovableObject.
|
inlinevirtual |
Returns details of the edges which might be used to determine a silhouette.
Reimplemented in Ogre::StaticGeometry::Region, Ogre::ManualObject, and Ogre::Entity.
|
inline |
Returns whether the object has a valid edge list.
|
pure virtual |
Get the world bounding box of the caster.
Implemented in Ogre::PortalBase, Ogre::MovableObject, and Ogre::Entity.
|
inline |
Gets the world space bounding box of the light cap.
const AxisAlignedBox& Ogre::ShadowCaster::getDarkCapBounds | ( | const Light & | light, |
Real | dirLightExtrusionDist | ||
) | const |
Gets the world space bounding box of the dark cap, as extruded using the light provided.
|
virtual |
Gets an list of the renderables required to render the shadow volume.
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.
light | The light to generate the shadow from. |
indexBuffer | The index buffer to build the renderables into, the current contents are assumed to be disposable. |
indexBufferUsedSize | If 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. |
extrusionDistance | The distance to extrude the shadow volume. |
flags | Technique-specific flags, see ShadowRenderableFlags. |
Reimplemented in Ogre::StaticGeometry::Region, Ogre::Entity, and Ogre::ManualObject.
|
static |
Common implementation of releasing shadow renderables.
|
static |
Utility method for extruding vertices based on a light.
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.
vertexBuffer | The vertex buffer containing ONLY xyz position values, which must be originalVertexCount * 2 * 3 floats long. |
originalVertexCount | The 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. |
lightPos | 4D light position in object space, when w=0.0f this represents a directional light. |
extrudeDist | The distance to extrude. |
Get the distance to extrude for a point/spot light.
Implemented in Ogre::MovableObject.