青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 505  文章 - 1034  trackbacks - 0
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 920381
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

[前言:在Ogre的Facial Demo中采用了頂點(diǎn)動畫(確切點(diǎn)說是Pose Animation)讓面部產(chǎn)生面部表情及發(fā)音動畫,本文簡單介紹了頂點(diǎn)動畫的概念,并結(jié)合Facial Demo,探討如何實(shí)現(xiàn)Pose Animation。]


         頂點(diǎn)動畫是直接使用頂點(diǎn)讓網(wǎng)格(mesh)產(chǎn)生動畫的一種方式。每一組動作在頂點(diǎn)動畫中對應(yīng)一個(gè)頂點(diǎn)數(shù)據(jù)實(shí)體。頂點(diǎn)動畫被存儲在.mesh文件中,因?yàn)樗c網(wǎng)格的頂點(diǎn)緊密相連。實(shí)際上,頂點(diǎn)動畫分為兩種子類型。

1、Morph Animation(變形動畫)

         變形動畫依靠在每個(gè)關(guān)鍵幀中及其之間保存和插入頂點(diǎn)絕對位置的快照(snapshot)。當(dāng)骨骼動畫不能恰當(dāng)處理動畫對象時(shí),變形動畫會比較有用。在分物體必須從根本改變動畫部分的結(jié)構(gòu)和形狀時(shí),骨骼動畫就不適合了。

由于絕對位置數(shù)據(jù)的使用,不可能在同樣的頂點(diǎn)數(shù)據(jù)中混合多于一個(gè)的變形動畫;如果你想使用動畫混合,你應(yīng)該使用骨骼動畫,因?yàn)樗行?。如果你激活了在同一個(gè)頂點(diǎn)數(shù)據(jù)中包含的多個(gè)動畫,只有最后一個(gè)有效。也就是說動畫狀態(tài)的"weight"選項(xiàng)不能被用于變形動畫。

變形動畫與骨骼動畫能夠組合應(yīng)用(參考 Ogre Manual 8.3.3 Combining Skeletal and Vertex Animation)。同時(shí),變形動畫也能在使用頂點(diǎn)渲染器(shader)的硬件中實(shí)現(xiàn)(參考Ogre Manual Morph Animation in Vertex Programs)

2、Pose Animation(姿態(tài)動畫)

          姿態(tài)動畫允許將多個(gè)潛在地不同效果等級的頂點(diǎn)姿態(tài)(vertex poses)混合成最終的頂點(diǎn)狀態(tài)。該動畫通常用于面部動畫,在這種動畫中每一個(gè)面部表情被作為一個(gè)獨(dú)立的動畫,我們可以將一個(gè)表情混合在另外一個(gè)上,如果每個(gè)姿態(tài)只影響面部的一部分,也可以組合所有的表情。

         為了產(chǎn)生姿態(tài)動畫,需要引用預(yù)先包含在mesh中的一套動作集,這些動作集采用與源頂點(diǎn)的偏移量來表示。但是并不要求每一個(gè)頂點(diǎn)都有偏移量,當(dāng)用軟件處理這些數(shù)據(jù)時(shí),沒有偏移量的頂點(diǎn)會被忽略掉。如果用硬件處理的話,沒有偏移量的頂點(diǎn)會自動被填充為0。

          一旦定義好了姿態(tài),你就可以在動畫中引用他們。每一個(gè)姿態(tài)動畫跡(pose animation track)對應(yīng)著一個(gè)單獨(dú)的幾何數(shù)據(jù)集合(或者是與物體網(wǎng)格對應(yīng)的,或者是其中一個(gè)子網(wǎng)格的),在動畫中的每個(gè)關(guān)鍵幀可以引用一個(gè)或多個(gè)姿態(tài)(pose),且每一個(gè)有其相應(yīng)的影響值(influence)。你能定義許多關(guān)鍵幀,使用多種姿態(tài)的混合,從而產(chǎn)生多個(gè)部位協(xié)調(diào)運(yùn)動的動畫。

         應(yīng)該小心多個(gè)姿態(tài)同時(shí)應(yīng)用的情況。當(dāng)在硬件中處理姿態(tài)動畫的時(shí)候(參考Ogre Manual Pose Animation in Vertex Programs),每個(gè)激活的動作都需要額外的頂點(diǎn)緩沖器加入到渲染器(shader)中,如果采用軟件來處理動畫,你處理的激活姿態(tài)越多消耗的時(shí)間也就越長。也就是說,在一個(gè)關(guān)鍵幀中如果有兩個(gè)姿態(tài),在下一幀中也有兩個(gè),那么在它們過渡之間實(shí)際上就有4個(gè)激活的關(guān)鍵幀。

         你可以綜合應(yīng)用姿態(tài)動畫和骨骼動畫,參考 Ogre Manual 8.3.3 Combining Skeletal and Vertex Animation,你也可以采用硬件加速那些混合頂點(diǎn)渲染器(shader)的應(yīng)用程序(參考Ogre Manual Pose Animation in Vertex Programs)。

3、Pose Animation xml結(jié)構(gòu)

<mesh>

         <submeshes>

                   <submesh material="子網(wǎng)格材質(zhì)" ...>

                            <faces count="面數(shù)">

                                     <face ... />

                            </faces>

                            <geometry vertexcount="頂點(diǎn)數(shù)">

                                     <vertexbuffer ...>         // 頂點(diǎn)緩沖器內(nèi)容

                                               <vertex>

                                                        <position 頂點(diǎn)位置>

                                                        <normal 頂點(diǎn)法向量>

                                                        <texcoord 紋理坐標(biāo)>

                                               </vertex>

                   </submesh>

         </submeshes>

         <submeshnames>         // 主要是為pose和animation提供索引號

                   <submeshname name="子網(wǎng)格的名字" index="子網(wǎng)格的索引號(從0開始)">

         </submeshnames>

         <poses> // 這些參數(shù)主要是對手調(diào)動畫有效

                   <pose target="submesh or mesh" index="對應(yīng)哪個(gè)網(wǎng)格的姿態(tài)" name="姿態(tài)的名字">

                            <poseoffset index="頂點(diǎn)索引" x y z相對偏移量 />

                   </pose>

         </poses>

         <animations>        // 下面這些動畫對于自動播放動畫有效

                   <animation name="動畫名字" length="幀長度">

                            <tracks>         // 動畫跡

                                     <track target="submesh or mesh" index="姿態(tài)索引號" type="動畫類型,這里是pose">

                                               <keyframes> // 關(guān)鍵幀

                                                        <keyframe time="時(shí)間">

                                                                 <poseref poseindex="pose索引" influence="影響值[0-1]" />

                                                        </keyframe>

                                               </keyframes>

                                     <track>

                            </tracks>

                   </animation>

         </animations>

</mesh>
4、如何實(shí)現(xiàn)

4.1 建模工具對Pose Animation的支持

         Facial Demo中所用的頭部模型是由SoftImage授權(quán)使用的XSI面部動畫模型,不是所有的導(dǎo)出工具都支持Pose Animation,目前有 SoftImage XSI 5.0 Exporter v1.2.3、oFusion Pro for 3ds max、Maya Ogre導(dǎo)出器支持。

4.2 關(guān)鍵頂點(diǎn)的尋找

         通過分析xml中的poseoffset偏移量,可以看到許多非常小的數(shù)據(jù),這些數(shù)據(jù)是由模型導(dǎo)出工具產(chǎn)生的,其實(shí)它們完全可以被忽略掉。通過實(shí)驗(yàn),我將原來604個(gè)頂點(diǎn)的poseoffset數(shù)據(jù)減少為75個(gè),而且效果和原來相差不大,說明這75個(gè)poseoffset對應(yīng)的頂點(diǎn)是該動畫的關(guān)鍵頂點(diǎn)。

4.3 在程序中如何讀取Pose Animation

         下面是包括在場景創(chuàng)建函數(shù)createScene中創(chuàng)建動畫的代碼:

       // 載入包含pose animation的mesh

       MeshPtr mesh = MeshManager::getSingleton().load("aaa.mesh", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

       // 創(chuàng)建動畫將其命名為smile,并將長度初始化為0

       Animation* anim = mesh->createAnimation("smile", 0);

       // 創(chuàng)建頂點(diǎn)動畫跡,這里只有針對索引值為0的Pose動畫,故第一個(gè)參數(shù)為1[1]

       // 這些動畫pose被定義在<poses>標(biāo)簽中

       VertexAnimationTrack* track = anim->createVertexTrack(1, VAT_POSE); 

       // 創(chuàng)建手動動畫,并將關(guān)鍵幀起始位置置為0

       manualKeyFrame = track->createVertexPoseKeyFrame(0);

       // 創(chuàng)建手動動畫所用到的poses引用,并初始化為0

       manualKeyFrame->addPoseReference(0, 0.0f);

       // 創(chuàng)建物體(這里是Dr. Bunsen的頭像)

        Entity* head = mSceneMgr->createEntity("Head1", "aaa.mesh");

       // 從mesh中得到名為action的動畫參數(shù)(在<animations>標(biāo)簽中定義)

       actionAnimState = head->getAnimationState("action");

       // 是否允許自動播放該動畫

       actionAnimState->setEnabled(true);

       // 獲取先前從mesh文件中得到的動畫smile,并將關(guān)鍵幀起始位置置為0

       manualAnimState = head->getAnimationState("smile");

       manualAnimState->setTimePosition(0);
下面在是每一幀渲染開始都會調(diào)用的frameStarted函數(shù)中自動播放動畫代碼:

       // 根據(jù)自上一幀以來所消耗的秒數(shù)來修改調(diào)整關(guān)鍵幀位置

       actionAnimState->addTime(evt.timeSinceLastFrame);

--------------------------------------------------------------------------------

[1] Ogre API指出createVertexTrack第一個(gè)參數(shù)的含義為: Handle to give the track,  used for accessing the track later. Must be unique within this Animation, and is used to
 identify the target. For example when applied to a Mesh, the handle must reference the
 index of the geometry being modified; 0 for the shared geometry, and 1+ for SubMesh 
geometry with the same index-1.
posted on 2006-11-24 02:01 七星重劍 閱讀(3341) 評論(1)  編輯 收藏 引用 所屬分類: Game EngineOGRE

FeedBack:
# re: OGRE中的人臉動畫 2012-06-27 21:51 
感謝博主分享。也很認(rèn)同您的看法,天賦很重要,但是再走到極致之前真不應(yīng)該成為放棄的借口啊  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久精品人人做人人爽电影蜜月| 亚洲欧美在线视频观看| 久久精品国产91精品亚洲| 亚洲视频1区2区| 亚洲一区二区在线看| 亚洲一区影院| 久久精品国产77777蜜臀| 久久综合狠狠综合久久综青草| 男人的天堂亚洲在线| 欧美午夜片在线观看| 国产一区二区三区久久久久久久久| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲无线观看| 久久精品在线视频| 欧美日韩国产免费| 国产一区二区久久精品| 亚洲精品一区二区三区蜜桃久| 亚洲一区欧美二区| 久久久久久一区| 亚洲精品在线免费观看视频| 亚洲综合视频网| 免费观看不卡av| 欧美视频免费| 亚洲高清视频在线| 亚洲欧美偷拍卡通变态| 欧美搞黄网站| 午夜精品福利在线观看| 欧美激情第8页| 伊人久久大香线蕉综合热线| 亚洲午夜视频在线| 欧美不卡一卡二卡免费版| 亚洲一区二区少妇| 欧美另类亚洲| 亚洲日韩视频| 美女视频黄免费的久久| 午夜精品成人在线| 国产精品乱看| 亚洲——在线| 亚洲人成在线观看网站高清| 欧美亚洲免费在线| 国产精品人成在线观看免费| 一区二区精品在线| 亚洲九九精品| 欧美日韩精品是欧美日韩精品| 国产精品区一区| 99伊人成综合| 欧美国产日韩在线| 久久久久久久综合| 国内精品久久久久久久果冻传媒| 亚洲图片欧洲图片日韩av| 亚洲国产精品久久| 免费在线亚洲| 亚洲人体1000| 亚洲第一精品电影| 欧美xart系列在线观看| 亚洲国产精品久久久久婷婷884| 久久久99精品免费观看不卡| 亚洲欧美视频在线观看| 国产美女精品视频免费观看| 性色av一区二区三区| 亚洲精品国产精品国自产观看| 欧美成人在线免费视频| 久久亚洲精品伦理| 亚洲成在线观看| 蜜臀久久99精品久久久久久9| 久久成人av少妇免费| 影音先锋日韩精品| 欧美国产日韩精品| 欧美寡妇偷汉性猛交| 在线视频一区二区| 亚洲一区影院| 好男人免费精品视频| 欧美激情精品久久久久久| 欧美国产丝袜视频| 亚洲一二三区视频在线观看| 国产精品99久久久久久有的能看| 国产精品极品美女粉嫩高清在线 | 精久久久久久| 美女主播视频一区| 欧美福利电影网| 亚洲视频在线观看免费| 一本久久综合亚洲鲁鲁五月天| 国产精品亚洲成人| 久久夜色精品一区| 欧美精品激情在线观看| 午夜精品久久久久| 久久午夜视频| 亚洲免费伊人电影在线观看av| 亚洲欧美激情一区| 亚洲国产精品传媒在线观看| 亚洲美女在线视频| 国内精品一区二区| 99国产精品久久久久久久久久 | 欧美a级大片| 欧美精选一区| 欧美在线观看一区二区| 久久手机精品视频| 99re这里只有精品6| 欧美国产欧美综合| 欧美激情国产日韩| 国产乱码精品一区二区三| 久久成人精品无人区| 麻豆久久婷婷| 亚洲欧美在线高清| 欧美成人午夜视频| 久久国产视频网| 欧美日本一区二区视频在线观看| 欧美一区二区免费| 欧美国产视频日韩| 久久亚洲欧美国产精品乐播| 欧美日韩一区二区三区在线观看免| 久久精品亚洲| 国产精品青草久久久久福利99| 国产亚洲欧美一区| 亚洲精品视频一区二区三区| 国产一区二区三区久久久久久久久| 亚洲精品视频在线| 亚洲国产欧美日韩| 久久精品麻豆| 久久国产主播精品| 国产精品美女主播| 这里是久久伊人| 亚洲一级免费视频| 欧美日韩国产999| 亚洲国产一区在线| 亚洲黄网站黄| 久久夜色撩人精品| 久久精品亚洲精品| 国产视频一区在线观看一区免费| 亚洲婷婷在线| 亚洲欧美日韩国产一区| 国产精品激情偷乱一区二区∴| 99av国产精品欲麻豆| 在线亚洲激情| 欧美深夜影院| 亚洲一区综合| 久久狠狠婷婷| 国内精品一区二区三区| 欧美一级久久久| 久久婷婷久久一区二区三区| 黄色在线一区| 裸体丰满少妇做受久久99精品| 免费成人网www| 亚洲欧洲一区二区三区久久| 免费日本视频一区| 亚洲精品欧美专区| 午夜久久99| 一区视频在线播放| 欧美国产极速在线| 在线一区观看| 久久在线精品| 99综合在线| 国产精品推荐精品| 午夜精品成人在线| 欧美成人精品激情在线观看| 亚洲美女视频在线观看| 国产精品成人一区| 久久riav二区三区| 亚洲国产婷婷香蕉久久久久久99| 亚洲午夜激情免费视频| 国产日韩欧美另类| 蜜臀a∨国产成人精品| 日韩视频在线观看免费| 欧美在线免费视频| 亚洲国产成人porn| 久久国产福利| 尤妮丝一区二区裸体视频| 亚洲一区不卡| 美女国产一区| 亚洲午夜精品网| 国产一区二区三区四区在线观看| 久久久久久久久久久一区| 亚洲国产91| 欧美一区网站| 亚洲精品一二三区| 国产日韩精品一区二区浪潮av| 久久精品视频99| 日韩亚洲一区二区| 国产在线欧美| 欧美日韩一区二区在线观看视频| 亚洲欧美在线一区| 日韩视频免费观看高清在线视频| 久久久久青草大香线综合精品| 9l视频自拍蝌蚪9l视频成人| 国产丝袜一区二区| 国产精品高潮久久| 欧美激情视频在线免费观看 欧美视频免费一 | aⅴ色国产欧美| 狠狠操狠狠色综合网| 欧美网站在线观看| 美日韩精品免费| 欧美一区二区三区四区在线观看| 日韩一级免费观看| 欧美aaaaaaaa牛牛影院| 久久国产精品99精品国产| 一区二区三区黄色| 亚洲美女电影在线| 最新中文字幕一区二区三区| 激情五月***国产精品| 国产日韩精品视频一区|