Ogre换装系统
角色换装作为游戏里一个古老而不可或缺的系统,各个引擎都有完备支持,Ogre也不例外.
尽管网上一些讨论把Ogre换装说得讳莫如深,实际上它还是很简单的.早在05年提及这个问题时,sinbad也只是说了一句
“use Entity::shareSkeletonInstanceWith”
游戏里的换装大致分为三类,下面逐一介绍其Ogre实现.
一.更换纹理.这算是最简单的一类,顾名思义,更换材质的贴图即可.它在Ogre中的调用可能是这样的:
body->getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("clothTexture");
二.挂接物体.此类应用多是将刚性,无形变的物体挂接到某个骨骼节点上,最常见的就是将武器挂接到手部骨骼,实现持握的效果.Ogre中调用如下:
body->attachObjectToBone("handBone", weapon);
三.共享骨骼.这是最常被讨论的一个,要求模型共享一套骨骼.以戴手套为例,手套模型需要共享裸模的骨骼,任何时候都做一样的动作,如此表现为二者契合,以实现穿戴的效果.Ogre中使用如下调用:
glove->shareSkeletonInstanceWith(body);
这类换装要求美术人员做绑定时使用同一套骨骼,最终导出的各个模型也应尽量指向相同的骨骼文件.如果美术指向了名字不同的骨骼,在共享前你得费心调用Mesh:: setSkeletonName()重新指定,始终保证两个模型使用的骨骼一致.这里不推荐使用_notifySkeleton(),略显暴力了.
如果你碰巧也使用《火炬之光》的资源做实验,会发现有些手套模型竟然包含有身体,这样做的原因很多,防止两个模型契合处有明显接缝是其中之一.这时你需要在整合后隐藏那些多余的SubEntity,这并不困难,尝试过你便会明白,美好的事物理应简单.
转载自:http://blog.csdn.net/trcj1/article/details/6607209