\hypertarget{class_ogre_1_1_sub_mesh}{}\section{Ogre\+:\+:Sub\+Mesh Class Reference}
\label{class_ogre_1_1_sub_mesh}\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}


Defines a part of a complete mesh.  




{\ttfamily \#include $<$Ogre\+Sub\+Mesh.\+h$>$}



Inheritance diagram for Ogre\+:\+:Sub\+Mesh\+:
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=169pt]{class_ogre_1_1_sub_mesh__inherit__graph}
\end{center}
\end{figure}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
typedef \hyperlink{class_ogre_1_1_const_map_iterator}{Const\+Map\+Iterator}$<$ \hyperlink{group___general_ga5dafc9e68bde8099ec5ad6c94e4cf19b}{Alias\+Texture\+Name\+Pair\+List} $>$ \hyperlink{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}{Alias\+Texture\+Iterator}
\item 
typedef \hyperlink{class_ogre_1_1_map_iterator}{Map\+Iterator}$<$ \hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Vertex\+Bone\+Assignment\+List} $>$ \hyperlink{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}{Bone\+Assignment\+Iterator}
\item 
typedef std\+::vector$<$ unsigned short $>$ \hyperlink{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}{Index\+Map}
\begin{DoxyCompactList}\small\item\em Dedicated index map for translate blend index to bone index (only valid if use\+Shared\+Vertices = false). \end{DoxyCompactList}\item 
typedef std\+::vector$<$ \hyperlink{class_ogre_1_1_index_data}{Index\+Data} $\ast$ $>$ \hyperlink{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}{L\+O\+D\+Face\+List}
\item 
typedef std\+::multimap$<$ size\+\_\+t, \hyperlink{group___animation_gaf7318ddaeea193a759de6349554ec3a4}{Vertex\+Bone\+Assignment} $>$ \hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Vertex\+Bone\+Assignment\+List}
\begin{DoxyCompactList}\small\item\em Multimap of verex bone assignments (orders by vertex index) \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{class_ogre_1_1_sub_mesh_aa5e04097716119c5cfed229c8425fc60}{Sub\+Mesh} ()
\item 
\hyperlink{class_ogre_1_1_sub_mesh_ad0a51b024271c2042968e9e967dd39e8}{$\sim$\+Sub\+Mesh} ()
\item 
void \hyperlink{class_ogre_1_1_sub_mesh_acd127d162c4271ac6b844161e1ea777a}{\+\_\+compile\+Bone\+Assignments} (void)
\begin{DoxyCompactList}\small\item\em Must be called once to compile bone assignments into geometry buffer. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_a4770787312a616e8735c5d1a864bb1cb}{\+\_\+get\+Render\+Operation} (\hyperlink{class_ogre_1_1_render_operation}{Render\+Operation} \&rend, \hyperlink{namespace_ogre_af851e71354d841df7138f9877c6f5931}{ushort} lod\+Index=0)
\begin{DoxyCompactList}\small\item\em Returns a \hyperlink{class_ogre_1_1_render_operation}{Render\+Operation} structure required to render this mesh. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_abdd303710ef1131801f5017ef2eda1f2}{add\+Bone\+Assignment} (const \hyperlink{group___animation_gaf7318ddaeea193a759de6349554ec3a4}{Vertex\+Bone\+Assignment} \&vert\+Bone\+Assign)
\begin{DoxyCompactList}\small\item\em Assigns a vertex to a bone with a given weight, for skeletal animation. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_abe04d5342331ad434e47ca9b934a7622}{add\+Texture\+Alias} (const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&alias\+Name, const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&texture\+Name)
\begin{DoxyCompactList}\small\item\em Adds the alias or replaces an existing one and associates the texture name to it. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_a2c29dd4601e67d3f6d26d7d74c017995}{clear\+Bone\+Assignments} (void)
\begin{DoxyCompactList}\small\item\em Removes all bone assignments for this mesh. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh} $\ast$ \hyperlink{class_ogre_1_1_sub_mesh_a2ec4714cce3f0c922670c038ff95a5b7}{clone} (const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&new\+Name, \hyperlink{class_ogre_1_1_mesh}{Mesh} $\ast$parent\+Mesh=0)
\begin{DoxyCompactList}\small\item\em Makes a copy of this submesh object and gives it a new name. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_af32a20ce7dd6ca470ce7e33e5dc7d7d9}{generate\+Extremes} (size\+\_\+t count)
\begin{DoxyCompactList}\small\item\em Generate the submesh extremes (. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}{Alias\+Texture\+Iterator} \hyperlink{class_ogre_1_1_sub_mesh_ab284e1061042026fa872f3b76b701caf}{get\+Alias\+Texture\+Iterator} (void) const
\begin{DoxyCompactList}\small\item\em Gets an constant iterator to access all texture alias names assigned to this submesh. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}{Bone\+Assignment\+Iterator} \hyperlink{class_ogre_1_1_sub_mesh_ab37844a411ccea1cf06d1c95e10b71e2}{get\+Bone\+Assignment\+Iterator} (void)
\begin{DoxyCompactList}\small\item\em Gets an iterator for access all bone assignments. \end{DoxyCompactList}\item 
const \hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Vertex\+Bone\+Assignment\+List} \& \hyperlink{class_ogre_1_1_sub_mesh_a03901f7c72762aa3794af16b88c3e196}{get\+Bone\+Assignments} ()
\begin{DoxyCompactList}\small\item\em Gets a const reference to the list of bone assignments. \end{DoxyCompactList}\item 
const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \& \hyperlink{class_ogre_1_1_sub_mesh_a78df2f25365fcf452af62aacd85c83a3}{get\+Material\+Name} (void) const
\item 
size\+\_\+t \hyperlink{class_ogre_1_1_sub_mesh_a0aca2c1ed5b5f115e882ea2481bb1769}{get\+Texture\+Alias\+Count} (void) const
\begin{DoxyCompactList}\small\item\em Gets the number of texture aliases assigned to the sub mesh. \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_af9bf141e65f964f131229501804940e5}{get\+Vertex\+Animation\+Includes\+Normals} () const
\begin{DoxyCompactList}\small\item\em Returns whether animation on dedicated vertex data includes normals. \end{DoxyCompactList}\item 
\hyperlink{group___animation_ga9046e6e0d12c46c57a9056987e9d158e}{Vertex\+Animation\+Type} \hyperlink{class_ogre_1_1_sub_mesh_add91fed2eb2a3330b2004248572642e4}{get\+Vertex\+Animation\+Type} (void) const
\begin{DoxyCompactList}\small\item\em Get the type of any vertex animation used by dedicated geometry. \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_a7277f01fb328b268deffb94b351c5c1d}{has\+Texture\+Aliases} (void) const
\begin{DoxyCompactList}\small\item\em returns true if the sub mesh has texture aliases \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_acae45080848d0e53474aaf11c0ce5209}{is\+Build\+Edges\+Enabled} (void) const
\begin{DoxyCompactList}\small\item\em Returns true(by default) if the submesh should be included in the mesh Edge\+List, otherwise returns false. \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_a6c7371d6d8aaa3e8117f26b3be958b44}{is\+Mat\+Initialised} (void) const
\begin{DoxyCompactList}\small\item\em Returns true if a material has been assigned to the submesh, otherwise returns false. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_a8446f2b030ecd536933c0a39cdb3d61a}{remove\+All\+Texture\+Aliases} (void)
\begin{DoxyCompactList}\small\item\em removes all texture aliases from the sub mesh \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_a9007b549c95c6fb1402818bf55b65b16}{remove\+Texture\+Alias} (const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&alias\+Name)
\begin{DoxyCompactList}\small\item\em Remove a specific texture alias name from the sub mesh. \end{DoxyCompactList}\item 
void \hyperlink{class_ogre_1_1_sub_mesh_acc667dc8cf61d4fa25f005fd5cb9082a}{set\+Build\+Edges\+Enabled} (bool b)
\item 
void \hyperlink{class_ogre_1_1_sub_mesh_a8ad6c0cae3c325cd8953ab66bd97e72d}{set\+Material\+Name} (const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&mat\+Name, const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&group\+Name=\hyperlink{class_ogre_1_1_resource_group_manager_a2a3698b4303d782938455e649b2e22a2}{Resource\+Group\+Manager\+::\+A\+U\+T\+O\+D\+E\+T\+E\+C\+T\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+G\+R\+O\+U\+P\+\_\+\+N\+A\+ME})
\begin{DoxyCompactList}\small\item\em Sets the name of the \hyperlink{class_ogre_1_1_material}{Material} which this \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh} will use. \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_a2107e531c7161b312571d8977f9539e2}{update\+Material\+Using\+Texture\+Aliases} (void)
\begin{DoxyCompactList}\small\item\em The current material used by the submesh is copied into a new material and the submesh\textquotesingle{}s texture aliases are applied if the current texture alias names match those found in the original material. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Public Attributes}
\begin{DoxyCompactItemize}
\item 
\hyperlink{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}{Index\+Map} \hyperlink{class_ogre_1_1_sub_mesh_ae6b4c1d0724fe6a9a961b73bd646d3cf}{blend\+Index\+To\+Bone\+Index\+Map}
\item 
std\+::vector$<$ \hyperlink{class_ogre_1_1_vector3}{Vector3} $>$ \hyperlink{class_ogre_1_1_sub_mesh_ac63766998cb839ca582947d7545214f5}{extremity\+Points}
\begin{DoxyCompactList}\small\item\em A list of extreme points on the submesh (optional). \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_index_data}{Index\+Data} $\ast$ \hyperlink{class_ogre_1_1_sub_mesh_aad428fa6595c7fb01ef7543e5d8d6454}{index\+Data}
\begin{DoxyCompactList}\small\item\em Face index data. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}{L\+O\+D\+Face\+List} \hyperlink{class_ogre_1_1_sub_mesh_a821d2587eb2dc9746a2b1a5c0deada32}{m\+Lod\+Face\+List}
\item 
\hyperlink{class_ogre_1_1_render_operation_a7a272218dae54048c87f31176c19e10d}{Render\+Operation\+::\+Operation\+Type} \hyperlink{class_ogre_1_1_sub_mesh_a10ed3ef8bb24a001bb89dc9e3cd88c31}{operation\+Type}
\begin{DoxyCompactList}\small\item\em The render operation type used to render this submesh. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_mesh}{Mesh} $\ast$ \hyperlink{class_ogre_1_1_sub_mesh_ac2b9fd25eb56625716d9e8915f4e0e7d}{parent}
\begin{DoxyCompactList}\small\item\em Reference to parent \hyperlink{class_ogre_1_1_mesh}{Mesh} (not a smart pointer so child does not keep parent alive). \end{DoxyCompactList}\item 
bool \hyperlink{class_ogre_1_1_sub_mesh_a931e3764e3bf1c3ef7431fc852770fb1}{use\+Shared\+Vertices}
\begin{DoxyCompactList}\small\item\em Indicates if this submesh shares vertex data with other meshes or whether it has it\textquotesingle{}s own vertices. \end{DoxyCompactList}\item 
\hyperlink{class_ogre_1_1_vertex_data}{Vertex\+Data} $\ast$ \hyperlink{class_ogre_1_1_sub_mesh_a1862a3ec9a3f2ed4ade8af69b41a809d}{vertex\+Data}
\begin{DoxyCompactList}\small\item\em Dedicated vertex data (only valid if use\+Shared\+Vertices = false). \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Friends}
\begin{DoxyCompactItemize}
\item 
class \hyperlink{class_ogre_1_1_sub_mesh_aa41a130f156b145bffb3f4b5172c4c93}{Mesh}
\item 
class \hyperlink{class_ogre_1_1_sub_mesh_a48305c54a01e0c7a3376ea0a077c467f}{Mesh\+Serializer\+Impl}
\item 
class \hyperlink{class_ogre_1_1_sub_mesh_aef9901d67ded13a151aa3d4fde3a7b17}{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1}
\item 
class \hyperlink{class_ogre_1_1_sub_mesh_ae60e96165c5d5495195fa0d49f031372}{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2}
\end{DoxyCompactItemize}


