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

天行健 君子當自強而不息

網格模型高級技術(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 閱讀(2028) 評論(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>
            欧美成人中文| 一区二区三区在线观看欧美| 亚洲欧美日韩在线高清直播| 亚洲精品专区| 亚洲精品国产品国语在线app| 理论片一区二区在线| 欧美大片va欧美在线播放| 亚洲国产精品激情在线观看| 亚洲人成人一区二区三区| 亚洲欧洲免费视频| 亚洲一二三区精品| 久久精品女人| 欧美国产精品一区| 国产精品jizz在线观看美国| 国产日韩一区二区三区在线播放| 狠狠干成人综合网| 999亚洲国产精| 久久精品国产视频| 亚洲国产婷婷香蕉久久久久久99| 在线综合亚洲| 久久综合狠狠综合久久综合88| 欧美激情中文不卡| 国产精品中文字幕欧美| 亚洲成人在线视频网站| 亚洲女同精品视频| 欧美激情麻豆| 欧美一区二区成人6969| 欧美日韩www| 亚洲国产你懂的| 亚洲免费高清| 久久久另类综合| 亚洲人妖在线| 久久精品视频在线播放| 欧美日韩在线第一页| 一区视频在线播放| 亚洲欧美韩国| 亚洲人体大胆视频| 久久久久中文| 国产性做久久久久久| 中日韩美女免费视频网址在线观看| 久久久人人人| 亚洲欧美另类中文字幕| 欧美理论电影在线观看| 亚洲高清影视| 裸体女人亚洲精品一区| 亚洲视频免费在线观看| 欧美日本国产| 亚洲卡通欧美制服中文| 欧美aa国产视频| 久久精品女人| 国产一区二区三区精品欧美日韩一区二区三区| aa级大片欧美| 亚洲美女视频在线观看| 欧美成人精品1314www| 亚洲大黄网站| 女仆av观看一区| 麻豆91精品| 亚洲国产视频一区| 欧美成人视屏| 免费观看一区| 亚洲毛片一区| 亚洲巨乳在线| 欧美午夜在线| 欧美一级电影久久| 亚洲综合视频一区| 国产一区二区三区久久久久久久久 | 久久激情视频久久| 亚洲一区二区三| 国产精品美女久久久久久久| 亚洲综合三区| 欧美一级视频免费在线观看| 国产一区二区看久久| 久久全球大尺度高清视频| 久久久91精品| 日韩视频国产视频| 亚洲一二三区在线观看| 国产乱人伦精品一区二区| 久久精品亚洲| 免费影视亚洲| 亚洲一区在线免费观看| 午夜精品久久久久久久久久久久久 | 国产欧美日韩| 国产精品伊人日日| 久久成年人视频| 久久视频在线视频| 亚洲毛片视频| 亚洲午夜极品| 亚洲电影下载| 亚洲天堂黄色| 亚洲福利视频网站| 一区二区三区精密机械公司 | 嫩模写真一区二区三区三州| 99人久久精品视频最新地址| 亚洲自拍偷拍麻豆| 在线免费观看一区二区三区| 99国产精品一区| 精品白丝av| 日韩视频在线免费| 一区二区在线观看视频| 99精品免费网| 亚洲国产日韩欧美在线99| 亚洲午夜精品一区二区| 亚洲国产高潮在线观看| 亚洲与欧洲av电影| 亚洲蜜桃精久久久久久久| 亚洲欧美在线磁力| 一区二区欧美精品| 久久一区二区三区超碰国产精品| 在线视频一区二区| 久久伊人一区二区| 欧美一区二区三区婷婷月色| 欧美国产日韩二区| 美女诱惑一区| 国产亚洲综合性久久久影院| av成人免费观看| 亚洲激情社区| 久久一区亚洲| 久久一区二区三区国产精品| 国产精品视频在线观看| 亚洲精品综合精品自拍| 亚洲国产合集| 久久久午夜电影| 久久久久久久激情视频| 国产精品美女久久久| 一本色道婷婷久久欧美| 亚洲伦理网站| 欧美极品一区| 亚洲三级电影全部在线观看高清 | 一色屋精品视频免费看| 午夜精品福利一区二区蜜股av| 国产精品99久久99久久久二8 | 久久久久免费| 久久久久国产成人精品亚洲午夜| 欧美亚一区二区| 在线视频一区二区| 亚洲欧美激情诱惑| 欧美视频二区36p| 一区二区三区不卡视频在线观看 | 午夜激情综合网| av成人老司机| 亚洲一区二区精品在线观看| 欧美精选一区| 亚洲欧洲日韩在线| 亚洲美女电影在线| 欧美日韩国产精品一区| 日韩亚洲精品视频| 午夜影视日本亚洲欧洲精品| 国产精品一区久久久久| 欧美一站二站| 欧美国产精品久久| 一本色道久久综合| 国产精品色一区二区三区| 亚洲影音先锋| 久久最新视频| 亚洲乱码国产乱码精品精98午夜| 欧美另类视频| 午夜精彩国产免费不卡不顿大片| 久久综合国产精品| 亚洲欧洲久久| 国产精品久久久久99| 亚洲欧美日韩精品久久| 男男成人高潮片免费网站| 亚洲毛片网站| 国产日韩在线看| 久久男人av资源网站| 亚洲精品视频中文字幕| 欧美伊久线香蕉线新在线| 亚洲成色777777在线观看影院| 欧美精品福利在线| 午夜宅男欧美| 亚洲人成7777| 久久久青草婷婷精品综合日韩| 亚洲激情成人| 国产伦精品一区二区三区免费| 久久亚洲视频| 亚洲一区二区三区四区五区午夜| 久久免费视频观看| 亚洲一级特黄| 91久久久久久久久| 国产日韩1区| 欧美日本在线视频| 久久久999精品视频| 一区二区三区高清不卡| 欧美电影免费观看高清| 欧美资源在线| 亚洲特级毛片| 亚洲国内精品| 激情五月综合色婷婷一区二区| 欧美日韩小视频| 欧美xx视频| 久久久综合香蕉尹人综合网| 亚洲一区二区免费| 亚洲精品久久久久| 欧美国产免费| 毛片一区二区三区| 久久精品毛片| 欧美在线一二三区| 欧美一区二区成人6969| 亚洲午夜国产成人av电影男同| 亚洲激情一区|