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

天行健 君子當自強而不息

網格模型高級技術(4)

為了使一個.x文件產生動畫,必須至少提供一個動畫集,每個動畫集都應具有一個對某個框架的引用。模板 AnimationSet用來定義動畫集:

Contains one or more Animation objects. Each animation within an animation set has the same time at any given point. Increasing the animation set's time increases the time for all the animations it contains.

template AnimationSet
{
< 3D82AB50-62DA-11cf-AB39-0020AF71E433 >
[ Animation < 3D82AB4F-62DA-11cf-AB39-0020AF71E433 > ]
}

Where:

  • [ Animation < 3D82AB4F-62DA-11cf-AB39-0020AF71E433 > ] - Optional animation template.

模板Animation的定義如下:

Contains one or more Animation objects. Each animation within an animation set has the same time at any given point. Increasing the animation set's time increases the time for all the animations it contains.

template AnimationSet
{
< 3D82AB50-62DA-11cf-AB39-0020AF71E433 >
[ Animation < 3D82AB4F-62DA-11cf-AB39-0020AF71E433 > ]
}

Where:

  • [ Animation < 3D82AB4F-62DA-11cf-AB39-0020AF71E433 > ] - Optional animation template.

很顯然,Animation是一個完全開放的模板,一般情況下,用模板AnimationKey來填充它,模板AnimationKey的定義如下:

Defines a set of animation keys. A matrix key is useful for sets of animation data that need to be represented as transformation matrices.

template AnimationKey
{
< 10DD46A8-775B-11CF-8F52-0040333594A3 >
DWORD keyType;
DWORD nKeys;
array TimedFloatKeys keys[nKeys];
}

Where:

  • keyType - Specifies whether the keys are rotation, scale, position, or matrix keys (using the integers 0, 1, 2, or 4, respectively).
  • nKeys - Number of keys.
  • keys - An array of keys.

在模板AnimationKey中,keyType可取的值是0、1、2、4。

0表示旋轉鍵,在.x文件中,用一個四元數來實現模型的旋轉,旋轉值使用4個分量w、x、y、z來存儲,也就是說,此時變換數組的大小是4,它依次存儲四元數的4個分量。

1表示縮放鍵,可以使用這種類型的關鍵幀實現模型的縮放,此時變換數組的大小是3,它們分別對應x、y、z軸的縮放值。

2表示平移鍵,使用3個分量實現模型的平移,此時變換數組的大小是3,它們分別對應沿x、y、z軸的平移值。

4表示變換矩陣鍵,此時關鍵幀的變換數組使用16個浮點數來實現該模型的各種變換。因為矩陣可以實現模型的平移、旋轉、縮放以及它們的組合變換。

模板AnimationKey用來定義一組動畫關鍵幀,而模板TimeFloatKeys用來定義每個動畫關鍵幀:

Defines a set of floats and a positive time used in animations.

template TimedFloatKeys 
{
< F406B180-7B3B-11cf-8F52-0040333594A3 >
DWORD time;
FloatKeys tfkeys;
}

Where:

  • tfkeys - See FloatKeys.

Defines an array of floating-point numbers (floats) and the number of floats in that array. This is used for defining sets of animation keys.

template FloatKeys
{
< 10DD46A9-775B-11cf-8F52-0040333594A3 >
DWORD nValues;
array float values[nValues];
}
  • nValues - Number of floats.
  • values[nValues] - Array of float values.

我們在cube_3.x的基礎上添加動畫部分形成cube_4.x,該動畫集定義了立方體繞y軸旋轉,增加部分如下:

AnimationSet AnimationSet0 {  //動畫集
Animation Animation0 { //動畫
{CubeFrame} //引用上面的立方體框架,表示下面的動畫是針對立方體框架的
		AnimationKey {                //動畫鍵   沿Y軸旋轉網格
0; // Rotation keys
10; // 9 keys
			1000; 4; 0.000000, 0.15643448, 0.000000, 0.98768836;;,
2000; 4; 0.000000, 0.30901700, 0.000000, 0.95105654;;,
3000; 4; 0.000000, 0.45399046, 0.000000, 0.89100653;;,
4000; 4; 0.000000, 0.58778530, 0.000000, 0.80901694;;,
5000; 4; 0.000000, 0.70710671, 0.000000, 0.70710683;;,
6000; 4; 0.000000, 0.80901694, 0.000000, 0.58778530;;,
7000; 4; 0.000000, 0.89100653, 0.000000, 0.45399052;;,
8000; 4; 0.000000, 0.95105654, 0.000000, 0.30901697;;,
9000; 4; 0.000000, 0.98768836, 0.000000, 0.15643449;;,
10000; 4; 0.000000, 1.0000000, 0.000000, 0.00000000;;;
}
}
}