\subsection{Detailed Description}
Defines a part of a complete mesh. 

\begin{DoxyRemark}{Remarks}
Meshes which make up the definition of a discrete 3D object are made up of potentially multiple parts. This is because different parts of the mesh may use different materials or use different vertex formats, such that a rendering state change is required between them. 
\end{DoxyRemark}
\begin{DoxyParagraph}{}
Like the \hyperlink{class_ogre_1_1_mesh}{Mesh} class, instantiations of 3D objects in the scene share the \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh} instances, and have the option of overriding their material differences on a per-\/object basis if required. See the \hyperlink{class_ogre_1_1_sub_entity}{Sub\+Entity} class for more information. 
\end{DoxyParagraph}


\subsection{Member Typedef Documentation}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}\label{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Index\+Map@{Index\+Map}}
\index{Index\+Map@{Index\+Map}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Index\+Map}{IndexMap}}
{\footnotesize\ttfamily typedef std\+::vector$<$unsigned short$>$ \hyperlink{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}{Ogre\+::\+Sub\+Mesh\+::\+Index\+Map}}



Dedicated index map for translate blend index to bone index (only valid if use\+Shared\+Vertices = false). 

\begin{DoxyRemark}{Remarks}
This data is completely owned by this submesh. 
\end{DoxyRemark}
\begin{DoxyParagraph}{}
We collect actually used bones of all bone assignments, and build the blend index in \textquotesingle{}packed\textquotesingle{} form, then the range of the blend index in vertex data V\+E\+S\+\_\+\+B\+L\+E\+N\+D\+\_\+\+I\+N\+D\+I\+C\+ES element is continuous, with no gaps. Thus, by minimising the world matrix array constants passing to G\+PU, we can support more bones for a mesh when hardware skinning is used. The hardware skinning support limit is applied to each set of vertex data in the mesh, in other words, the hardware skinning support limit is applied only to the actually used bones of each Sub\+Meshes, not all bones across the entire \hyperlink{class_ogre_1_1_mesh}{Mesh}. 
\end{DoxyParagraph}
\begin{DoxyParagraph}{}
Because the blend index is different to the bone index, therefore, we use the index map to translate the blend index to bone index. 
\end{DoxyParagraph}
\begin{DoxyParagraph}{}
The use of shared or non-\/shared index map is determined when model data is converted to the O\+G\+RE .mesh format. 
\end{DoxyParagraph}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}\label{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!L\+O\+D\+Face\+List@{L\+O\+D\+Face\+List}}
\index{L\+O\+D\+Face\+List@{L\+O\+D\+Face\+List}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{L\+O\+D\+Face\+List}{LODFaceList}}
{\footnotesize\ttfamily typedef std\+::vector$<$\hyperlink{class_ogre_1_1_index_data}{Index\+Data}$\ast$$>$ \hyperlink{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}{Ogre\+::\+Sub\+Mesh\+::\+L\+O\+D\+Face\+List}}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}\label{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Vertex\+Bone\+Assignment\+List@{Vertex\+Bone\+Assignment\+List}}
\index{Vertex\+Bone\+Assignment\+List@{Vertex\+Bone\+Assignment\+List}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Vertex\+Bone\+Assignment\+List}{VertexBoneAssignmentList}}
{\footnotesize\ttfamily typedef std\+::multimap$<$size\+\_\+t, \hyperlink{group___animation_gaf7318ddaeea193a759de6349554ec3a4}{Vertex\+Bone\+Assignment}$>$ \hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Ogre\+::\+Sub\+Mesh\+::\+Vertex\+Bone\+Assignment\+List}}



