• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            麒麟子

            ~~

            導航

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            irrlicht引擎:實現(xiàn)天龍八部的RPG角色換裝

            看了看時間,已經(jīng)3點過了,突然想寫點什么,卻又不知從何說起。

            那就從今天這個用irrlicht做天龍八部的模型換裝說起吧。

             

            也不知道是為什么,最近又搗鼓起了OGRE和irrlicht. 并且,總想用irrlicht實現(xiàn)一些OGRE中的東西。

            當然,這不是商業(yè)項目,也沒有商業(yè)目的,純屬蛋疼而已。

             

            一切行動的由來,都來自于vczh那天晚上的舉動。

            記得有一天晚上在群里聊天,大伙就稱贊各位菊苣是多么的厲害。

            最后vc發(fā)了一個自己的桌面截圖說:讓你們看看菊苣是如何練成的(這不是原話,和話的字眼有出入,在此不想負任何責任,如果真有想看的,去翻群的聊天記錄)

            那天晚上,我想了很久。想想自己自從轉做頁游以后,是如何虛渡光陰的。

            終于忍不住了,翻開了自己的移動硬盤,看看自己曾經(jīng)做過的小東西。90%是建好工程就沒理了。

            這才明白,我花在思考上的時間遠遠大于了行動。 于是,我決定改變自己,找回那個真的我。

             

            3D游戲是我的真愛, 真愛到就算畫面差一點,只要是3D,我也會很喜歡。

            于是,我覺得自己還是應該接著先前的路走下去。 什么服務器,什么 AS3. 都是浮云, 不喜歡就是不喜歡。

            私下又開始研究irrlicht了。

            猛地一發(fā)現(xiàn),自己是多么的搞笑, 從09年到11年,一直在做引擎開發(fā), 也翻過irrlicht和ogre無數(shù)遍。 卻從來就沒有寫完過一個完整的DEMO。

            連功能測試用例都沒有寫過。突然覺得之前的一些設計似乎有些脫離了實際。沒有真正使用過,又怎知如何是好,如何是壞呢?

             

            這一次是真的玩irrlicht了, 中間也糾結過是不是OGRE更適合。 但在目前這個時間有限的空間下,我更愿意玩irrlicht.小巧,輕便。 當然,意味著更多東西要自己實現(xiàn)。 不過對于一個代碼控來說,也反而更自得其樂。 正好可以在短路的時候,去參考一下其它引擎,用來擴充irrlicht.

            我要做的不是把irrlicht整得牛B,而是想自己弄弄,加上移動平臺的崛起,我覺得irrlicht更加適合吧。 據(jù)說gameloft也有使用(僅是據(jù)說)。

             

            可能很多兄弟會說我這講的東西,其實就是一坨屎了。 不過,我覺得再壞的評論,也表示一種關注。 批評好過于無視啊~~~~

            ----------------------------------------------------------下面說說我遇上的糾結------------------------------------------------

            糾結1:換裝需要場景節(jié)點配合

              在irrlicht中,并沒有提供普通引擎中的submesh或者bodypart這種東西,用于直接支持換裝。 在irrlicht中,如果想要換裝,最直接的方法就是依賴于場景結點

            比如,在我的示例中,可以更換頭發(fā),帽子,衣服,護腕,靴子,面容。 那就需要7個場景節(jié)點,1個作為根節(jié)點,用于控制整個角色的世界坐標,平移,縮放,旋轉等屬性。另外6個場景節(jié)點則分別綁有各個部件的模型

            貼一下我的角色類的代碼,行數(shù)不多

            class CCharactor
            {
                IrrlichtDevice* m_pDevice;
                IAnimatedMeshSceneNode* m_pBodyParts[eCBPT_Num];
                ISceneNode* m_pRoot;
            public:
                CCharactor(IrrlichtDevice* pDevice)
                    :m_pDevice(pDevice)
                {
                    memset(m_pBodyParts,0,sizeof(m_pBodyParts));
                    m_pRoot = pDevice->getSceneManager()->addEmptySceneNode(NULL,12345);
                }
                void changeBodyPart(ECharactorBodyPartType ePartType,stringw& meshPath,stringw& metrialPath)
                {
                    ISceneManager* smgr = m_pDevice->getSceneManager();

                    IAnimatedMeshSceneNode* pBpNode = m_pBodyParts[ePartType];
                    IAnimatedMesh* pMesh = smgr->getMesh(meshPath.c_str());
                    if(pMesh==NULL)
                        return;

                    if(pBpNode==NULL)
                    {
                        pBpNode = smgr->addAnimatedMeshSceneNode(pMesh,m_pRoot);
                        m_pBodyParts[ePartType] = pBpNode;
                    }
                    else
                    {
                        pBpNode->setMesh(pMesh);
                    }
                    ITexture* pTexture = m_pDevice->getVideoDriver()->getTexture(metrialPath.c_str());
                    if(pTexture)
                        pBpNode->setMaterialTexture(0,pTexture);
                }
            };

             

            //然后,我用了一個結構體來構建部件信息

            struct SBodyPartInfo
            {
                stringw Desc;
                ECharactorBodyPartType Type;
                stringw MeshPath;
                stringw MeterialPath;
            };

             

            糾結2:共享骨骼

            首先,irrlicht 1.8中對OGRE模型的格式支持在代碼中,最高只看到了1.40版本的解析,更高的就會被無視。 天龍八部的模型有幾個是1.30的,而用于換裝和主角的,都是1.40的。 可能是解析不全的原因,導致1.40的骨骼動畫無法正常播放。 這個問題整了幾個小時,沒有解決,明天繼續(xù)

            其次,多個模型共享骨骼只能通過場景節(jié)點的useAnimationFrom來完成,并且傳入的是一個Mesh參數(shù)。這點讓人蛋疼, 天龍八部的角色動作是分開了的,不同的攻擊動作是一個skeleton文件。 想要實現(xiàn)共享,有點麻煩。

             

            糾結3:模型文件格式

            irrlicht不像OGRE那樣有一個強大且成熟的模型文件格式,雖然提供了.irr格式,但僅是用于irrEdit的場景信息輸出。先看一張圖

            image

            這張圖是irrlicht samples中的MeshViewer的提示框內(nèi)容。 上面列出了可以支持的模型文件類型。 大家可以看看,又有多少模型格式是可以直接拿來放到項目上用的呢? mdl和ms3d可以考慮,dae的話,我在開源游戲0 A.D. 中見到使用過。 其它的話,就完全不熟悉了。 OGRE的 .mesh支持也不完全。 難道真要自己整一個。

            我能想到的,就是選一個插件完整和模型和動畫格式都比較好的作為與美術工具交互的格式。 自己再寫一個工具,轉換成自己的格式。

             

            糾結4:硬件蒙皮

            我以為像NIKO那樣的技術狂,怎么會放掉這一個特性。 很高興地在場景節(jié)點上發(fā)現(xiàn)了硬件蒙皮的函數(shù)接口。但一看注釋,把我咽著了。

            //! (This feature is not implemented in irrlicht yet)
            virtual bool setHardwareSkinning(bool on);

             

            其它地方,還沒有去整,就先不發(fā)表言論了。 繼續(xù)著這個很傻B,很天真的搗鼓之路。

            上個圖,紀念一下我的irrlicht產(chǎn)物。

             

            布衣

            image

             

            換了身盔甲

            image

             

            換了帽子和靴子

            image

             

            PS:頭發(fā)沒有紋理,所以是白的。

            posted on 2013-03-24 04:08 麒麟子 閱讀(3661) 評論(0)  編輯 收藏 引用 所屬分類: Game and EngineIrrlicht

            一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 欧美性大战久久久久久| 国产成人精品久久综合| 久久久亚洲裙底偷窥综合| 久久久久亚洲AV片无码下载蜜桃| 久久精品国产亚洲AV麻豆网站 | 国产精品热久久无码av| 久久www免费人成看片| 精品国产VA久久久久久久冰| 狠狠色丁香婷婷综合久久来来去 | 97久久久久人妻精品专区| 国产精品久久久久乳精品爆| 久久国产免费直播| 久久亚洲天堂| 狠狠色婷婷综合天天久久丁香| 亚洲&#228;v永久无码精品天堂久久| 麻豆一区二区99久久久久| 久久99精品免费一区二区| 久久精品国产久精国产思思| 亚洲人成无码久久电影网站| 精品久久久久久99人妻| 嫩草影院久久99| 国产精品久久久久久吹潮| 18禁黄久久久AAA片| 久久精品国产99国产精品| 久久亚洲国产精品一区二区| 无码人妻精品一区二区三区久久| 欧美激情精品久久久久久久九九九| 狠狠干狠狠久久| 免费国产99久久久香蕉| www亚洲欲色成人久久精品| 精品一区二区久久| 久久福利青草精品资源站免费| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 99久久婷婷国产一区二区| 国产精品一久久香蕉产线看| 精品久久久久久中文字幕| 日本久久久久久中文字幕| 伊人久久综在合线亚洲2019| 99久久精品免费观看国产| 久久久久这里只有精品|