<html> <head> <title>OgreSkeleton.h Source File - OGRE Documentation</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link type="text/css" rel="stylesheet" href="style.css"> </head> <body> <!-- Generated by Doxygen 1.3.6 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div> <h1>OgreSkeleton.h</h1><a href="OgreSkeleton_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span> 00002 <span class="comment">-----------------------------------------------------------------------------</span> 00003 <span class="comment">This source file is part of OGRE</span> 00004 <span class="comment"> (Object-oriented Graphics Rendering Engine)</span> 00005 <span class="comment">For the latest info, see http://www.ogre3d.org/</span> 00006 <span class="comment"></span> 00007 <span class="comment">Copyright (c) 2000-2005 The OGRE Team</span> 00008 <span class="comment">Also see acknowledgements in Readme.html</span> 00009 <span class="comment"></span> 00010 <span class="comment">This program is free software; you can redistribute it and/or modify it under</span> 00011 <span class="comment">the terms of the GNU Lesser General Public License as published by the Free Software</span> 00012 <span class="comment">Foundation; either version 2 of the License, or (at your option) any later</span> 00013 <span class="comment">version.</span> 00014 <span class="comment"></span> 00015 <span class="comment">This program is distributed in the hope that it will be useful, but WITHOUT</span> 00016 <span class="comment">ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS</span> 00017 <span class="comment">FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</span> 00018 <span class="comment"></span> 00019 <span class="comment">You should have received a copy of the GNU Lesser General Public License along with</span> 00020 <span class="comment">this program; if not, write to the Free Software Foundation, Inc., 59 Temple</span> 00021 <span class="comment">Place - Suite 330, Boston, MA 02111-1307, USA, or go to</span> 00022 <span class="comment">http://www.gnu.org/copyleft/lesser.txt.</span> 00023 <span class="comment">-----------------------------------------------------------------------------</span> 00024 <span class="comment">*/</span> 00025 00026 <span class="preprocessor">#ifndef __Skeleton_H__</span> 00027 <span class="preprocessor"></span><span class="preprocessor">#define __Skeleton_H__</span> 00028 <span class="preprocessor"></span> 00029 <span class="preprocessor">#include "<a class="code" href="OgrePrerequisites_8h.html">OgrePrerequisites.h</a>"</span> 00030 <span class="preprocessor">#include "<a class="code" href="OgreResource_8h.html">OgreResource.h</a>"</span> 00031 <span class="preprocessor">#include "<a class="code" href="OgreAnimationState_8h.html">OgreAnimationState.h</a>"</span> 00032 <span class="preprocessor">#include "<a class="code" href="OgreQuaternion_8h.html">OgreQuaternion.h</a>"</span> 00033 <span class="preprocessor">#include "<a class="code" href="OgreVector3_8h.html">OgreVector3.h</a>"</span> 00034 00035 <span class="keyword">namespace </span>Ogre { 00036 <a name="l00038"></a><a class="code" href="namespaceOgre.html#a675">00038</a> <span class="keyword">enum</span> <a class="code" href="namespaceOgre.html#a675">SkeletonAnimationBlendMode</a> { 00040 <a class="code" href="namespaceOgre.html#a675a504">ANIMBLEND_AVERAGE</a>, 00042 <a class="code" href="namespaceOgre.html#a675a505">ANIMBLEND_CUMULATIVE</a> 00043 }; 00044 <a name="l00045"></a><a class="code" href="OgreSkeleton_8h.html#a0">00045</a> <span class="preprocessor">#define OGRE_MAX_NUM_BONES 256</span> 00046 <span class="preprocessor"></span> <a name="l00072"></a><a class="code" href="classOgre_1_1Skeleton.html">00072</a> <span class="keyword">class </span><a class="code" href="OgrePlatform_8h.html#a13">_OgreExport</a> Skeleton : <span class="keyword">public</span> <a class="code" href="classOgre_1_1Resource.html">Resource</a> 00073 { <a name="l00074"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1Skeletonn0">00074</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOgre_1_1SkeletonInstance.html">SkeletonInstance</a>; 00075 <span class="keyword">protected</span>: 00077 Skeleton(); 00078 00079 <span class="keyword">public</span>: 00086 Skeleton(<a class="code" href="classOgre_1_1ResourceManager.html">ResourceManager</a>* creator, <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name, <a class="code" href="namespaceOgre.html#a485">ResourceHandle</a> handle, 00087 <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& group, <span class="keywordtype">bool</span> isManual = <span class="keyword">false</span>, <a class="code" href="classOgre_1_1ManualResourceLoader.html">ManualResourceLoader</a>* loader = 0); 00088 <span class="keyword">virtual</span> ~Skeleton(); 00089 00090 00104 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* createBone(<span class="keywordtype">void</span>); 00105 00120 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* createBone(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> handle); 00121 00136 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* createBone(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name); 00137 00149 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* createBone(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> handle); 00150 00152 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> getNumBones(<span class="keywordtype">void</span>) <span class="keyword">const</span>; 00153 00165 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* getRootBone(<span class="keywordtype">void</span>) <span class="keyword">const</span>; 00166 <a name="l00167"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancew0">00167</a> <span class="keyword">typedef</span> std::vector<Bone*> <a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancew0">BoneList</a>; <a name="l00168"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancew1">00168</a> <span class="keyword">typedef</span> <a class="code" href="classOgre_1_1VectorIterator.html">VectorIterator<BoneList></a> <a class="code" href="classOgre_1_1VectorIterator.html">BoneIterator</a>; 00170 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1VectorIterator.html">BoneIterator</a> getRootBoneIterator(<span class="keywordtype">void</span>); 00172 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1VectorIterator.html">BoneIterator</a> getBoneIterator(<span class="keywordtype">void</span>); 00173 00175 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* getBone(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> handle) <span class="keyword">const</span>; 00176 00178 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Bone.html">Bone</a>* getBone(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name) <span class="keyword">const</span>; 00179 00183 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setBindingPose(<span class="keywordtype">void</span>); 00184 00194 <span class="keyword">virtual</span> <span class="keywordtype">void</span> reset(<span class="keywordtype">bool</span> resetManualBones = <span class="keyword">false</span>); 00195 00200 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Animation.html">Animation</a>* createAnimation(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name, <a class="code" href="namespaceOgre.html#a420">Real</a> length); 00201 00203 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Animation.html">Animation</a>* getAnimation(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name) <span class="keyword">const</span>; 00204 00206 <span class="keyword">virtual</span> <span class="keywordtype">void</span> removeAnimation(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& name); 00207 00219 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setAnimationState(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a0">AnimationStateSet</a>& animSet); 00220 00222 <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a0">AnimationStateSet</a>& getAnimationState(<span class="keywordtype">void</span>) <span class="keyword">const</span>; 00223 00224 00229 <span class="keyword">virtual</span> <span class="keywordtype">void</span> _initAnimationState(<a class="code" href="namespaceOgre.html#a0">AnimationStateSet</a>* animSet); 00230 00237 <span class="keyword">virtual</span> <span class="keywordtype">void</span> _getBoneMatrices(<a class="code" href="classOgre_1_1Matrix4.html">Matrix4</a>* pMatrices); 00238 00240 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> getNumAnimations(<span class="keywordtype">void</span>) <span class="keyword">const</span>; 00241 00243 <span class="keyword">virtual</span> <a class="code" href="classOgre_1_1Animation.html">Animation</a>* getAnimation(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> index) <span class="keyword">const</span>; 00244 00245 00247 <span class="keyword">virtual</span> <a class="code" href="namespaceOgre.html#a675">SkeletonAnimationBlendMode</a> getBlendMode(); 00249 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setBlendMode(SkeletonAnimationBlendMode state); 00250 00252 <span class="keyword">virtual</span> <span class="keywordtype">void</span> _updateTransforms(<span class="keywordtype">void</span>); 00253 00254 00255 <span class="keyword">protected</span>: <a name="l00256"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep4">00256</a> <a class="code" href="namespaceOgre.html#a675">SkeletonAnimationBlendMode</a> mBlendState; <a name="l00258"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep5">00258</a> <a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancew0">BoneList</a> mBoneList; <a name="l00260"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancex2">00260</a> <span class="keyword">typedef</span> std::map<String, Bone*> <a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancex2">BoneListByName</a>; <a name="l00261"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep6">00261</a> <a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancex2">BoneListByName</a> mBoneListByName; 00262 00263 <a name="l00265"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep7">00265</a> <span class="keyword">mutable</span> <a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancew0">BoneList</a> mRootBones; <a name="l00267"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep8">00267</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> mNextAutoHandle; 00268 00269 <a name="l00271"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancex3">00271</a> <span class="keyword">typedef</span> std::map<String, Animation*> AnimationList; <a name="l00272"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep9">00272</a> AnimationList mAnimationsList; 00273 00274 <a name="l00276"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstancep10">00276</a> <a class="code" href="namespaceOgre.html#a0">AnimationStateSet</a> mLastAnimationState; 00277 00283 <span class="keywordtype">void</span> deriveRootBone(<span class="keywordtype">void</span>) <span class="keyword">const</span>; 00284 00286 <span class="keywordtype">void</span> _dumpContents(<span class="keyword">const</span> <a class="code" href="namespaceOgre.html#a426">String</a>& filename); 00287 00290 <span class="keywordtype">void</span> loadImpl(<span class="keywordtype">void</span>); 00291 00294 <span class="keywordtype">void</span> unloadImpl(<span class="keywordtype">void</span>); <a name="l00296"></a><a class="code" href="classOgre_1_1Skeleton.html#Ogre_1_1SkeletonInstanceb5">00296</a> size_t calculateSize(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 0; } <span class="comment">// TODO </span> 00297 00298 }; 00299 <a name="l00306"></a><a class="code" href="classOgre_1_1SkeletonPtr.html">00306</a> <span class="keyword">class </span><a class="code" href="class__OgreExport.html">_OgreExport</a> SkeletonPtr : <span class="keyword">public</span> <a class="code" href="classOgre_1_1SharedPtr.html">SharedPtr</a><Skeleton> 00307 { 00308 <span class="keyword">public</span>: <a name="l00309"></a><a class="code" href="classOgre_1_1SkeletonPtr.html#Ogre_1_1SkeletonPtra0">00309</a> SkeletonPtr() : <a class="code" href="classOgre_1_1SharedPtr.html">SharedPtr</a><Skeleton>() {} <a name="l00310"></a><a class="code" href="classOgre_1_1SkeletonPtr.html#Ogre_1_1SkeletonPtra1">00310</a> <span class="keyword">explicit</span> SkeletonPtr(Skeleton* rep) : <a class="code" href="classOgre_1_1SharedPtr.html">SharedPtr</a><Skeleton>(rep) {} <a name="l00311"></a><a class="code" href="classOgre_1_1SkeletonPtr.html#Ogre_1_1SkeletonPtra2">00311</a> SkeletonPtr(<span class="keyword">const</span> SkeletonPtr& r) : <a class="code" href="classOgre_1_1SharedPtr.html">SharedPtr</a><Skeleton>(r) {} <a name="l00312"></a><a class="code" href="classOgre_1_1SkeletonPtr.html#Ogre_1_1SkeletonPtra3">00312</a> SkeletonPtr(<span class="keyword">const</span> <a class="code" href="classOgre_1_1SharedPtr.html">ResourcePtr</a>& r) : <a class="code" href="classOgre_1_1SharedPtr.html">SharedPtr</a><Skeleton>() 00313 { 00314 <span class="comment">// lock & copy other mutex pointer</span> 00315 <a class="code" href="OgrePrerequisites_8h.html#a14">OGRE_LOCK_MUTEX</a>(*r.OGRE_AUTO_MUTEX_NAME) 00316 <a class="code" href="OgrePrerequisites_8h.html#a19">OGRE_COPY_AUTO_SHARED_MUTEX</a>(r.OGRE_AUTO_MUTEX_NAME) 00317 pRep = static_cast<Skeleton*>(r.<a class="code" href="classOgre_1_1SharedPtr.html#Ogre_1_1SharedPtra12">getPointer</a>()); 00318 pUseCount = r.<a class="code" href="classOgre_1_1SharedPtr.html#Ogre_1_1SharedPtra11">useCountPointer</a>(); 00319 <span class="keywordflow">if</span> (pUseCount) 00320 { 00321 ++(*pUseCount); 00322 } 00323 } 00324 <a name="l00326"></a><a class="code" href="classOgre_1_1SkeletonPtr.html#Ogre_1_1SkeletonPtra4">00326</a> SkeletonPtr& operator=(<span class="keyword">const</span> <a class="code" href="classOgre_1_1SharedPtr.html">ResourcePtr</a>& r) 00327 { 00328 <span class="keywordflow">if</span> (pRep == static_cast<Skeleton*>(r.<a class="code" href="classOgre_1_1SharedPtr.html#Ogre_1_1SharedPtra12">getPointer</a>())) 00329 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00330 release(); 00331 <span class="comment">// lock & copy other mutex pointer</span> 00332 <a class="code" href="OgrePrerequisites_8h.html#a14">OGRE_LOCK_MUTEX</a>(*r.OGRE_AUTO_MUTEX_NAME) 00333 <a class="code" href="OgrePrerequisites_8h.html#a19">OGRE_COPY_AUTO_SHARED_MUTEX</a>(r.OGRE_AUTO_MUTEX_NAME) 00334 pRep = static_cast<Skeleton*>(r.<a class="code" href="classOgre_1_1SharedPtr.html#Ogre_1_1SharedPtra12">getPointer</a>()); 00335 pUseCount = r.<a class="code" href="classOgre_1_1SharedPtr.html#Ogre_1_1SharedPtra11">useCountPointer</a>(); 00336 <span class="keywordflow">if</span> (pUseCount) 00337 { 00338 ++(*pUseCount); 00339 } 00340 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 00341 } 00342 }; 00343 00344 } 00345 00346 00347 <span class="preprocessor">#endif</span> 00348 <span class="preprocessor"></span> </pre></div><p> Copyright © 2000-2005 by The OGRE Team<br /> Last modified Wed Feb 23 00:19:14 2005 </p> </body> </html>