Multimap of verex bone assignments (orders by vertex index) 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}\label{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Bone\+Assignment\+Iterator@{Bone\+Assignment\+Iterator}}
\index{Bone\+Assignment\+Iterator@{Bone\+Assignment\+Iterator}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Bone\+Assignment\+Iterator}{BoneAssignmentIterator}}
{\footnotesize\ttfamily typedef \hyperlink{class_ogre_1_1_map_iterator}{Map\+Iterator}$<$\hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Vertex\+Bone\+Assignment\+List}$>$ \hyperlink{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}{Ogre\+::\+Sub\+Mesh\+::\+Bone\+Assignment\+Iterator}}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}\label{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Alias\+Texture\+Iterator@{Alias\+Texture\+Iterator}}
\index{Alias\+Texture\+Iterator@{Alias\+Texture\+Iterator}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Alias\+Texture\+Iterator}{AliasTextureIterator}}
{\footnotesize\ttfamily typedef \hyperlink{class_ogre_1_1_const_map_iterator}{Const\+Map\+Iterator}$<$\hyperlink{group___general_ga5dafc9e68bde8099ec5ad6c94e4cf19b}{Alias\+Texture\+Name\+Pair\+List}$>$ \hyperlink{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}{Ogre\+::\+Sub\+Mesh\+::\+Alias\+Texture\+Iterator}}



\subsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_aa5e04097716119c5cfed229c8425fc60}\label{class_ogre_1_1_sub_mesh_aa5e04097716119c5cfed229c8425fc60}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Sub\+Mesh@{Sub\+Mesh}}
\index{Sub\+Mesh@{Sub\+Mesh}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Sub\+Mesh()}{SubMesh()}}
{\footnotesize\ttfamily Ogre\+::\+Sub\+Mesh\+::\+Sub\+Mesh (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ad0a51b024271c2042968e9e967dd39e8}\label{class_ogre_1_1_sub_mesh_ad0a51b024271c2042968e9e967dd39e8}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!````~Sub\+Mesh@{$\sim$\+Sub\+Mesh}}
\index{````~Sub\+Mesh@{$\sim$\+Sub\+Mesh}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{$\sim$\+Sub\+Mesh()}{~SubMesh()}}
{\footnotesize\ttfamily Ogre\+::\+Sub\+Mesh\+::$\sim$\+Sub\+Mesh (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



\subsection{Member Function Documentation}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a8ad6c0cae3c325cd8953ab66bd97e72d}\label{class_ogre_1_1_sub_mesh_a8ad6c0cae3c325cd8953ab66bd97e72d}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!set\+Material\+Name@{set\+Material\+Name}}
\index{set\+Material\+Name@{set\+Material\+Name}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{set\+Material\+Name()}{setMaterialName()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::set\+Material\+Name (\begin{DoxyParamCaption}\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{mat\+Name,  }\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{group\+Name = {\ttfamily \hyperlink{class_ogre_1_1_resource_group_manager_a2a3698b4303d782938455e649b2e22a2}{Resource\+Group\+Manager\+::\+A\+U\+T\+O\+D\+E\+T\+E\+C\+T\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E\+\_\+\+G\+R\+O\+U\+P\+\_\+\+N\+A\+ME}} }\end{DoxyParamCaption})}



Sets the name of the \hyperlink{class_ogre_1_1_material}{Material} which this \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh} will use. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a78df2f25365fcf452af62aacd85c83a3}\label{class_ogre_1_1_sub_mesh_a78df2f25365fcf452af62aacd85c83a3}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Material\+Name@{get\+Material\+Name}}
\index{get\+Material\+Name@{get\+Material\+Name}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Material\+Name()}{getMaterialName()}}
{\footnotesize\ttfamily const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String}\& Ogre\+::\+Sub\+Mesh\+::get\+Material\+Name (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a6c7371d6d8aaa3e8117f26b3be958b44}\label{class_ogre_1_1_sub_mesh_a6c7371d6d8aaa3e8117f26b3be958b44}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!is\+Mat\+Initialised@{is\+Mat\+Initialised}}
\index{is\+Mat\+Initialised@{is\+Mat\+Initialised}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{is\+Mat\+Initialised()}{isMatInitialised()}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::is\+Mat\+Initialised (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const}



Returns true if a material has been assigned to the submesh, otherwise returns false. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a4770787312a616e8735c5d1a864bb1cb}\label{class_ogre_1_1_sub_mesh_a4770787312a616e8735c5d1a864bb1cb}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!\+\_\+get\+Render\+Operation@{\+\_\+get\+Render\+Operation}}
\index{\+\_\+get\+Render\+Operation@{\+\_\+get\+Render\+Operation}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{\+\_\+get\+Render\+Operation()}{\_getRenderOperation()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::\+\_\+get\+Render\+Operation (\begin{DoxyParamCaption}\item[{\hyperlink{class_ogre_1_1_render_operation}{Render\+Operation} \&}]{rend,  }\item[{\hyperlink{namespace_ogre_af851e71354d841df7138f9877c6f5931}{ushort}}]{lod\+Index = {\ttfamily 0} }\end{DoxyParamCaption})}



Returns a \hyperlink{class_ogre_1_1_render_operation}{Render\+Operation} structure required to render this mesh. 


\begin{DoxyParams}{Parameters}
{\em rend} & Reference to a \hyperlink{class_ogre_1_1_render_operation}{Render\+Operation} structure to populate. \\
\hline
{\em lod\+Index} & The index of the L\+OD to use. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_abdd303710ef1131801f5017ef2eda1f2}\label{class_ogre_1_1_sub_mesh_abdd303710ef1131801f5017ef2eda1f2}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!add\+Bone\+Assignment@{add\+Bone\+Assignment}}
\index{add\+Bone\+Assignment@{add\+Bone\+Assignment}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{add\+Bone\+Assignment()}{addBoneAssignment()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::add\+Bone\+Assignment (\begin{DoxyParamCaption}\item[{const \hyperlink{group___animation_gaf7318ddaeea193a759de6349554ec3a4}{Vertex\+Bone\+Assignment} \&}]{vert\+Bone\+Assign }\end{DoxyParamCaption})}



Assigns a vertex to a bone with a given weight, for skeletal animation. 

\begin{DoxyRemark}{Remarks}
This method is only valid after calling set\+Skeleton\+Name. Since this is a one-\/off process there exists only \textquotesingle{}add\+Bone\+Assignment\textquotesingle{} and \textquotesingle{}clear\+Bone\+Assignments\textquotesingle{} methods, no \textquotesingle{}edit\+Bone\+Assignment\textquotesingle{}. You should not need to modify bone assignments during rendering (only the positions of bones) and O\+G\+RE reserves the right to do some internal data reformatting of this information, depending on render system requirements. 
\end{DoxyRemark}
\begin{DoxyParagraph}{}
This method is for assigning weights to the dedicated geometry of the \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh}. To assign weights to the shared \hyperlink{class_ogre_1_1_mesh}{Mesh} geometry, see the equivalent methods on \hyperlink{class_ogre_1_1_mesh}{Mesh}. 
\end{DoxyParagraph}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a2c29dd4601e67d3f6d26d7d74c017995}\label{class_ogre_1_1_sub_mesh_a2c29dd4601e67d3f6d26d7d74c017995}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!clear\+Bone\+Assignments@{clear\+Bone\+Assignments}}
\index{clear\+Bone\+Assignments@{clear\+Bone\+Assignments}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{clear\+Bone\+Assignments()}{clearBoneAssignments()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::clear\+Bone\+Assignments (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Removes all bone assignments for this mesh. 

\begin{DoxyParagraph}{}
This method is for assigning weights to the dedicated geometry of the \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh}. To assign weights to the shared \hyperlink{class_ogre_1_1_mesh}{Mesh} geometry, see the equivalent methods on \hyperlink{class_ogre_1_1_mesh}{Mesh}. 
\end{DoxyParagraph}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ab37844a411ccea1cf06d1c95e10b71e2}\label{class_ogre_1_1_sub_mesh_ab37844a411ccea1cf06d1c95e10b71e2}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Bone\+Assignment\+Iterator@{get\+Bone\+Assignment\+Iterator}}
\index{get\+Bone\+Assignment\+Iterator@{get\+Bone\+Assignment\+Iterator}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Bone\+Assignment\+Iterator()}{getBoneAssignmentIterator()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_sub_mesh_a9c23baff85d3b4f60e37f2a514be1ada}{Bone\+Assignment\+Iterator} Ogre\+::\+Sub\+Mesh\+::get\+Bone\+Assignment\+Iterator (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Gets an iterator for access all bone assignments. 

\begin{DoxyRemark}{Remarks}
Only valid if this \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh} has dedicated geometry. 
\end{DoxyRemark}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a03901f7c72762aa3794af16b88c3e196}\label{class_ogre_1_1_sub_mesh_a03901f7c72762aa3794af16b88c3e196}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Bone\+Assignments@{get\+Bone\+Assignments}}
\index{get\+Bone\+Assignments@{get\+Bone\+Assignments}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Bone\+Assignments()}{getBoneAssignments()}}
{\footnotesize\ttfamily const \hyperlink{class_ogre_1_1_sub_mesh_ab396ad138e9d8b48355d495215989881}{Vertex\+Bone\+Assignment\+List}\& Ogre\+::\+Sub\+Mesh\+::get\+Bone\+Assignments (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Gets a const reference to the list of bone assignments. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_acd127d162c4271ac6b844161e1ea777a}\label{class_ogre_1_1_sub_mesh_acd127d162c4271ac6b844161e1ea777a}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!\+\_\+compile\+Bone\+Assignments@{\+\_\+compile\+Bone\+Assignments}}
\index{\+\_\+compile\+Bone\+Assignments@{\+\_\+compile\+Bone\+Assignments}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{\+\_\+compile\+Bone\+Assignments()}{\_compileBoneAssignments()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::\+\_\+compile\+Bone\+Assignments (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Must be called once to compile bone assignments into geometry buffer. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ab284e1061042026fa872f3b76b701caf}\label{class_ogre_1_1_sub_mesh_ab284e1061042026fa872f3b76b701caf}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Alias\+Texture\+Iterator@{get\+Alias\+Texture\+Iterator}}
\index{get\+Alias\+Texture\+Iterator@{get\+Alias\+Texture\+Iterator}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Alias\+Texture\+Iterator()}{getAliasTextureIterator()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_sub_mesh_a243e656daab531eea35d8b9fb5dc3b11}{Alias\+Texture\+Iterator} Ogre\+::\+Sub\+Mesh\+::get\+Alias\+Texture\+Iterator (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const}



Gets an constant iterator to access all texture alias names assigned to this submesh. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_abe04d5342331ad434e47ca9b934a7622}\label{class_ogre_1_1_sub_mesh_abe04d5342331ad434e47ca9b934a7622}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!add\+Texture\+Alias@{add\+Texture\+Alias}}
\index{add\+Texture\+Alias@{add\+Texture\+Alias}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{add\+Texture\+Alias()}{addTextureAlias()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::add\+Texture\+Alias (\begin{DoxyParamCaption}\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{alias\+Name,  }\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{texture\+Name }\end{DoxyParamCaption})}



Adds the alias or replaces an existing one and associates the texture name to it. 

\begin{DoxyRemark}{Remarks}
The submesh uses the texture alias to replace textures used in the material applied to the submesh. 
\end{DoxyRemark}

\begin{DoxyParams}{Parameters}
{\em alias\+Name} & is the name of the alias. \\
\hline
{\em texture\+Name} & is the name of the texture to be associated with the alias \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a9007b549c95c6fb1402818bf55b65b16}\label{class_ogre_1_1_sub_mesh_a9007b549c95c6fb1402818bf55b65b16}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!remove\+Texture\+Alias@{remove\+Texture\+Alias}}
\index{remove\+Texture\+Alias@{remove\+Texture\+Alias}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{remove\+Texture\+Alias()}{removeTextureAlias()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::remove\+Texture\+Alias (\begin{DoxyParamCaption}\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{alias\+Name }\end{DoxyParamCaption})}



Remove a specific texture alias name from the sub mesh. 


\begin{DoxyParams}{Parameters}
{\em alias\+Name} & is the name of the alias to be removed. If it is not found then it is ignored. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a8446f2b030ecd536933c0a39cdb3d61a}\label{class_ogre_1_1_sub_mesh_a8446f2b030ecd536933c0a39cdb3d61a}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!remove\+All\+Texture\+Aliases@{remove\+All\+Texture\+Aliases}}
\index{remove\+All\+Texture\+Aliases@{remove\+All\+Texture\+Aliases}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{remove\+All\+Texture\+Aliases()}{removeAllTextureAliases()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::remove\+All\+Texture\+Aliases (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



removes all texture aliases from the sub mesh 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a7277f01fb328b268deffb94b351c5c1d}\label{class_ogre_1_1_sub_mesh_a7277f01fb328b268deffb94b351c5c1d}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!has\+Texture\+Aliases@{has\+Texture\+Aliases}}
\index{has\+Texture\+Aliases@{has\+Texture\+Aliases}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{has\+Texture\+Aliases()}{hasTextureAliases()}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::has\+Texture\+Aliases (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



returns true if the sub mesh has texture aliases 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a0aca2c1ed5b5f115e882ea2481bb1769}\label{class_ogre_1_1_sub_mesh_a0aca2c1ed5b5f115e882ea2481bb1769}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Texture\+Alias\+Count@{get\+Texture\+Alias\+Count}}
\index{get\+Texture\+Alias\+Count@{get\+Texture\+Alias\+Count}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Texture\+Alias\+Count()}{getTextureAliasCount()}}
{\footnotesize\ttfamily size\+\_\+t Ogre\+::\+Sub\+Mesh\+::get\+Texture\+Alias\+Count (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Gets the number of texture aliases assigned to the sub mesh. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a2107e531c7161b312571d8977f9539e2}\label{class_ogre_1_1_sub_mesh_a2107e531c7161b312571d8977f9539e2}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!update\+Material\+Using\+Texture\+Aliases@{update\+Material\+Using\+Texture\+Aliases}}
\index{update\+Material\+Using\+Texture\+Aliases@{update\+Material\+Using\+Texture\+Aliases}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{update\+Material\+Using\+Texture\+Aliases()}{updateMaterialUsingTextureAliases()}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::update\+Material\+Using\+Texture\+Aliases (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



The current material used by the submesh is copied into a new material and the submesh\textquotesingle{}s texture aliases are applied if the current texture alias names match those found in the original material. 

\begin{DoxyRemark}{Remarks}
The submesh\textquotesingle{}s texture aliases must be setup prior to calling this method. If a new material has to be created, the sub\+Mesh autogenerates the new name. The new name is the old name + \char`\"{}\+\_\+\char`\"{} + number. 
\end{DoxyRemark}
\begin{DoxyReturn}{Returns}
True if texture aliases were applied and a new material was created. 
\end{DoxyReturn}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_add91fed2eb2a3330b2004248572642e4}\label{class_ogre_1_1_sub_mesh_add91fed2eb2a3330b2004248572642e4}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Vertex\+Animation\+Type@{get\+Vertex\+Animation\+Type}}
\index{get\+Vertex\+Animation\+Type@{get\+Vertex\+Animation\+Type}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Vertex\+Animation\+Type()}{getVertexAnimationType()}}
{\footnotesize\ttfamily \hyperlink{group___animation_ga9046e6e0d12c46c57a9056987e9d158e}{Vertex\+Animation\+Type} Ogre\+::\+Sub\+Mesh\+::get\+Vertex\+Animation\+Type (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const}



Get the type of any vertex animation used by dedicated geometry. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_af9bf141e65f964f131229501804940e5}\label{class_ogre_1_1_sub_mesh_af9bf141e65f964f131229501804940e5}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!get\+Vertex\+Animation\+Includes\+Normals@{get\+Vertex\+Animation\+Includes\+Normals}}
\index{get\+Vertex\+Animation\+Includes\+Normals@{get\+Vertex\+Animation\+Includes\+Normals}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{get\+Vertex\+Animation\+Includes\+Normals()}{getVertexAnimationIncludesNormals()}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::get\+Vertex\+Animation\+Includes\+Normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Returns whether animation on dedicated vertex data includes normals. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_af32a20ce7dd6ca470ce7e33e5dc7d7d9}\label{class_ogre_1_1_sub_mesh_af32a20ce7dd6ca470ce7e33e5dc7d7d9}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!generate\+Extremes@{generate\+Extremes}}
\index{generate\+Extremes@{generate\+Extremes}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{generate\+Extremes()}{generateExtremes()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::generate\+Extremes (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{count }\end{DoxyParamCaption})}



Generate the submesh extremes (. 

\begin{DoxySeeAlso}{See also}
\hyperlink{class_ogre_1_1_sub_mesh_ac63766998cb839ca582947d7545214f5}{extremity\+Points}). 
\end{DoxySeeAlso}

\begin{DoxyParams}{Parameters}
{\em count} & Number of extreme points to compute for the submesh. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_acae45080848d0e53474aaf11c0ce5209}\label{class_ogre_1_1_sub_mesh_acae45080848d0e53474aaf11c0ce5209}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!is\+Build\+Edges\+Enabled@{is\+Build\+Edges\+Enabled}}
\index{is\+Build\+Edges\+Enabled@{is\+Build\+Edges\+Enabled}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{is\+Build\+Edges\+Enabled()}{isBuildEdgesEnabled()}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::is\+Build\+Edges\+Enabled (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Returns true(by default) if the submesh should be included in the mesh Edge\+List, otherwise returns false. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_acc667dc8cf61d4fa25f005fd5cb9082a}\label{class_ogre_1_1_sub_mesh_acc667dc8cf61d4fa25f005fd5cb9082a}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!set\+Build\+Edges\+Enabled@{set\+Build\+Edges\+Enabled}}
\index{set\+Build\+Edges\+Enabled@{set\+Build\+Edges\+Enabled}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{set\+Build\+Edges\+Enabled()}{setBuildEdgesEnabled()}}
{\footnotesize\ttfamily void Ogre\+::\+Sub\+Mesh\+::set\+Build\+Edges\+Enabled (\begin{DoxyParamCaption}\item[{bool}]{b }\end{DoxyParamCaption})}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a2ec4714cce3f0c922670c038ff95a5b7}\label{class_ogre_1_1_sub_mesh_a2ec4714cce3f0c922670c038ff95a5b7}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!clone@{clone}}
\index{clone@{clone}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{clone()}{clone()}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_sub_mesh}{Sub\+Mesh}$\ast$ Ogre\+::\+Sub\+Mesh\+::clone (\begin{DoxyParamCaption}\item[{const \hyperlink{namespace_ogre_af73bbdc8bed8a3e6fcd56bb8fa188c45}{String} \&}]{new\+Name,  }\item[{\hyperlink{class_ogre_1_1_mesh}{Mesh} $\ast$}]{parent\+Mesh = {\ttfamily 0} }\end{DoxyParamCaption})}