這里一共定義了10個關鍵幀,在第10個關鍵幀時回到初始位置開始新一輪的動畫。{CubeFrame}表示該動畫集是對框架CubeFrame進行的操作。

我們在cube_3.x的基礎上添加縮放動畫形成cube_5.x:

AnimationSet AnimationSet0 {   //動畫集
Animation Animation0 { //動畫
{CubeFrame} // Use the frame containing the cube.
		AnimationKey {                 //動畫鍵, 放大和縮小網格
1; // Scaling keys
9; // 9 keys
			1000; 3; 1.000000, 1.000000, 1.000000;;,
2000; 3; 0.800000, 0.800000, 0.800000;;,
3000; 3; 0.600000, 0.600000, 0.600000;;,
4000; 3; 0.400000, 0.400000, 0.400000;;,
5000; 3; 0.200000, 0.200000, 0.200000;;,
6000; 3; 0.400000, 0.400000, 0.400000;;,
7000; 3; 0.600000, 0.600000, 0.600000;;,
8000; 3; 0.800000, 0.800000, 0.800000;;,
9000; 3; 1.000000, 1.000000, 1.000000;;;
}
}
}

效果圖:

 

我們也可以在cube_3.x的基礎上添加一個沿y軸移動的動畫形成cube_6.x:

AnimationSet AnimationSet0 {   //動畫集
Animation Animation0 { //動畫
{CubeFrame} // Use the frame containing the cube.
		AnimationKey {                 //動畫鍵   沿Y軸方向移動網格
2; // Position keys
19; // 9 keys
1000; 3; 0.000000, -5.000000, 0.000000;;,
2000; 3; 0.000000, -4.000000, 0.000000;;,
3000; 3; 0.000000, -3.000000, 0.000000;;,
4000; 3; 0.000000, -2.000000, 0.000000;;,
5000; 3; 0.000000, -1.000000, 0.000000;;,
6000; 3; 0.000000, 0.000000, 0.000000;;,
7000; 3; 0.000000, 1.000000, 0.000000;;,
8000; 3; 0.000000, 2.000000, 0.000000;;,
9000; 3; 0.000000, 3.000000, 0.000000;;,
10000; 3; 0.000000, 4.000000, 0.000000;;,
11000; 3; 0.000000, 5.000000, 0.000000;;,
12000; 3; 0.000000, 4.000000, 0.000000;;,
12000; 3; 0.000000, 3.000000, 0.000000;;,
13000; 3; 0.000000, 2.000000, 0.000000;;,
14000; 3; 0.000000, 1.000000, 0.000000;;,
15000; 3; 0.000000, 0.000000, 0.000000;;,
16000; 3; 0.000000, -1.000000, 0.000000;;,
17000; 3; 0.000000, -2.000000, 0.000000;;,
18000; 3; 0.000000, -3.000000, 0.000000;;,
19000; 3; 0.000000, -4.000000, 0.000000;;,
}
}
}

效果圖:

 

包含在.x文件中的動畫通常用來實現模型不同部分之間的相對運動,對于一個模型整體上的運動,應該是在程序中通過其世界變換矩陣來實現。

 

蒙皮信息

一個動畫網格模型很多情況下可能涉及到蒙皮信息,模板XSkinMeshHeader僅對于具有蒙皮信息的網格模型有效,它用來記錄網格模型的蒙皮信息,該模板的定義如下:

This template is instantiated on a per-mesh basis only in meshes that contain exported skinning information. The purpose of this template is to provide information about the nature of the skinning information that was exported.

template XSkinMeshHeader 
{
< 3CF169CE-FF7C-44ab-93C0-F78F62D172E2 >
WORD nMaxSkinWeightsPerVertex;
WORD nMaxSkinWeightsPerFace;
WORD nBones;
}

