Skip to main content
Loading Animations without a RenderSystem         A short code snippet that shows how to load and play animations, without using a RenderSystem or RenderWindow (e.g. on dedicated servers)
Copy to clipboard
#include "conio.h" #include "stdlib.h" #include "OgreMeshManager.h" #include "OgreRoot.h" #include "OgreDefaultHardwareBufferManager.h" void main() { // start ogre Ogre::Root* root = new Ogre::Root("", "", "ogre.log"); new Ogre::DefaultHardwareBufferManager(); // add resources Ogre::ResourceGroupManager::getSingletonPtr()->addResourceLocation("./media", "FileSystem", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); // initialise resource paths Ogre::ResourceGroupManager::getSingletonPtr()->initialiseAllResourceGroups(); // load the mesh Ogre::MeshPtr mesh = Ogre::MeshManager::getSingleton().load("robot.mesh", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); // create & load a SkeletonInstance Ogre::SkeletonInstance* skelInst = new Ogre::SkeletonInstance(mesh->getSkeleton()); skelInst->load(); // create & load an AnimationStateSet Ogre::AnimationStateSet* animStateSet = new Ogre::AnimationStateSet(); mesh->_initAnimationState(animStateSet); // enable the "Walk" AnimationState and loop it Ogre::AnimationState* animState = animStateSet->getAnimationState("Walk"); animState->setEnabled(true); animState->setLoop(true); while(!kbhit()) { // clear the screen system("cls"); // print out bone positions, to see that it's working Ogre::Skeleton::BoneIterator it = skelInst->getBoneIterator(); while(it.hasMoreElements()) { std::cout << Ogre::StringConverter::toString(it.getNext()->_getDerivedPosition()) << std::endl; } // instead of this fixed time value, you would of course use // the dynamic frame-time of your main application loop animState->addTime(0.001); // update the skeleton instance skelInst->setAnimationState(*animStateSet); } // cleanup mesh.setNull(); delete skelInst; delete animStateSet; delete root; }