\hypertarget{class_ogre_1_1_shadow_caster}{}\doxysection{Ogre\+::Shadow\+Caster Class Reference}
\label{class_ogre_1_1_shadow_caster}\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}}


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




{\ttfamily \#include $<$Ogre\+Shadow\+Caster.\+h$>$}



Inheritance diagram for Ogre\+::Shadow\+Caster\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{class_ogre_1_1_shadow_caster__inherit__graph}
\end{center}
\end{figure}
\doxysubsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
typedef std\+::vector$<$ \mbox{\hyperlink{class_ogre_1_1_shadow_renderable}{Shadow\+Renderable}} $\ast$ $>$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Shadow\+Renderable\+List}}
\item 
typedef \mbox{\hyperlink{class_ogre_1_1_vector_iterator}{Vector\+Iterator}}$<$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Shadow\+Renderable\+List}} $>$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}{Shadow\+Renderable\+List\+Iterator}}
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual \mbox{\hyperlink{class_ogre_1_1_shadow_caster_aa09c6e22f9879c123355bca19c1b7131}{$\sim$\+Shadow\+Caster}} ()
\item 
virtual bool \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a35d47283265f36187263b2738e16c563}{get\+Cast\+Shadows}} (void) const =0
\begin{DoxyCompactList}\small\item\em Returns whether or not this object currently casts a shadow. \end{DoxyCompactList}\item 
virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}} \& \mbox{\hyperlink{class_ogre_1_1_shadow_caster_aaa198e27c2c631a41f8f5f51ad7d7261}{get\+Dark\+Cap\+Bounds}} (const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} \&light, \mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}} dir\+Light\+Extrusion\+Dist) const =0
\begin{DoxyCompactList}\small\item\em Gets the world space bounding box of the dark cap, as extruded using the light provided. \end{DoxyCompactList}\item 
virtual \mbox{\hyperlink{class_ogre_1_1_edge_data}{Edge\+Data}} $\ast$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a9ec42d43470c2e2b0f6f05221371a786}{get\+Edge\+List}} (void)=0
\begin{DoxyCompactList}\small\item\em Returns details of the edges which might be used to determine a silhouette. \end{DoxyCompactList}\item 
virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}} \& \mbox{\hyperlink{class_ogre_1_1_shadow_caster_ad792b8137f18ea000c5bcbc5ae48814a}{get\+Light\+Cap\+Bounds}} (void) const =0
\begin{DoxyCompactList}\small\item\em Gets the world space bounding box of the light cap. \end{DoxyCompactList}\item 
virtual \mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}} \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a7f8a7e2e3a9876a8453e054335d7d23c}{get\+Point\+Extrusion\+Distance}} (const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} $\ast$l) const =0
\begin{DoxyCompactList}\small\item\em Get the distance to extrude for a point/spot light. \end{DoxyCompactList}\item 
virtual \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}{Shadow\+Renderable\+List\+Iterator}} \mbox{\hyperlink{class_ogre_1_1_shadow_caster_afaf1dfad22f842b9b2cb2a0beaad98eb}{get\+Shadow\+Volume\+Renderable\+Iterator}} (\mbox{\hyperlink{group___general_ga79dcd426d291c31072c1ad6f183715d6}{Shadow\+Technique}} shadow\+Technique, const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} $\ast$light, \mbox{\hyperlink{namespace_ogre_ae906cf8e579ba8ade19879ec05b1a456}{Hardware\+Index\+Buffer\+Shared\+Ptr}} $\ast$index\+Buffer, size\+\_\+t $\ast$index\+Buffer\+Used\+Size, bool \mbox{\hyperlink{class_ogre_1_1_shadow_caster_acae2215c051989d544f34083a0a9bfa2}{extrude\+Vertices}}, \mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}} extrusion\+Distance, unsigned long flags=0)=0
\begin{DoxyCompactList}\small\item\em Gets an iterator over the renderables required to render the shadow volume. \end{DoxyCompactList}\item 
virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}} \& \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a6ab7144efe1ca481a4a9a89365ed522d}{get\+World\+Bounding\+Box}} (bool derive=false) const =0
\begin{DoxyCompactList}\small\item\em Get the world bounding box of the caster. \end{DoxyCompactList}\item 
virtual bool \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a99cc616f547693f39fa354e6600368e6}{has\+Edge\+List}} (void)=0
\begin{DoxyCompactList}\small\item\em Returns whether the object has a valid edge list. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static void \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a55f1de18b85d2d276b2ea38a138b4e3e}{clear\+Shadow\+Renderable\+List}} (\mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Shadow\+Renderable\+List}} \&shadow\+Renderables)
\begin{DoxyCompactList}\small\item\em Common implementation of releasing shadow renderables. \end{DoxyCompactList}\item 
static void \mbox{\hyperlink{class_ogre_1_1_shadow_caster_acae2215c051989d544f34083a0a9bfa2}{extrude\+Vertices}} (const \mbox{\hyperlink{namespace_ogre_a05ef9b65d4ed446b994636e371bf5aab}{Hardware\+Vertex\+Buffer\+Shared\+Ptr}} \&vertex\+Buffer, size\+\_\+t original\+Vertex\+Count, const \mbox{\hyperlink{namespace_ogre_a739a289a4d5235f5f509a1795f5ffd5b}{Vector4}} \&light\+Pos, \mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}} extrude\+Dist)
\begin{DoxyCompactList}\small\item\em Utility method for extruding vertices based on a light. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
This class defines the interface that must be implemented by shadow casters. 