Makes a copy of this submesh object and gives it a new name. 


\begin{DoxyParams}{Parameters}
{\em new\+Name} & The name to give the clone. \\
\hline
{\em parent\+Mesh} & Optional mesh to make the parent of the newly created clone. If you leave this blank, the clone will be parented to the same \hyperlink{class_ogre_1_1_mesh}{Mesh} as the original. \\
\hline
\end{DoxyParams}


\subsection{Friends And Related Function Documentation}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_aa41a130f156b145bffb3f4b5172c4c93}\label{class_ogre_1_1_sub_mesh_aa41a130f156b145bffb3f4b5172c4c93}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Mesh@{Mesh}}
\index{Mesh@{Mesh}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Mesh}{Mesh}}
{\footnotesize\ttfamily friend class \hyperlink{class_ogre_1_1_mesh}{Mesh}\hspace{0.3cm}{\ttfamily [friend]}}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a48305c54a01e0c7a3376ea0a077c467f}\label{class_ogre_1_1_sub_mesh_a48305c54a01e0c7a3376ea0a077c467f}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Mesh\+Serializer\+Impl@{Mesh\+Serializer\+Impl}}
\index{Mesh\+Serializer\+Impl@{Mesh\+Serializer\+Impl}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Mesh\+Serializer\+Impl}{MeshSerializerImpl}}
{\footnotesize\ttfamily friend class Mesh\+Serializer\+Impl\hspace{0.3cm}{\ttfamily [friend]}}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ae60e96165c5d5495195fa0d49f031372}\label{class_ogre_1_1_sub_mesh_ae60e96165c5d5495195fa0d49f031372}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2@{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2}}
\index{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2@{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2}{MeshSerializerImpl\_v1\_2}}
{\footnotesize\ttfamily friend class Mesh\+Serializer\+Impl\+\_\+v1\+\_\+2\hspace{0.3cm}{\ttfamily [friend]}}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_aef9901d67ded13a151aa3d4fde3a7b17}\label{class_ogre_1_1_sub_mesh_aef9901d67ded13a151aa3d4fde3a7b17}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1@{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1}}
\index{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1@{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1}{MeshSerializerImpl\_v1\_1}}
{\footnotesize\ttfamily friend class Mesh\+Serializer\+Impl\+\_\+v1\+\_\+1\hspace{0.3cm}{\ttfamily [friend]}}



