Ogre换装系统

Ogre换装系统

         角色换装作为游戏里一个古老而不可或缺的系统,各个引擎都有完备支持,Ogre也不例外。

         尽管网上一些讨论把Ogre换装说得讳莫如深,实际上它还是很简单的。早在05年提及这个问题时,sinbad也只是说了一句“use Entity::shareSkeletonInstanceWith”

         游戏里的换装大致分为三类,下面逐一介绍其Ogre实现。

         一、更换纹理。这算是最简单的一类,顾名思义,更换材质的贴图即可。它在Ogre中的调用可能是这样的:

body->getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("clothTexture");

Ogre_character_customize_0

更换纹理实现更换衣服

         二、挂接物体。此类应用多是将刚性、无形变的物体挂接到某个骨骼节点上,最常见的就是将武器挂接到手部骨骼,实现持握的效果。Ogre中调用如下:

body->attachObjectToBone("handBone", weapon);

 Ogre_character_customize_1

挂接物体实现手持武器

         三、共享骨骼。这是最常被讨论的一个,要求模型共享一套骨骼。以戴手套为例,手套模型需要共享裸模的骨骼,任何时候都做一样的动作,如此表现为二者契合,以实现穿戴的效果。Ogre中使用如下调用:

glove->shareSkeletonInstanceWith(body);

         这类换装要求美术人员做绑定时使用同一套骨骼,最终导出的各个模型也应尽量指向相同的骨骼文件。如果美术指向了名字不同的骨骼,在共享前你得费心调用Mesh:: setSkeletonName()重新指定,始终保证两个模型使用的骨骼一致。这里不推荐使用_notifySkeleton(),略显暴力了。

 Ogre_character_customize_2

共享骨骼实现手套、靴子与角色契合

         如果你碰巧也使用《火炬之光》的资源做实验,会发现有些手套模型竟然包含有身体,这样做的原因很多,防止两个模型契合处有明显接缝是其中之一。这时你需要在整合后隐藏那些多余的SubEntity,这并不困难,尝试过你便会明白。

         美好的事物理应简单。

 Ogre_character_customize_3


©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页