28#ifndef __ShadowCaster_H__
29#define __ShadowCaster_H__
189 size_t originalVertexCount,
const Vector4& lightPos,
Real extrudeDist);
241 Real extrudeDist)
const;
A 3D box aligned with the x/y/z axes.
A viewpoint from which the scene will be rendered.
This class contains the information required to describe the edge connectivity of a given set of vert...
Shared pointer implementation used to share index buffers.
Shared pointer implementation used to share vertex buffers.
Representation of a dynamic light source in the scene.
Class encapsulating a standard 4x4 homogeneous matrix.
'New' rendering operation using vertex buffers.
This class defines the interface that must be implemented by shadow casters.
virtual bool getCastShadows(void) const =0
Returns whether or not this object currently casts a shadow.
virtual void generateShadowVolume(EdgeData *edgeData, const HardwareIndexBufferSharedPtr &indexBuffer, size_t &indexBufferUsedSize, 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,...
virtual const AxisAlignedBox & getDarkCapBounds(const Light &light, Real dirLightExtrusionDist) const =0
Gets the world space bounding box of the dark cap, as extruded using the light provided.
Real getExtrusionDistance(const Vector3 &objectPos, const Light *light) const
Helper method for calculating extrusion distance.
VectorIterator< ShadowRenderableList > ShadowRenderableListIterator
virtual Real getPointExtrusionDistance(const Light *l) const =0
Get the distance to extrude for a point/spot light.
virtual bool hasEdgeList(void)=0
Returns whether the object has a valid edge list.
virtual void extrudeBounds(AxisAlignedBox &box, const Vector4 &lightPos, Real extrudeDist) const
Utility method for extruding a bounding box.
virtual void updateEdgeListLightFacing(EdgeData *edgeData, const Vector4 &lightPos)
Tells the caster to perform the tasks necessary to update the edge data's light listing.
static void extrudeVertices(const HardwareVertexBufferSharedPtr &vertexBuffer, size_t originalVertexCount, const Vector4 &lightPos, Real extrudeDist)
Utility method for extruding vertices based on a light.
virtual const AxisAlignedBox & getLightCapBounds(void) const =0
Gets the world space bounding box of the light cap.
virtual EdgeData * getEdgeList(void)=0
Returns details of the edges which might be used to determine a silhouette.
vector< ShadowRenderable * >::type ShadowRenderableList
virtual ShadowRenderableListIterator getShadowVolumeRenderableIterator(ShadowTechnique shadowTechnique, const Light *light, HardwareIndexBufferSharedPtr *indexBuffer, size_t *indexBufferUsedSize, bool extrudeVertices, Real extrusionDistance, unsigned long flags=0)=0
Gets an iterator over the renderables required to render the shadow volume.
virtual const AxisAlignedBox & getWorldBoundingBox(bool derive=false) const =0
Get the world bounding box of the caster.
virtual bool isVisible(void) const
Should this ShadowRenderable be treated as visible?
const MaterialPtr & getMaterial(void) const
Retrieves a weak reference to the material this renderable object uses.
ShadowRenderable * getLightCapRenderable(void)
Get the light cap version of this renderable.
const LightList & getLights(void) const
Gets a list of lights, ordered relative to how close they are to this renderable.
void getRenderOperation(RenderOperation &op)
Gets the render operation required to send this object to the frame buffer.
virtual ~ShadowRenderable()
void getWorldTransforms(Matrix4 *xform) const =0
Gets the world transform matrix / matrices for this renderable object.
bool isLightCapSeparate(void) const
Does this renderable require a separate light cap?
void setMaterial(const MaterialPtr &mat)
Set the material to be used by the shadow, should be set by the caller before adding to a render queu...
virtual void rebindIndexBuffer(const HardwareIndexBufferSharedPtr &indexBuffer)=0
This function informs the shadow renderable that the global index buffer from the SceneManager has be...
RenderOperation mRenderOp
ShadowRenderable * mLightCap
Real getSquaredViewDepth(const Camera *) const
Returns the camera-relative squared depth of this renderable.
ShadowRenderable()
Used only if isLightCapSeparate == true.
RenderOperation * getRenderOperationForUpdate(void)
Get the internal render operation for set up.
Standard 3-dimensional vector.
4-dimensional homogeneous vector.
Concrete IteratorWrapper for nonconst access to the underlying container.
ShadowTechnique
An enumeration of broad shadow techniques.
HashedVector< Light * > LightList
ShadowRenderableFlags
A set of flags that can be used to influence ShadowRenderable creation.
@ SRF_INCLUDE_DARK_CAP
For shadow volume techniques only, generate a dark cap on the volume.
@ SRF_INCLUDE_LIGHT_CAP
For shadow volume techniques only, generate a light cap on the volume.
@ SRF_EXTRUDE_TO_INFINITY
For shadow volume techniques only, indicates volume is extruded to infinity.
SceneCtlAllocatedObject ShadowDataAlloc
SharedPtr< Material > MaterialPtr
float Real
Software floating point type.