\doxysubsection{Member Typedef Documentation}
\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}\label{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!ShadowRenderableList@{ShadowRenderableList}}
\index{ShadowRenderableList@{ShadowRenderableList}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{ShadowRenderableList}{ShadowRenderableList}}
{\footnotesize\ttfamily typedef std\+::vector$<$\mbox{\hyperlink{class_ogre_1_1_shadow_renderable}{Shadow\+Renderable}}$\ast$$>$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Ogre\+::\+Shadow\+Caster\+::\+Shadow\+Renderable\+List}}}

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}\label{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!ShadowRenderableListIterator@{ShadowRenderableListIterator}}
\index{ShadowRenderableListIterator@{ShadowRenderableListIterator}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{ShadowRenderableListIterator}{ShadowRenderableListIterator}}
{\footnotesize\ttfamily typedef \mbox{\hyperlink{class_ogre_1_1_vector_iterator}{Vector\+Iterator}}$<$\mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Shadow\+Renderable\+List}}$>$ \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}{Ogre\+::\+Shadow\+Caster\+::\+Shadow\+Renderable\+List\+Iterator}}}



\doxysubsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_aa09c6e22f9879c123355bca19c1b7131}\label{class_ogre_1_1_shadow_caster_aa09c6e22f9879c123355bca19c1b7131}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!````~ShadowCaster@{$\sim$ShadowCaster}}
\index{````~ShadowCaster@{$\sim$ShadowCaster}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{$\sim$ShadowCaster()}{~ShadowCaster()}}
{\footnotesize\ttfamily virtual Ogre\+::\+Shadow\+Caster\+::$\sim$\+Shadow\+Caster (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [virtual]}}



