irrlicht動作融合的使用姿勢

動作融合是一種將當前動作跟目標動作中骨骼位置進行動態(tài)插值的算法扁掸。得到的結果可以使角色的動作表現(xiàn)更加的平滑。

irrlicht引擎也提供了相應的功能税产,下面就這個功能的使用方法進行說明辐益。

功能函數(shù)

引用下irrlicht的代碼

//! Sets the transition time in seconds (note: This needs to enable joints, and setJointmode maybe set to 2)
//! you must call animateJoints(), or the mesh will not animate
void CAnimatedMeshSceneNode::setTransitionTime(f32 time)
{
    const u32 ttime = (u32)core::floor32(time*1000.0f);
    if (TransitionTime==ttime)
        return;
    TransitionTime = ttime;
    if (ttime != 0)
        setJointMode(EJUOR_CONTROL);
    else
        setJointMode(EJUOR_NONE);
}

使用這個函數(shù),就可以在播放下一個動作的時候自動進行插值肄满。但是谴古,只使用這一個函數(shù)质涛,只會讓你的模型骨骼便的不受控制。
好在這個時候我們注意到函數(shù)前面的兩行注釋掰担,什么意思呢汇陆?

設置融合時間,單位秒(注意:這個需要有骨骼带饱,并且設置骨骼模式為2毡代,就是EJUOR_CONTROL)
你必須調用animateJoints(),否則動畫可就不動了喲

然而注釋沒有提到的是勺疼,你必須沒一幀都調用animateJoints()月趟,否則動畫還是不動喲
這里有英文版解釋

Now if you also want your mesh to animate using any built-in animation in the model, call:
Node->animateJoints();
In your game loop, before drawAll().
意思就是你如果要播已有的動畫,你需要在游戲的主循環(huán)中調用animateJoints()恢口;

步驟

  1. 設置 setTransitionTime(f32 time)
  2. 每幀調用 animateJoints()

做完這兩件事孝宗,你就可以可到動作融合可以正常使用了。

更多的要求

但是還不夠耕肩。當功能正常使用的時候因妇,我們可能會有更多的需求:

  • 對不同的動作設置不同的動作融合
  • 某些特別的動作不要融合

前面的兩個步驟,在動作融合及不融合來回切換的時候會導致模型節(jié)點不受控制猿诸。有兩處問題婚被,再看代碼

void CAnimatedMeshSceneNode::setTransitionTime(f32 time)
{
    const u32 ttime = (u32)core::floor32(time*1000.0f);
    // 問題2
    if (TransitionTime==ttime)
        return;
    TransitionTime = ttime;
    if (ttime != 0)
        setJointMode(EJUOR_CONTROL);
    else
        setJointMode(EJUOR_NONE);   // 問題1
}

問題1:在把動畫的融合設置為0時,期望的是關閉動作融合梳虽。但實際導致骨骼模式變成NONE址芯,子節(jié)點不能正常變換位置。手動調用 node->setJointMode(scene::EJUOR_READ)解決
問題2:試想下面的操作過程窜觉,

  1. 設置融合時間setTransitionTime(0.3)
  2. 關閉動作融合setJointMode(scene::EJUOR_READ)
  3. 再次設置setTransitionTime(0.3)

第三步操作時谷炸,代碼在 if (TransitionTime==ttime)處返回,于是沒有自動執(zhí)行setJointMode(EJUOR_CONTROL);
所以結論是:在setTransitionTime時同時設置setJointMode(MODE)來避免這個問題

if (m_AniPlayData.blend > 0) {
    node->setTransitionTime(m_AniPlayData.blend);
    node->setJointMode(irr::scene::EJUOR_CONTROL);
} else {
    node->setTransitionTime(0);
    node->setJointMode(irr::scene::EJUOR_READ);
}

最后完整的步驟是:

  1. 設置 setTransitionTime(f32 time)
  2. 同1時設置 setJointMode(MODE);
  3. 每幀調用 animateJoints()

至此禀挫,動畫融合就完全可用了旬陡。

PS:如果你的主模型的子節(jié)點也需要做動畫的話,對子節(jié)點也需要上述三個步驟语婴。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末描孟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子砰左,更是在濱河造成了極大的恐慌匿醒,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缠导,死亡現(xiàn)場離奇詭異廉羔,居然都是意外死亡,警方通過查閱死者的電腦和手機酬核,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門蜜另,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫡意,你說我怎么就攤上這事举瑰。” “怎么了蔬螟?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵此迅,是天一觀的道長。 經(jīng)常有香客問我旧巾,道長耸序,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任鲁猩,我火速辦了婚禮坎怪,結果婚禮上,老公的妹妹穿的比我還像新娘廓握。我一直安慰自己搅窿,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布隙券。 她就那樣靜靜地躺著男应,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娱仔。 梳的紋絲不亂的頭發(fā)上沐飘,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音牲迫,去河邊找鬼耐朴。 笑死,一個胖子當著我的面吹牛盹憎,可吹牛的內容都是我干的隔箍。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼脚乡,長吁一口氣:“原來是場噩夢啊……” “哼蜒滩!你這毒婦竟也來了?” 一聲冷哼從身側響起奶稠,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤俯艰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锌订,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竹握,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年辆飘,在試婚紗的時候發(fā)現(xiàn)自己被綠了啦辐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓传。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芹关,靈堂內的尸體忽然破棺而出续挟,到底是詐尸還是另有隱情,我是刑警寧澤侥衬,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布诗祸,位于F島的核電站,受9級特大地震影響轴总,放射性物質發(fā)生泄漏直颅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一怀樟、第九天 我趴在偏房一處隱蔽的房頂上張望功偿。 院中可真熱鬧,春花似錦往堡、人聲如沸脖含。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽养葵。三九已至,卻和暖如春瘩缆,著一層夾襖步出監(jiān)牢的瞬間关拒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工庸娱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留着绊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓熟尉,卻偏偏與公主長得像归露,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子斤儿,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容

  • 111. [動畫系統(tǒng)]如何將其他類型的動畫轉換成關鍵幀動畫剧包? 動畫->點緩存->關鍵幀 112. [動畫]Unit...
    胤醚貔貅閱讀 12,982評論 3 90
  • 轉載一篇高質量博文,原地址請戳這里轉載下來方便今后查看往果。1 背景不能只分析源碼呀疆液,分析的同時也要整理歸納基礎知識,...
    Elder閱讀 1,938評論 0 24
  • 1 背景 不能只分析源碼呀陕贮,分析的同時也要整理歸納基礎知識堕油,剛好有人微博私信讓全面說說Android的動畫,所以今...
    未聞椛洺閱讀 2,699評論 0 10
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜掉缺,今天將帶大家一窺ios動畫全貌卜录。在這里你可以看...
    每天刷兩次牙閱讀 8,471評論 6 30
  • 喜歡是情感眾多類目中的一種漆撞,介于沉溺和無察之間获讳,像深且闊的湖面上微風撫過的漣漪,不易察覺黍匾,等你細看赘来,卻已消逝不見现喳。...
    偶然之音閱讀 279評論 0 0