|
|
现在人物模型被拆分为4个部件(头,身体,手,脚)..这个人物绑了骨骼.
在导出时生成了4个.mesh文件,每个.mesh对应一个.skelenton.
由于人物动作很多,所以将每个动作输出一份包括4个.mesh和四个.skelenton的档.
现以走和跑两个动作为例.
我得到了两份相同命名的文件,都包括:head.mesh,body.mesh,hand.mesh,leg.mesh,head_mesh.skeleton,body_mesh.skeleton,hand_mesh.skeleton,leg_mesh.skeleton;两份文件的.mesh文件是一样的.
我将跑动作导出的.skeleton重新命名为,head_run.skeleton,body_run.skeleton,hand_run.skeleton,leg_run.skeleton.
我想用一份.mesh使用两分的.skeleton.
切换动作到跑的代码,
Entity *ent[4];
ent[0] = mSceneMgr->getEntity("head");
ent[1] = mSceneMgr->getEntity("body");
ent[2] = mSceneMgr->getEntity("hand");
ent[3] = mSceneMgr->getEntity("leg");
ent[0]->getMesh()->setSkeletonName("head_run.skeleton");
ent[1]->getMesh()->setSkeletonName("body_run.skeleton");
ent[2]->getMesh()->setSkeletonName("hand_run.skeleton");
ent[3]->getMesh()->setSkeletonName("leg_run.skeleton");
for (int i =0;i<4;++i)
{
ent->_initialise(true);
}
如上更换了mesh的skeleton,可以成功切换动作到跑,且位置都正确.
但不知道每次更换动作都需要进行如上操作会不会影响效率.
所以我换用addLinkedSkeletonAnimationSource函数,但出现了问题.
代码如下
Skeleton* ske0 = ent[0]->getSkeleton();
ske0->addLinkedSkeletonAnimationSource("head_run.skeleton");
ent[0]->refreshAvailableAnimationState();
Skeleton* ske1 = ent[1]->getSkeleton();
ske1->addLinkedSkeletonAnimationSource("body_run.skeleton");
ent[1]->refreshAvailableAnimationState();
Skeleton* ske2 = ent[2]->getSkeleton();
ske2->addLinkedSkeletonAnimationSource("hand_run.skeleton");
ent[2]->refreshAvailableAnimationState();
Skeleton* ske3 = ent[3]->getSkeleton();
ske3->addLinkedSkeletonAnimationSource("leg_run.skeleton");
ent[3]->refreshAvailableAnimationState();
当我切换到跑步时,发现头的动作看起来是正确的,但是位置不正确了.
不知道问题出在哪边?
不知道还有没有其他方法可以实现?
|
|