\subsection{Member Data Documentation}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a931e3764e3bf1c3ef7431fc852770fb1}\label{class_ogre_1_1_sub_mesh_a931e3764e3bf1c3ef7431fc852770fb1}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!use\+Shared\+Vertices@{use\+Shared\+Vertices}}
\index{use\+Shared\+Vertices@{use\+Shared\+Vertices}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{use\+Shared\+Vertices}{useSharedVertices}}
{\footnotesize\ttfamily bool Ogre\+::\+Sub\+Mesh\+::use\+Shared\+Vertices}



Indicates if this submesh shares vertex data with other meshes or whether it has it\textquotesingle{}s own vertices. 



Referenced by Ogre\+::\+Lod0\+Stripifier\+::\+Strip\+Lod0\+Vertices(), and Ogre\+::\+Lod0\+Stripifier\+::$\sim$\+Lod0\+Stripifier().

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a10ed3ef8bb24a001bb89dc9e3cd88c31}\label{class_ogre_1_1_sub_mesh_a10ed3ef8bb24a001bb89dc9e3cd88c31}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!operation\+Type@{operation\+Type}}
\index{operation\+Type@{operation\+Type}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{operation\+Type}{operationType}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_render_operation_a7a272218dae54048c87f31176c19e10d}{Render\+Operation\+::\+Operation\+Type} Ogre\+::\+Sub\+Mesh\+::operation\+Type}