\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a35d47283265f36187263b2738e16c563}\label{class_ogre_1_1_shadow_caster_a35d47283265f36187263b2738e16c563}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getCastShadows@{getCastShadows}}
\index{getCastShadows@{getCastShadows}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getCastShadows()}{getCastShadows()}}
{\footnotesize\ttfamily virtual bool Ogre\+::\+Shadow\+Caster\+::get\+Cast\+Shadows (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



Returns whether or not this object currently casts a shadow. 



Implemented in \mbox{\hyperlink{class_ogre_1_1_movable_object_a015c3801632c98bca5dbb5aa3da1aa24}{Ogre\+::\+Movable\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a9ec42d43470c2e2b0f6f05221371a786}\label{class_ogre_1_1_shadow_caster_a9ec42d43470c2e2b0f6f05221371a786}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getEdgeList@{getEdgeList}}
\index{getEdgeList@{getEdgeList}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getEdgeList()}{getEdgeList()}}
{\footnotesize\ttfamily virtual \mbox{\hyperlink{class_ogre_1_1_edge_data}{Edge\+Data}}$\ast$ Ogre\+::\+Shadow\+Caster\+::get\+Edge\+List (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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



Implemented in \mbox{\hyperlink{class_ogre_1_1_static_geometry_1_1_region_a9a3050b74fbea1e074d51290599bad58}{Ogre\+::\+Static\+Geometry\+::\+Region}}, \mbox{\hyperlink{class_ogre_1_1_entity_ab3d3d4e4aef1e2831572c2c052d29aec}{Ogre\+::\+Entity}}, \mbox{\hyperlink{class_ogre_1_1_movable_object_a60b24cd45c8df45654dcfa14a1293a3b}{Ogre\+::\+Movable\+Object}}, and \mbox{\hyperlink{class_ogre_1_1_manual_object_a5a53798ccf0c34105122ee77dad0904d}{Ogre\+::\+Manual\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a99cc616f547693f39fa354e6600368e6}\label{class_ogre_1_1_shadow_caster_a99cc616f547693f39fa354e6600368e6}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!hasEdgeList@{hasEdgeList}}
\index{hasEdgeList@{hasEdgeList}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{hasEdgeList()}{hasEdgeList()}}
{\footnotesize\ttfamily virtual bool Ogre\+::\+Shadow\+Caster\+::has\+Edge\+List (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



Returns whether the object has a valid edge list. 



Implemented in \mbox{\hyperlink{class_ogre_1_1_static_geometry_1_1_region_a71b1355f7b9804dcd7133aeefb49401d}{Ogre\+::\+Static\+Geometry\+::\+Region}}, \mbox{\hyperlink{class_ogre_1_1_manual_object_aca367af24115649202a78ce1a4edd74d}{Ogre\+::\+Manual\+Object}}, \mbox{\hyperlink{class_ogre_1_1_entity_af155dfe2635fad3ed2aff25fcde75421}{Ogre\+::\+Entity}}, and \mbox{\hyperlink{class_ogre_1_1_movable_object_ab7c2a8be6a9bd59e6c69ee2d76945500}{Ogre\+::\+Movable\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a6ab7144efe1ca481a4a9a89365ed522d}\label{class_ogre_1_1_shadow_caster_a6ab7144efe1ca481a4a9a89365ed522d}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getWorldBoundingBox@{getWorldBoundingBox}}
\index{getWorldBoundingBox@{getWorldBoundingBox}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getWorldBoundingBox()}{getWorldBoundingBox()}}
{\footnotesize\ttfamily virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}}\& Ogre\+::\+Shadow\+Caster\+::get\+World\+Bounding\+Box (\begin{DoxyParamCaption}\item[{bool}]{derive = {\ttfamily false} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



Get the world bounding box of the caster. 



Implemented in \mbox{\hyperlink{class_ogre_1_1_entity_af4d9550a668f4435b335840ebd9750c0}{Ogre\+::\+Entity}}, \mbox{\hyperlink{class_ogre_1_1_movable_object_ae2a149aa0e0c9f3fb57f22d5f649247a}{Ogre\+::\+Movable\+Object}}, and \mbox{\hyperlink{class_ogre_1_1_portal_base_a30f8ee77782ed014f76977a39b72132d}{Ogre\+::\+Portal\+Base}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_ad792b8137f18ea000c5bcbc5ae48814a}\label{class_ogre_1_1_shadow_caster_ad792b8137f18ea000c5bcbc5ae48814a}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getLightCapBounds@{getLightCapBounds}}
\index{getLightCapBounds@{getLightCapBounds}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getLightCapBounds()}{getLightCapBounds()}}
{\footnotesize\ttfamily virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}}\& Ogre\+::\+Shadow\+Caster\+::get\+Light\+Cap\+Bounds (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



Gets the world space bounding box of the light cap. 



Implemented in \mbox{\hyperlink{class_ogre_1_1_movable_object_abbd832fa10445f3f47900304be5a44d8}{Ogre\+::\+Movable\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_aaa198e27c2c631a41f8f5f51ad7d7261}\label{class_ogre_1_1_shadow_caster_aaa198e27c2c631a41f8f5f51ad7d7261}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getDarkCapBounds@{getDarkCapBounds}}
\index{getDarkCapBounds@{getDarkCapBounds}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getDarkCapBounds()}{getDarkCapBounds()}}
{\footnotesize\ttfamily virtual const \mbox{\hyperlink{class_ogre_1_1_axis_aligned_box}{Axis\+Aligned\+Box}}\& Ogre\+::\+Shadow\+Caster\+::get\+Dark\+Cap\+Bounds (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} \&}]{light,  }\item[{\mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}}}]{dir\+Light\+Extrusion\+Dist }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



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



