OGRE实现纸娃娃系统

3 篇文章 0 订阅
2 篇文章 0 订阅

先站在巨人肩上看看纸娃娃。

首先是WOW

WOW中装备有分几种,

武器,护肩,头盔,盾牌,箭袋是挂接在关键骨骼上的

OGRE的话就是用Entity::attachObjectToBone() ,这个函数实现。

没什么难点。有个问题就是需要找到身体某个部分关键骨骼的名字,比如要挂接在肩部,就必须知道肩部关键骨骼的名字。

用WOW Model Viewer 导出的.Mesh并没有包含关键骨骼的信息(所有骨骼的名称都是按顺序排列的数字),要自己找。

这里有魔兽世界M2文件的定义

http://www.madx.dk/wowdev/wiki/index.php?title=M2/WotLK#Bones

根据这个写了个程序分析关键骨骼。整出一个关键骨骼名称列表。

下面是女血精灵的:

一个27个关键骨骼

骨骼含义 关键骨骼名称

ArmL 28
ArmR 29
ShoulderL 19
ShoulderR 22
SpineLow 2
Waist 3
Head 27
Jaw 41
IndexFingerR 72
MiddleFingerR 73
PinkyFingerR 75
RingFingerR 74
ThumbR 71
IndexFingerL 67
MiddleFingerL 68
PinkyFingerL 70
RingFingerL 69
ThumbL 66
$BTH 140
$CSR 154
$CSL 153
_Breath 139
_Name 86
_NameMount 89
$CHD 141
$CCH 133
Root 1

如果要把武器挂接到手上,代码如下

Ogre::TagPoint* tag = mEntity->attachObjectToBone("75", entity);

mEntity是人物模型实体,entity是武器模型实体,"75"是无名指的骨骼名称。

Ogre::TagPoint 继承自Ogre::Node,对tag进行操作就可以对挂接到物体进行位移,旋转。

WOW中其他装备都是用贴图实现。

如图,长筒靴对人物小腿的几何形状有影响。

每个人物模型针对长筒靴,手套这类装备都做了额外一些模型,当发现是长筒靴时,小腿的模型就会切换成长筒靴模型,然后对小腿进行贴图。

现在分析天龙八部和火炬之光,

天龙八部和火炬之光的avatar系统与WOW不同,毕竟用来OGRE,一些方法都是贴近OGRE。

天龙八部中武器也是挂接在关键骨骼上,而头盔,衣服则是做了额外的模型,然后与人物模型共享骨骼。

用OGRE::shareSkeletonInstanceWith()这个函数实现。

shareSkeletonInstanceWith并不会改变你模型的坐标,美工导出时模型坐标是什么,显示时坐标是什么。所以导出模型时就必须对装备的坐标进行调整,帽子就要调整到头部的高度。

这种方法有个缺点,如果人物从成人变成一个萝莉,装备的坐标就不相符了。

最后是RealXtend的Avatar系统。

针对上面所说的缺点,realXtend 中的 Avatar系统提供了一个比较好的解决方案。

Ogre::TagPoint* weaponTag = mEntity->attachObjectToBone("75", weaponEntity);

以上我们挂接武器的方法。

clothEntity->shareSkeletonInstanceWith(humanEntity);

以上是装备共享骨骼的方法。

由于Ogre::TagPoint继承自Node,而Ogre::SceneNode也继承自Node。

因此定义一个Node* 的列表

std::vector<Node*> attachmentNodes

sceneNode->attachObject(clothEntity)

attachmentNodes->push_back(sceneNode)

attachmentNodes->push_back(weaponTag)

以上步骤,将武器和装备都添加到attachmentNodes列表中。

通过对attachmentNodes操作即可对所有挂接到模型上的物体进行位移,旋转,或者缩放。

最终成果

Avatar系统完善以后再发布代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值