The render operation type used to render this submesh. 

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a1862a3ec9a3f2ed4ade8af69b41a809d}\label{class_ogre_1_1_sub_mesh_a1862a3ec9a3f2ed4ade8af69b41a809d}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!vertex\+Data@{vertex\+Data}}
\index{vertex\+Data@{vertex\+Data}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{vertex\+Data}{vertexData}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_vertex_data}{Vertex\+Data}$\ast$ Ogre\+::\+Sub\+Mesh\+::vertex\+Data}



Dedicated vertex data (only valid if use\+Shared\+Vertices = false). 

\begin{DoxyRemark}{Remarks}
This data is completely owned by this submesh. 
\end{DoxyRemark}
\begin{DoxyParagraph}{}
The use of shared or non-\/shared buffers is determined when model data is converted to the O\+G\+RE .mesh format. 
\end{DoxyParagraph}


Referenced by Ogre\+::\+Lod0\+Stripifier\+::\+Strip\+Lod0\+Vertices(), and Ogre\+::\+Lod0\+Stripifier\+::$\sim$\+Lod0\+Stripifier().

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_aad428fa6595c7fb01ef7543e5d8d6454}\label{class_ogre_1_1_sub_mesh_aad428fa6595c7fb01ef7543e5d8d6454}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!index\+Data@{index\+Data}}
\index{index\+Data@{index\+Data}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{index\+Data}{indexData}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_index_data}{Index\+Data}$\ast$ Ogre\+::\+Sub\+Mesh\+::index\+Data}