Implemented in \mbox{\hyperlink{class_ogre_1_1_movable_object_a5fb2e0899e7a2b7cb3c20120fe7ad429}{Ogre\+::\+Movable\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_afaf1dfad22f842b9b2cb2a0beaad98eb}\label{class_ogre_1_1_shadow_caster_afaf1dfad22f842b9b2cb2a0beaad98eb}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getShadowVolumeRenderableIterator@{getShadowVolumeRenderableIterator}}
\index{getShadowVolumeRenderableIterator@{getShadowVolumeRenderableIterator}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getShadowVolumeRenderableIterator()}{getShadowVolumeRenderableIterator()}}
{\footnotesize\ttfamily virtual \mbox{\hyperlink{class_ogre_1_1_shadow_caster_a7b0999d33e25db97d0449d6cf95cbecd}{Shadow\+Renderable\+List\+Iterator}} Ogre\+::\+Shadow\+Caster\+::get\+Shadow\+Volume\+Renderable\+Iterator (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{group___general_ga79dcd426d291c31072c1ad6f183715d6}{Shadow\+Technique}}}]{shadow\+Technique,  }\item[{const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} $\ast$}]{light,  }\item[{\mbox{\hyperlink{namespace_ogre_ae906cf8e579ba8ade19879ec05b1a456}{Hardware\+Index\+Buffer\+Shared\+Ptr}} $\ast$}]{index\+Buffer,  }\item[{size\+\_\+t $\ast$}]{index\+Buffer\+Used\+Size,  }\item[{bool}]{extrude\+Vertices,  }\item[{\mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}}}]{extrusion\+Distance,  }\item[{unsigned long}]{flags = {\ttfamily 0} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}



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

\begin{DoxyRemark}{Remarks}
Shadowable geometry should ideally be designed such that there is only one \mbox{\hyperlink{class_ogre_1_1_shadow_renderable}{Shadow\+Renderable}} required to render the the shadow; however this is not a necessary limitation and it can be exceeded if required. 
\end{DoxyRemark}

\begin{DoxyParams}{Parameters}
{\em shadow\+Technique} & The technique being used to generate the shadow. \\
\hline
{\em light} & The light to generate the shadow from. \\
\hline
{\em index\+Buffer} & The index buffer to build the renderables into, the current contents are assumed to be disposable. \\
\hline
{\em extrude\+Vertices} & If {\ttfamily 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). \\
\hline
{\em extrusion\+Distance} & The distance to extrude the shadow volume. \\
\hline
{\em flags} & Technique-\/specific flags, see Shadow\+Renderable\+Flags. \\
\hline
\end{DoxyParams}


