ogre+oFusion+3dsMax如何合并多个骨骼动画文件

    网上常说ogre+oFusion+3dsMax是开源游戏编程的黄金组合,但是在刚接触时我就遇到了一个问题,用oFusion导出的.mesh只能和一个.skeleton文件绑定,而一个.skeleton中只只能包含一个动作,这问题就大了,一般游戏,一个模型都应该能在n个动作中切换,为了解决这个问题,我在ogre3d.org的论坛中泡了好一阵子,终于找到了解决方案,为了让后来人能够少走弯路,总结如下:

    (1)创建mesh

    (2)载入2个与.mesh相关的.skeleton文件(一般需要从3dsMax中导出2次)

    (3)两两合并

    (4)接着重复步骤2,3

    (5)更新mesh的骨骼列表

 

    源代码如下:

    //已经载入的.mesh文件(step.1)

    Entity* tmpEnt = mSceneMgr->getEntity( idName );

 

    //其中的两个.skeleton的合并(step.2-3)
    SkeletonPtr pSkeletonMaster = SkeletonManager::getSingleton().getByName( anim_1.c_str() );
    SkeletonPtr pSkeletonSearch = SkeletonManager::getSingleton().load( anim_2.c_str(),   ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );

  Skeleton::BoneHandleMap boneHandleMap;
  pSkeletonSearch->_buildMapBoneByHandle( pSkeletonSearch.getPointer(), boneHandleMap );
  pSkeletonMaster->_mergeSkeletonAnimations( pSkeletonSearch.getPointer(), boneHandleMap );

  SkeletonManager::getSingleton().remove( anim_2.c_str() );

 

   //如还有多余的动画,继续合并(step.4)

 

   //更新.mesh相应骨骼状态

   tmpEnt->getSkeleton()->_refreshAnimationState( tmpEnt->getAllAnimationStates() );

 

   通过上面的步骤,你就可以把多次导出的骨骼合并在一起,并可以简单的转换了!!

 

   Enjoy!!!

你可能感兴趣的:(游戏,编程)