游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4231|回复: 6

ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

[复制链接]

3

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2009-6-11 12:03:00 | 显示全部楼层 |阅读模式
现在人物模型被拆分为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();

当我切换到跑步时,发现头的动作看起来是正确的,但是位置不正确了.
不知道问题出在哪边?
不知道还有没有其他方法可以实现?

34

主题

432

帖子

437

积分

中级会员

Rank: 3Rank: 3

积分
437
发表于 2009-6-11 12:13:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

我是动作美工,我们同一mesh 多动作是这样处理的.需要一个空骨骼,也就是模型蒙皮的时候,那个骨骼没有任何动画的导出Skeleton文件,4个部分mesh对应4个Skeleton,只留一个其他删掉就行.这个空骨骼就作为中转骨骼.之后不管多少个Skeleton,都会用空骨骼做中转.这样就不会出现位置不对的问题了.

3

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2009-6-11 13:46:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

谢谢你的回答,有点东西我想再请教一下,
4个部分mesh对应4个Skeleton,只留一个其他删掉就行,是说只留下一个.skeleton吧,
但是我输出的时候(ofusion),每个skeleton是不一样的,它并没有包括所以的mesh 的运动信息,怎么才能使它包含所有mesh全部运动信息呢?
制作模型的时候要注意哪些呢?

34

主题

432

帖子

437

积分

中级会员

Rank: 3Rank: 3

积分
437
发表于 2009-6-11 14:01:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

没有什么特别的,,模型的4个部分都要塌陷 保证坐标轴方向向与坐标一致.如果不一致.进入游戏后会出现位置不对发生偏移的情况...skeleton部分我想是经过特殊处理了吧..可以改名字.而且只需要一个就行

3

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2009-6-11 18:16:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

问题已解决,谢谢.

3

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2009-6-19 12:13:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)

怎么解决的
能将代码发我邮箱不450861222@qq.COM
谢谢啦

3

主题

10

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2009-6-24 13:15:00 | 显示全部楼层

Re:ogre中一个.MESH使用不同的.skeleton的问题(切换动作)


使用addLinkedSkeletonAnimationSource函数,
不是程序问题,是模型的问题.
分割的每个部分要含有整个人的bone的信息,就是添加skin时要add所有的bone。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 23:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表