Face index data. 



Referenced by Ogre\+::\+Lod0\+Stripifier\+::\+Strip\+Lod0\+Vertices().

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ae6b4c1d0724fe6a9a961b73bd646d3cf}\label{class_ogre_1_1_sub_mesh_ae6b4c1d0724fe6a9a961b73bd646d3cf}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!blend\+Index\+To\+Bone\+Index\+Map@{blend\+Index\+To\+Bone\+Index\+Map}}
\index{blend\+Index\+To\+Bone\+Index\+Map@{blend\+Index\+To\+Bone\+Index\+Map}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{blend\+Index\+To\+Bone\+Index\+Map}{blendIndexToBoneIndexMap}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_sub_mesh_a77002e2ac2d5f5041e4b0fe3bd228245}{Index\+Map} Ogre\+::\+Sub\+Mesh\+::blend\+Index\+To\+Bone\+Index\+Map}

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_a821d2587eb2dc9746a2b1a5c0deada32}\label{class_ogre_1_1_sub_mesh_a821d2587eb2dc9746a2b1a5c0deada32}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!m\+Lod\+Face\+List@{m\+Lod\+Face\+List}}
\index{m\+Lod\+Face\+List@{m\+Lod\+Face\+List}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{m\+Lod\+Face\+List}{mLodFaceList}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_sub_mesh_a75594d10e60849696ca80f4d6cf375f4}{L\+O\+D\+Face\+List} Ogre\+::\+Sub\+Mesh\+::m\+Lod\+Face\+List}



Referenced by Ogre\+::\+Lod0\+Stripifier\+::\+Strip\+Lod0\+Vertices(), and Ogre\+::\+Lod0\+Stripifier\+::$\sim$\+Lod0\+Stripifier().

\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ac63766998cb839ca582947d7545214f5}\label{class_ogre_1_1_sub_mesh_ac63766998cb839ca582947d7545214f5}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!extremity\+Points@{extremity\+Points}}
\index{extremity\+Points@{extremity\+Points}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{extremity\+Points}{extremityPoints}}
{\footnotesize\ttfamily std\+::vector$<$\hyperlink{class_ogre_1_1_vector3}{Vector3}$>$ Ogre\+::\+Sub\+Mesh\+::extremity\+Points}



A list of extreme points on the submesh (optional). 

\begin{DoxyRemark}{Remarks}
These points are some arbitrary points on the mesh that are used by engine to better sort submeshes by depth. This doesn\textquotesingle{}t matter much for non-\/transparent submeshes, as Z-\/buffer takes care of invisible surface culling anyway, but is pretty useful for semi-\/transparent submeshes because the order in which transparent submeshes must be rendered cannot be always correctly deduced from entity position. 
\end{DoxyRemark}
\begin{DoxyParagraph}{}
These points are intelligently chosen from the points that make up the submesh, the criteria for choosing them should be that these points somewhat characterize the submesh outline, e.\+g. they should not be close to each other, and they should be on the outer hull of the submesh. They can be stored in the .mesh file, or generated at runtime (see generate\+Extremes ()). 
\end{DoxyParagraph}
\begin{DoxyParagraph}{}
If this array is empty, submesh sorting is done like in older versions -\/ by comparing the positions of the owning entity. 
\end{DoxyParagraph}
\mbox{\Hypertarget{class_ogre_1_1_sub_mesh_ac2b9fd25eb56625716d9e8915f4e0e7d}\label{class_ogre_1_1_sub_mesh_ac2b9fd25eb56625716d9e8915f4e0e7d}} 
\index{Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}!parent@{parent}}
\index{parent@{parent}!Ogre\+::\+Sub\+Mesh@{Ogre\+::\+Sub\+Mesh}}
\subsubsection{\texorpdfstring{parent}{parent}}
{\footnotesize\ttfamily \hyperlink{class_ogre_1_1_mesh}{Mesh}$\ast$ Ogre\+::\+Sub\+Mesh\+::parent}



Reference to parent \hyperlink{class_ogre_1_1_mesh}{Mesh} (not a smart pointer so child does not keep parent alive). 



The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
\hyperlink{_ogre_sub_mesh_8h}{Ogre\+Sub\+Mesh.\+h}\end{DoxyCompactItemize}