Where:

  • nMaxSkinWeightsPerVertex - Maximum number of transforms that affect a vertex in the mesh.
  • nMaxSkinWeightsPerFace - Maximum number of unique transforms that affect the three vertices of any face.
  • nBones - Number of bones that affect vertices in this mesh.

在一個具有蒙皮信息的網格模型中,可能出現模板SkinWeights的n個實例,n等于該網格模型中骨骼的數量。該模板的每個實例都定義了一個具體的骨骼對于相應頂點的影響權重,該模板的具體定義如下:

This template is instantiated on a per-mesh basis. Within a mesh, a sequence of n instances of this template will appear, where n is the number of bones (X file frames) that influence the vertices in the mesh. Each instance of the template basically defines the influence of a particular bone on the mesh. There is a list of vertex indices, and a corresponding list of weights.

template SkinWeights 
{
< 6F0D123B-BAD2-4167-A0D0-80224F25FABB >
STRING transformNodeName;
DWORD nWeights;
array DWORD vertexIndices[nWeights];
array float weights[nWeights];
Matrix4x4 matrixOffset;
}

Where:

  • The name of the bone whose influence is being defined is transformNodeName, and nWeights is the number of vertices affected by this bone.
  • The vertices influenced by this bone are contained in vertexIndices, and the weights for each of the vertices influenced by this bone are contained in weights.
  • The matrix matrixOffset transforms the mesh vertices to the space of the bone. When concatenated to the bone's transform, this provides the world space coordinates of the mesh as affected by the bone.

 

下載cube_1.x ~ cube6.x


posted on 2008-05-27 15:44 lovedday 閱讀(2030) 評論(1)  編輯 收藏 引用

評論

# re: 網格模型高級技術(4) 2013-09-06 17:29 abc

