您的位置:首页 > 其它

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

2009-09-11 15:34 597 查看
网上常说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!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: