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

天行健 君子當自強而不息

網(wǎng)格模型高級技術(shù)(11)

網(wǎng)格模型動畫一般有兩種:一種是漸變動畫;另一種是骨骼動畫,這種動畫包含在網(wǎng)格模型之中,通過網(wǎng)格模型不同部分之間的相對運動來實現(xiàn)動畫。

 

骨骼動畫基本原理

骨骼動畫是目前最流行也最復雜的角色動畫,它包含以下幾個重要元素:骨骼、動畫。骨骼動畫思想的起源很簡單,自然界中的大多數(shù)動物都擁有一套骨骼,身體的皮毛血肉都依附于骨骼,當骨骼開始運動的時候,依附于對應骨骼的皮毛血肉都隨骨骼一起運動。在三維圖形編程領(lǐng)域,角色的軀體是由網(wǎng)格模型來表示的,網(wǎng)格模型通常由大量三角形圖元組成,而三角形又是由頂點組成的。為了模仿現(xiàn)實世界中角色自身的動作,就需要為角色網(wǎng)格模型添加一套骨骼,同時需要確定哪些頂點依附于哪塊骨骼,這樣當骨骼運動時就能牽引依附骨骼的頂點一起運動,這就是骨骼動畫的基本原理。

骨骼動畫模型的骨骼是以樹狀層次結(jié)構(gòu)組織起來的,整個骨骼結(jié)構(gòu)中有一塊根骨骼,其他的骨骼都直接或間接連接到根骨骼上,形成角色模型的整個骨骼框架。

一般每塊骨骼都帶有兩個矩陣,一個是初始變換矩陣(LocalTransformMatrix),表示骨骼的初始位置;另一個是組合變換矩陣(CombinedTransformMaitrx),用于對骨骼進行各種變換,從而實現(xiàn)角色動畫。在每次渲染角色模型前,需要更新整個骨骼層次結(jié)構(gòu),組合每個連續(xù)的變換,將上層骨骼的運動傳遞到下層骨骼,這個原理可表示為:

(子骨骼的)CombinedTransformMaitrx = (子骨骼的)LocalTransformMaitrx x (父骨骼的)CombinedTransformMaitrx

骨骼的組合變換矩陣是隨動畫的播放不斷變化的,而它的初始變換矩陣一般是不改變的,正是所有骨骼的這些矩陣相互作用才牽引著頂點的變化,從而實現(xiàn)了骨骼動畫。因為一次變換只能將骨骼變換到一個特定位置,要形成連續(xù)的動畫就需要一幀一幀地連續(xù)改變骨骼的位置,每次改變骨骼的位置都需要一個骨骼變換矩陣,在網(wǎng)格模型中不可能保存任意時刻骨骼的變換矩陣,通常是保存關(guān)鍵時間點骨骼的變換矩陣(即關(guān)鍵楨),然后在播放角色動畫時,根據(jù)播放時間進行插值得到任意時刻骨骼的變換矩陣,從而形成連續(xù)的角色動畫。

骨骼動畫是通過骨骼變換矩陣實現(xiàn)的,在網(wǎng)格模型中保存的也是關(guān)鍵時間點骨骼的變換矩陣,因此插值就是針對這些關(guān)鍵時間點上的骨骼變換矩陣進行的。假設(shè)在s1時刻骨骼變換矩陣是mat1,在s2時刻骨骼變換矩陣是mat2,在s1和s2之間的任意時刻s,其骨骼變換矩陣mat為:

mat = (1-w) * mat1 + w * mat2

其中w是權(quán)值,通過這個權(quán)值來調(diào)節(jié)在s時刻骨骼變換矩陣中mat1和mat2所占的比重,對骨骼變換矩陣進行插值最簡單的方法是線性插值,這時w = (s-s1) / (s2-s1)

 

骨骼動畫類的設(shè)計與實現(xiàn)

我們需要將骨骼動畫網(wǎng)格模型的相關(guān)操作封裝到一組類和結(jié)構(gòu)中,這一組類和結(jié)構(gòu)可以看成一套完整的骨骼動畫網(wǎng)格模型接口,它們之間的關(guān)系如下圖所示:

其中,D3DXFRAME和D3DXMESHCONTAINER是Direct3D提供的兩個結(jié)構(gòu),D3DXMESHCONTAINER結(jié)構(gòu)用于保存模型的網(wǎng)格數(shù)據(jù),D3DXFRAME用于保存模型的骨骼框架。結(jié)構(gòu)D3DXMESHCONTAINER_DERIVED繼承自Direct3D提供的結(jié)構(gòu)D3DXMESHCONTAINER,結(jié)構(gòu)D3DXFRAME_DERIVED繼承自Direct3D提供的結(jié)構(gòu)D3DXFRAME,分別進行了相應的擴充,使其能夠保存所需要的其他數(shù)據(jù)。

cAllocateHierarchy類負責從動畫網(wǎng)格模型文件加載各種數(shù)據(jù),該類繼承自Direct3D中的ID3DXAllocateHierarchy接口。

cAnimMesh類是唯一對外開放的類,它通過cAllocateHierarchy類的對象從模型文件中加載所需的數(shù)據(jù),并負責處理骨骼動畫信息以及網(wǎng)格模型的渲染。

 

繼承并擴展結(jié)構(gòu)體D3DXFRAME

為了在渲染網(wǎng)格模型的同時播放包含在網(wǎng)格模型的動畫,需要處理兩個單獨的實體:骨骼結(jié)構(gòu)(即框架結(jié)構(gòu))和網(wǎng)格模型。框架結(jié)構(gòu)和網(wǎng)格模型的相關(guān)數(shù)據(jù)分別使用D3DXFRAME_DERIVED和D3DXMESHCONTAINER_DERIVED結(jié)構(gòu)保存。需要指出的是.x文件中的一個網(wǎng)格模型可以由多個框架和多個網(wǎng)格組成,但具體到某一個框架時,它一般只有一個網(wǎng)格,當然它也可以有多個網(wǎng)格。

為了方便加載骨骼動畫網(wǎng)格模型,Direct3D提供了兩個重要的結(jié)構(gòu)體:D3DXFRAME和D3DXMESHCONTAINER,其中D3DXFRAME用來加載框架,其定義如下:

Encapsulates a transform frame in a transformation frame hierarchy.

typedef struct D3DXFRAME {
LPSTR Name;
D3DXMATRIX TransformationMatrix;
LPD3DXMESHCONTAINER pMeshContainer;
D3DXFRAME * pFrameSibling;
D3DXFRAME * pFrameFirstChild;
} D3DXFRAME, *LPD3DXFRAME;

Members

Name
Name of the frame.
TransformationMatrix
Transformation matrix.
pMeshContainer
Pointer to the mesh container.
pFrameSibling
Pointer to a sibling frame.
pFrameFirstChild
Pointer to a child frame.

Remarks

An application can derive from this structure to add other data.

顯然在實現(xiàn)動畫網(wǎng)格模型的繪制前,不僅要得到每個框架的初始變換矩陣,同時還要得到從該框架的所有父節(jié)點到本級框架的組合變換矩陣,這是因為任何一個父框架的位置改變都會影響該框架自身位置的變化,所以在此將結(jié)構(gòu)D3DXFRAME擴展為D3DXFRAME_DERIVED,在D3DXFRAME_DERIVED中添加一個成員變量CombinedTransformMaitrx,用TransformationMatrix記錄在任何動畫數(shù)據(jù)未加載前框架的初始變換矩陣,也就是該框架的初始位置,用CombinedTransformMaitrx來記錄從所有的父框架到該框架自身所積累起來的組合變換矩陣,這樣就將整個網(wǎng)格模型很方便地組織起來了。

結(jié)構(gòu)D3DXFRAME_DERIVED的定義如下:

struct D3DXFRAME_DERIVED : public D3DXFRAME
{
D3DXMATRIX CombinedTransformMatrix;
};

 

繼承并擴展結(jié)構(gòu)體D3DXMESHCONTAINER

結(jié)構(gòu)體D3DXMESHCONTAINER用來加載每個具體網(wǎng)格模型的數(shù)據(jù),其定義如下:

Encapsulates a mesh object in a transformation frame hierarchy.

typedef struct D3DXMESHCONTAINER {
LPSTR Name;
D3DXMESHDATA MeshData;
LPD3DXMATERIAL pMaterials;
LPD3DXEFFECTINSTANCE pEffects;
DWORD NumMaterials;
DWORD * pAdjacency;
LPD3DXSKININFO pSkinInfo;
D3DXMESHCONTAINER * pNextMeshContainer;
} D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;

Members

Name
Mesh name.
MeshData
Type of data in the mesh.
pMaterials
Array of mesh materials.
pEffects
Pointer to a set of default effect parameters.
NumMaterials
Number of materials in the mesh.
pAdjacency
Pointer to an array of three DWORDs per triangle of the mesh that contains adjacency information.
pSkinInfo
Pointer to the skin information interface.
pNextMeshContainer
Pointer to the next mesh container.

 

結(jié)構(gòu)體D3DXMESHCONTAINER中沒有記錄網(wǎng)格模型的紋理信息,所以將該結(jié)構(gòu)體擴展為D3DXMESHCONTAINER_DERIVED,定義如下:

struct D3DXMESHCONTAINER_DERIVED : public D3DXMESHCONTAINER
{
IDirect3DTexture9** ppTextures;
};

其中ppTextures用來存儲網(wǎng)格模型的紋理對象。


posted on 2008-06-11 14:22 lovedday 閱讀(2130) 評論(2)  編輯 收藏 引用

評論

# re: 網(wǎng)格模型高級技術(shù)(11)[未登錄] 2012-07-10 17:56 d

網(wǎng)上查東西,總是點著點著就進您的博客了~膜拜~  回復  更多評論   

# re: 網(wǎng)格模型高級技術(shù)(11) 2012-10-15 10:06 小馬甲