講的太好了  回復  更多評論   


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


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久五月天婷婷| 久久精品在线免费观看| 欧美日韩国产精品| 一本一道久久综合狠狠老精东影业 | 在线播放中文一区| 毛片一区二区三区| 亚洲另类一区二区| 久久riav二区三区| 亚洲成人在线网站| 欧美体内谢she精2性欧美| 亚洲字幕在线观看| 女人色偷偷aa久久天堂| 99精品视频免费观看| 国产精品高清一区二区三区| 欧美一区二区三区在| 亚洲第一区色| 亚洲——在线| 雨宫琴音一区二区在线| 欧美激情在线狂野欧美精品| 亚洲午夜激情在线| 免费在线播放第一区高清av| 夜夜嗨一区二区| 国产欧美日韩三级| 欧美韩日一区二区| 午夜精品剧场| 亚洲区在线播放| 久久久水蜜桃av免费网站| 亚洲精品乱码久久久久久黑人 | 久久不见久久见免费视频1| 亚洲国产欧美日韩| 国产精品欧美经典| 欧美国产日韩亚洲一区| 午夜亚洲一区| 一区二区三区视频在线| 蜜臀a∨国产成人精品 | 久久人人看视频| 亚洲无限av看| 91久久精品美女高潮| 国产精品一区二区男女羞羞无遮挡| 久久综合伊人77777蜜臀| 亚洲午夜未删减在线观看| 欧美激情a∨在线视频播放| 欧美在线三区| 亚洲一区二区三区免费视频| 亚洲第一精品福利| 国产视频在线观看一区二区| 欧美日韩在线高清| 欧美成人tv| 久久亚裔精品欧美| 午夜久久影院| 中文有码久久| 亚洲美洲欧洲综合国产一区| 欧美成人免费大片| 久久久噜噜噜久久| 欧美在线欧美在线| 欧美一进一出视频| 亚洲欧美国产另类| 亚洲天堂av高清| 亚洲精品一区二区网址| 在线视频国内自拍亚洲视频| 国产欧美日韩免费| 国产日韩一区欧美| 国产日韩欧美91| 国产欧美日韩亚洲精品| 国产精品欧美一区二区三区奶水| 欧美日韩精品在线| 欧美日韩一区三区| 欧美日韩国产色站一区二区三区| 欧美二区视频| 欧美国产日韩一区二区三区| 欧美成人免费播放| 欧美激情精品久久久久久免费印度| 久久尤物视频| 欧美成人午夜激情| 欧美精品入口| 欧美午夜精品久久久久久久| 欧美三区在线| 国产精品永久在线| 国产一区二区三区电影在线观看 | 亚洲一区在线观看免费观看电影高清| 日韩视频免费在线| 日韩视频欧美视频| 一区二区三区四区国产| 亚洲午夜久久久久久久久电影院| 亚洲午夜精品| 欧美一区二区三区免费视频| 久久久久久黄| 欧美激情一区二区三区不卡| 亚洲欧洲在线一区| 中日韩高清电影网| 翔田千里一区二区| 狼狼综合久久久久综合网| 欧美黄色小视频| 国产精品黄视频| 国产一区二区欧美日韩| 亚洲国内在线| 亚洲在线观看免费| 久久精品99国产精品日本| 免费成人在线视频网站| 亚洲国产精品一区二区久| 99精品国产在热久久下载| 亚洲愉拍自拍另类高清精品| 久久久亚洲午夜电影| 欧美另类亚洲| 国产视频一区二区三区在线观看| 在线播放不卡| 亚洲天堂激情| 久久综合一区二区三区| 亚洲精品国产精品国自产观看浪潮| 一本色道久久| 久久久99国产精品免费| 欧美日韩精品一本二本三本| 国产视频一区在线| 99热精品在线| 久久久久久久高潮| 亚洲免费成人av电影| 久久国产直播| 欧美视频在线观看视频极品| 好吊妞**欧美| 亚洲一区二区三区四区五区午夜| 久色婷婷小香蕉久久| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品国产三级国产专播品爱网| 国产一区二区三区的电影| 日韩一区二区久久| 久久婷婷麻豆| 亚洲视频欧美视频| 欧美成人激情在线| 激情偷拍久久| 欧美亚洲视频在线观看| 亚洲精品看片| 久久一区二区三区国产精品 | 韩国精品主播一区二区在线观看| 一区二区三区精品在线| 美女精品在线| 欧美一级二区| 国产精品久久久久久久电影| 亚洲国产高清一区| 久久久精品动漫| 亚洲一区一卡| 欧美午夜精品久久久久久浪潮| 亚洲三级影片| 欧美国产91| 久久深夜福利| 激情久久五月| 久久久久九九九九| 午夜精品一区二区三区电影天堂| 欧美日韩一区二区在线观看| 亚洲精品美女免费| 欧美大片免费久久精品三p| 欧美一区日韩一区| 国产精品一区二区三区观看| 亚洲欧美国产va在线影院| 一区二区日韩精品| 欧美日韩中文在线| 亚洲午夜视频在线观看| 亚洲精品免费在线| 欧美激情一区二区三区全黄| 亚洲日本视频| 亚洲国产三级网| 欧美国产日韩在线| 日韩一级黄色大片| 亚洲乱码国产乱码精品精98午夜| 欧美福利影院| 一区二区三区www| 亚洲乱码国产乱码精品精可以看| 欧美日韩精品一区二区三区四区| 一区二区三区国产在线| 99视频+国产日韩欧美| 欧美午夜宅男影院| 午夜精彩国产免费不卡不顿大片| 一区二区三区四区精品| 国产精品一区二区三区成人| 久久国产精品一区二区三区四区| 欧美亚洲日本网站| 在线欧美电影| 亚洲国产婷婷香蕉久久久久久99| 欧美男人的天堂| 亚洲在线日韩| 欧美一区二区在线免费播放| 在线观看成人一级片| 亚洲福利视频二区| 欧美三级在线播放| 久久久精品视频成人| 久久久噜噜噜| 一区二区三区**美女毛片 | 久久精品噜噜噜成人av农村| 亚洲福利精品| 亚洲麻豆国产自偷在线| 国产区精品视频| 麻豆精品在线观看| 欧美日韩精品一区二区天天拍小说| 亚洲自拍都市欧美小说| 欧美在线视频免费| 亚洲日本无吗高清不卡| 在线综合亚洲| 在线观看视频亚洲| 一本一道久久综合狠狠老精东影业 | 久久久久久久999| 欧美激情成人在线|