第11節(jié) 實(shí)例-fbx模型動(dòng)畫的控制

感謝

感謝網(wǎng)友提出這個(gè)問題。大家有問題也可以在評(píng)論區(qū)提出。問題是fbx里有動(dòng)畫,但是不知道該如何控制。模型是這個(gè):


image.png

資源下載
本文集包括本節(jié)所有資源包括模型代碼都在此下載,按節(jié)的序號(hào)有文件或文件夾:

注意:務(wù)必使用瀏覽器打開:
鏈接:https://pan.baidu.com/s/13gwJLwo_LbRnN3Bl2NXXXw
提取碼:xrf5

解決方案

插件編譯

因?yàn)槲覜]有讀取過fbx格式的模型,起初我以為很麻煩呢。我先是在自動(dòng)桌官方下載了fbx sdk:
https://www.autodesk.com/developer-network/platform-technologies/fbx-sdk-2019-0
注意,vs2015以上的vs直接下載vs2015版本的即可。

image.png

我用的是vs2019,使用vs2015的版本就行。而后將FBX的dll加入到path之中:


image.png

然后使用CMAKE配置即可:


image.png

編譯之后,fbx插件就出來了:osgdb_fbx.dll
這個(gè)時(shí)候,使用osgviewer a.fbx就可以看到了。

動(dòng)畫解析

要看一個(gè)模型有沒有動(dòng)畫其實(shí)是件簡(jiǎn)單的事,如本例模型Naruto.fbx,可以使用osgconv Naruto.fbx a.osg,然后用寫字板打開a.osg,直接搜:osgAnimation或Animation或UpdateCallback,都可以查出來有無動(dòng)畫。有動(dòng)畫就必會(huì)用到更新回調(diào),因此UpdateCallbacks一般是必有的。

本例是這些都有。

動(dòng)畫控制

為了讓大家更能夠簡(jiǎn)便的查看模型中的動(dòng)畫,不用大費(fèi)勁,osg給了一個(gè)例子叫:osganimationviewer,本例中使用osganimationviewer Naruto.fbx,就可以通過界面很方便的操作其中的動(dòng)畫(注意下面一排按鈕,點(diǎn)點(diǎn)就能播放/暫停動(dòng)畫):


image.png

其是有源碼的,我就不再多解讀了。讀取動(dòng)畫的核心思想就是找:UpcateCallback,找到了就可以將其轉(zhuǎn)換成相應(yīng)的動(dòng)畫控制類,比如:AnimationPathCallback,AnimationManagerBase,轉(zhuǎn)換成功就是找到了動(dòng)畫,比如osganimationviewer.cpp的找動(dòng)畫的代碼就是這個(gè)最關(guān)鍵:

struct AnimationManagerFinder : public osg::NodeVisitor
{
    osg::ref_ptr<osgAnimation::BasicAnimationManager> _am;
    AnimationManagerFinder() : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}
    void apply(osg::Node& node) {
        if (_am.valid())
            return;
        if (node.getUpdateCallback()) {
            osgAnimation::AnimationManagerBase* b = dynamic_cast<osgAnimation::AnimationManagerBase*>(node.getUpdateCallback());
            if (b) {
                _am = new osgAnimation::BasicAnimationManager(*b);
                return;
            }
        }
        traverse(node);
    }
};

還等什么,快快行動(dòng)吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容