Implemented in \mbox{\hyperlink{class_ogre_1_1_entity_aa1f9103c03d5c8deccfe368de289522f}{Ogre\+::\+Entity}}, \mbox{\hyperlink{class_ogre_1_1_static_geometry_1_1_region_aa3ea53926ce713132426bd49503a0a2b}{Ogre\+::\+Static\+Geometry\+::\+Region}}, \mbox{\hyperlink{class_ogre_1_1_movable_object_ab630117b036dfadbb08aab2b51c22e6c}{Ogre\+::\+Movable\+Object}}, and \mbox{\hyperlink{class_ogre_1_1_manual_object_a87917ee5f2096373753098bfc2e179cf}{Ogre\+::\+Manual\+Object}}.

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a55f1de18b85d2d276b2ea38a138b4e3e}\label{class_ogre_1_1_shadow_caster_a55f1de18b85d2d276b2ea38a138b4e3e}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!clearShadowRenderableList@{clearShadowRenderableList}}
\index{clearShadowRenderableList@{clearShadowRenderableList}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{clearShadowRenderableList()}{clearShadowRenderableList()}}
{\footnotesize\ttfamily static void Ogre\+::\+Shadow\+Caster\+::clear\+Shadow\+Renderable\+List (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_ogre_1_1_shadow_caster_ac7b3777c0e3521c021ec3a1c2c444039}{Shadow\+Renderable\+List}} \&}]{shadow\+Renderables }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Common implementation of releasing shadow renderables. 

\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_acae2215c051989d544f34083a0a9bfa2}\label{class_ogre_1_1_shadow_caster_acae2215c051989d544f34083a0a9bfa2}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!extrudeVertices@{extrudeVertices}}
\index{extrudeVertices@{extrudeVertices}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{extrudeVertices()}{extrudeVertices()}}
{\footnotesize\ttfamily static void Ogre\+::\+Shadow\+Caster\+::extrude\+Vertices (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{namespace_ogre_a05ef9b65d4ed446b994636e371bf5aab}{Hardware\+Vertex\+Buffer\+Shared\+Ptr}} \&}]{vertex\+Buffer,  }\item[{size\+\_\+t}]{original\+Vertex\+Count,  }\item[{const \mbox{\hyperlink{namespace_ogre_a739a289a4d5235f5f509a1795f5ffd5b}{Vector4}} \&}]{light\+Pos,  }\item[{\mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}}}]{extrude\+Dist }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Utility method for extruding vertices based on a light. 

\begin{DoxyRemark}{Remarks}
Unfortunately, because D3D cannot handle homogeneous (4D) position coordinates in the fixed-\/function pipeline (GL can, but we have to be cross-\/\+A\+PI), 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. 
\end{DoxyRemark}

\begin{DoxyParams}{Parameters}
{\em vertex\+Buffer} & The vertex buffer containing O\+N\+LY xyz position values, which must be original\+Vertex\+Count $\ast$ 2 $\ast$ 3 floats long. \\
\hline
{\em original\+Vertex\+Count} & 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 \mbox{\hyperlink{class_ogre_1_1_vertex_data_a35751c0e63acf6def8a1cf101abd1b28}{Vertex\+Data\+::prepare\+For\+Shadow\+Volume}}) to provide the extruded area of the buffer. \\
\hline
{\em light\+Pos} & 4D light position in object space, when w=0.\+0f this represents a directional light. \\
\hline
{\em extrude\+Dist} & The distance to extrude. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_shadow_caster_a7f8a7e2e3a9876a8453e054335d7d23c}\label{class_ogre_1_1_shadow_caster_a7f8a7e2e3a9876a8453e054335d7d23c}} 
\index{Ogre::ShadowCaster@{Ogre::ShadowCaster}!getPointExtrusionDistance@{getPointExtrusionDistance}}
\index{getPointExtrusionDistance@{getPointExtrusionDistance}!Ogre::ShadowCaster@{Ogre::ShadowCaster}}
\doxysubsubsection{\texorpdfstring{getPointExtrusionDistance()}{getPointExtrusionDistance()}}
{\footnotesize\ttfamily virtual \mbox{\hyperlink{namespace_ogre_aa3a7b6dfb905e6572d62f0dfa3d4274d}{Real}} Ogre\+::\+Shadow\+Caster\+::get\+Point\+Extrusion\+Distance (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{class_ogre_1_1_light}{Light}} $\ast$}]{l }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}



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



Implemented in \mbox{\hyperlink{class_ogre_1_1_movable_object_a82b518c593a2777525a02fac1e0028eb}{Ogre\+::\+Movable\+Object}}.



The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{_ogre_shadow_caster_8h}{Ogre\+Shadow\+Caster.\+h}}\end{DoxyCompactItemize}
