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,這並不困難,嘗試過你便會明白。
美好的事物理應簡單。