同ls 感謝博主  回復  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费观看视频| 亚洲国产日韩欧美| 欧美一区二区黄色| 亚洲精品综合| 99综合视频| 亚洲欧美电影在线观看| 久久精精品视频| 欧美激情视频一区二区三区不卡| 欧美精品v国产精品v日韩精品 | 国产麻豆精品theporn| 国产精品尤物福利片在线观看| 国产亚洲欧美一区二区三区| 亚洲成人在线免费| 亚洲图片欧美日产| 久久夜色精品国产欧美乱| 亚洲激情女人| 亚洲欧美自拍偷拍| 老色鬼久久亚洲一区二区| 欧美精品激情| 韩国av一区二区三区| 日韩一区二区精品| 久久精品视频在线| 一本色道久久综合| 美女日韩在线中文字幕| 国产精品亚洲成人| 亚洲激情啪啪| 久久成人这里只有精品| 亚洲免费av片| 欧美不卡在线| 一区二区三区在线免费观看| 亚洲欧美怡红院| 亚洲激情网址| 裸体一区二区三区| 国产一区二区三区免费在线观看| 一区二区冒白浆视频| 男人天堂欧美日韩| 午夜精品美女久久久久av福利| 欧美激情精品久久久久久黑人| 9l视频自拍蝌蚪9l视频成人| 开心色5月久久精品| 欧美日韩一区自拍| 亚洲精品久久久久| 久久婷婷久久| 亚洲欧美在线一区| 国产精品福利片| 夜夜嗨av一区二区三区四季av| 久热精品在线| 午夜免费日韩视频| 国产精品最新自拍| 亚洲欧美日韩综合| 亚洲日韩欧美视频| 欧美国产一区在线| 亚洲韩国日本中文字幕| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲图片欧洲图片日韩av| 欧美国产一区二区在线观看 | 欧美在线视频日韩| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 99国产一区二区三精品乱码| 可以看av的网站久久看| 一区二区在线观看视频在线观看| 久久久成人网| 久久精品国产精品 | 欧美日韩国产精品一区二区亚洲| 亚洲免费av片| 99视频有精品| 国产精品区一区二区三| 亚洲欧美日韩视频一区| 午夜精品久久99蜜桃的功能介绍| 国产亚洲福利一区| 免费一级欧美片在线观看| 欧美风情在线观看| 一二三区精品| 亚洲欧美在线一区二区| 伊人久久婷婷| 亚洲国产裸拍裸体视频在线观看乱了 | 久久精品观看| 亚洲激情另类| 在线亚洲欧美专区二区| 国产日韩欧美自拍| 欧美激情视频网站| 欧美日韩一区二区三| 久久精品日产第一区二区| 欧美一区二区高清| 亚洲电影av| 欧美不卡激情三级在线观看| 99精品欧美一区二区三区| 亚洲一二区在线| 一区二区视频欧美| 亚洲免费观看在线视频| 国产亚洲精品一区二555| 欧美大片一区| 国产麻豆综合| 亚洲激情视频在线| 国产午夜精品一区二区三区欧美 | 亚洲国产午夜| 亚洲午夜在线观看| 亚洲国产成人av| 亚洲图片在线| 亚洲黄色成人| 性欧美videos另类喷潮| 99ri日韩精品视频| 久久精品视频免费| 亚洲欧美成aⅴ人在线观看| 美女亚洲精品| 久久亚洲国产成人| 欧美视频中文字幕| 亚洲第一免费播放区| 国产在线播精品第三| 宅男噜噜噜66国产日韩在线观看| 亚洲国产高清aⅴ视频| 欧美一级日韩一级| 亚洲欧美一区二区在线观看| 欧美精品久久一区| 亚洲电影免费在线观看| 在线观看国产欧美| 欧美综合二区| 欧美在线视频观看免费网站| 欧美日精品一区视频| 亚洲人www| 亚洲日韩成人| 欧美1区视频| 欧美www视频在线观看| 国产一区二区三区在线观看视频 | 亚洲一区在线观看视频| 欧美大片免费久久精品三p| 久久一本综合频道| 国产午夜亚洲精品羞羞网站| 亚洲一区免费网站| 亚洲欧美日韩天堂| 国产精品嫩草影院av蜜臀| 一本色道久久综合狠狠躁的推荐| 一本色道久久综合| 欧美日韩国产综合视频在线观看| 亚洲人成亚洲人成在线观看| 亚洲激情网站免费观看| 久久人人爽人人爽| 欧美高清成人| 亚洲国产精品成人精品| 国产精品视频一二| 亚洲日本久久| 亚洲视频一区二区| 国产精品久久999| 亚洲天堂成人| 欧美在线黄色| 亚洲第一中文字幕在线观看| 男人的天堂亚洲| 亚洲国产三级在线| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久久久久久久蜜桃| 久久免费黄色| 亚洲人成人99网站| 欧美日韩亚洲一区二区三区在线| 中文亚洲免费| 久久久高清一区二区三区| 亚洲高清视频在线| 欧美三级电影网| 欧美一区二区精品| 亚洲国产精品一区二区第一页| 在线午夜精品自拍| 国产无一区二区| 蜜臀av一级做a爰片久久| 99av国产精品欲麻豆| 久久精品国产99国产精品| 亚洲国产一区在线观看| 国产精品区二区三区日本| 久久久亚洲国产美女国产盗摄| 亚洲激情网址| 久久久久一区二区三区四区| 亚洲精品在线视频| 国产欧美一区视频| 欧美精品成人一区二区在线观看 | 欧美剧在线观看| 欧美影院视频| 99re6热只有精品免费观看| 久久久久国色av免费观看性色| 日韩小视频在线观看专区| 国产日韩欧美一区二区三区四区 | 久久久综合网站| 日韩亚洲视频| 免费中文日韩| 欧美在线免费视屏| 中文精品视频| 亚洲国产色一区| 国产在线精品一区二区夜色| 欧美日韩亚洲综合在线| 麻豆精品精华液| 亚洲专区国产精品| 日韩一区二区电影网| 亚洲国产成人久久| 免费永久网站黄欧美| 久久大逼视频| 亚洲欧洲av一区二区| 一本色道久久综合亚洲精品不| 亚洲国产精彩中文乱码av在线播放| 国产欧美一区二区三区久久人妖| 欧美视频日韩视频| 欧美精品一区二区三区蜜臀| 欧美成人午夜剧场免费观看| 久久免费国产|