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

天行健 君子當自強而不息

Working with skeletal animation(4)

Working with Skinned Meshes

In the first half of this chapter, you learned how to manipulate a hierarchy of bones that forms the basis of skeletal animation. That's all fine and dandy, but playing with imaginary bones isn't going to cut the mustard. Your game's players need to see all your hard work in the form of rendered meshes, which is where skinned meshes come in.

Skinned meshes are almost like the standard meshes with which you are already familiar. Using a D3DXMESHCONTAINER_EX object, you can store your mesh's data, from the vertices and indices to the materials and texture data, all wrapped up in one convenient ID3DXMesh object. As for the actual skinned mesh data, that information is contained in a special object called ID3DXSkinInfo.

I'll skip the ID3DXSkinInfo introductions for the moment and instead explain what makes a skinned mesh unique to other meshes. A skinned mesh deforms to match the orientation of the underlying skeletal structure. As the bones twist and turn, so do the mesh's vertices. The mesh−s vertices make the skinned mesh unique. You'll be dealing with the changing positions of the vertices when it comes to skinned meshes.

Take a look at Figure 4.3, which shows a skeleton surrounded by a simplistic mesh.

In Figure 4.3, each vertex is connected to a bone. As a bone moves, so do the vertices that are attached to it. For example, if you were to rotate the bone 45 degrees about the x−axis, the attached vertices would rotate 45 degrees as well, with the bone's joint acting as the pivot point or the origin of the rotation.

Now take a closer look at Figure 4.3, and you'll see that a couple vertices are attached to more than one bone. That's right−you're not limited to attaching a vertex to a single bone. In fact, you can connect a vertex to as many bones as you want with DirectX. Whenever one of the bones to which the vertex is attached moves, the vertex inherits a percentage of the motion. For example, if a bone rotates 60 degrees about the z−axis, an attached vertex may inherit only 25 percent of the motion, meaning the vertex will rotate only 15 degrees about the z−axis.

The exact percentage of motion the vertex inherits is called the vertex weight. Each vertex in the skinned mesh is assigned one vertex weight per bone to which it is attached. Those weights are typically 1.0 for vertices that are attached to only one bone, meaning that the vertex inherits the full motion of the bone. The weights are divided among the bones for vertices attached to multiple bones, and are usually calculated by taking into consideration the vertex's distance from each bone. (Most 3D modeling programs will graciously
calculate this for you.) For example, suppose a vertex is attached to two bones, meaning that both weights are set to 0.5. The vertex will inherit 50 percent of the motion from each bone. Notice that the total of all weights summed must always equal 1.

The purpose of using skin weights is quite ingenious. By allowing certain bones to influence specific vertices, you can have awesome effects such as wrinkling skin, bulging muscles, and stretching clothes−all in real time as your characters animate!

The way DirectX treats the vertex weights is quite simple. After you've loaded a mesh to use as your skinned mesh and you've loaded the vertex weights (also called skin weights), you can transform the vertices to match the bones' orientations using the following steps.

1. Iterate all vertices. For each vertex, proceed to Step 2.

2. For each bone to which the current vertex is connected, get the bone transformation. For each bone transformation, multiply the matrix by the vertex's weight and apply the result to a combined transformation for the vertex.

3. Repeat Step 3 for each bone connected, and repeat Steps 2 through 4 for each vertex. When you're finished, apply the combined transformation matrix to the specific vertex being iterated (from Step 1).

How exactly do you obtain these skin weights? With the help of the ID3DXSkinInfo object I mentioned earlier, you can load the weights from an .X file. The skin weights are stored within a Mesh data object, usually at the end of the Mesh object's data.

For each bone in your skeletal structure, there is a matching SkinWeights data object. Inside the SkinWeights object is the name of the bone, followed by a number of vertices attached to it. A skinned mesh header determines the number of bones to which each vertex in the mesh can be connected. If some of the vertices are attached to two bones, then all vertices must be attached to two bones. To get around the oddity of having vertices that connect to different numbers of bones, you can assign a weight of 0 to the second bone.

As I mentioned, the SkinWeights object includes the number of vertices that are connected to the bone. It lists an array of vertex index numbers. After the array of vertex indices, there is an array of vertex weight values. Finally, there is an inversed bone transformation to help you orient the vertices around the bone's joint.

Take a look at this sample SkinWeights template data object:

SkinWeights {
"Bip01_R_UpperArm";
4;
0, 3449, 3429, 1738;
0.605239, 0.605239, 0.605239, 0.979129;
−0.941743, −0.646748, 0.574719, 0.000000,
−0.283133, −0.461979, −0.983825, 0.000000,
0.923060, −1.114919, 0.257891, 0.000000,
−65.499557, 30.497688, 12.852692, 1.000000;;
}

In this data object, a bone called Bip01_R_UpperArm is used. There are four vertices attached to the bone, and the vertex indices are 0, 3449, 3429, and 1738. Vertex 0 has a weight of 0.605239, vertex 1 has a weight of 0.605239, and so on. A transformation matrix aligns the vertices listed around the bone's joint. This matrix is very important. Without it, the vertices will rotate around the origin of the world instead of the bone's joint.

Thankfully, you don't have to deal directly with the SkinWeights templates. The data is handled for you while you are loading the skinned mesh from an .X file using the D3DX helper functions.


posted on 2008-04-23 18:42 lovedday 閱讀(472) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            国产欧美一区二区三区久久人妖 | 艳女tv在线观看国产一区| 这里只有视频精品| 91久久嫩草影院一区二区| 亚洲国产日韩欧美在线动漫| 久久久久天天天天| 亚欧美中日韩视频| 亚洲国语精品自产拍在线观看| 国内激情久久| 国产视频精品免费播放| 一区二区三区高清视频在线观看 | 国产精品欧美日韩一区二区| 欧美成人综合在线| 欧美mv日韩mv国产网站| 欧美日韩视频免费播放| 欧美美女操人视频| 国产拍揄自揄精品视频麻豆| 国产麻豆91精品| 国产日韩精品在线| 亚洲黄色小视频| 亚洲精品美女久久久久| 亚洲国产一区二区三区在线播 | 欧美激情第六页| 亚洲国产精品毛片| 午夜欧美不卡精品aaaaa| 亚洲精品一区二区三区婷婷月| 亚洲国产一区二区a毛片| 美女网站久久| 91久久黄色| 欧美一区二区网站| 免费久久99精品国产自| 久久精品99国产精品酒店日本| 欧美大片免费| 欧美网站在线| 亚洲综合色噜噜狠狠| 久久综合给合久久狠狠色 | 农夫在线精品视频免费观看| 日韩视频一区二区三区在线播放| 亚洲桃花岛网站| av成人免费在线| 噜噜噜91成人网| 欧美深夜福利| 另类国产ts人妖高潮视频| 亚洲韩国青草视频| 一本色道精品久久一区二区三区 | 亚洲欧美日本国产专区一区| 欧美.日韩.国产.一区.二区| 国产精品日韩久久久| 亚洲国产一区二区在线| 暖暖成人免费视频| 亚洲永久免费| 欧美日韩视频在线一区二区观看视频| 国产麻豆日韩欧美久久| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲免费在线电影| 女生裸体视频一区二区三区| 欧美伊人久久大香线蕉综合69| 欧美—级高清免费播放| 国产一区99| 欧美伊人久久久久久午夜久久久久| 欧美国产高清| 久久久午夜电影| 国产伦精品一区二区三区| 午夜精品福利视频| 亚洲免费观看视频| 亚洲欧美日韩国产综合| 国产精品日韩精品欧美精品| 9色porny自拍视频一区二区| 亚洲国产欧美日韩精品| 免费成人网www| 在线观看日韩av电影| 久久视频国产精品免费视频在线| 一区二区三区www| 久久国产福利国产秒拍| 午夜欧美精品| 国产精品欧美一区喷水| 欧美一区二区三区男人的天堂| 亚洲最新中文字幕| 亚洲愉拍自拍另类高清精品| 国产精品一级久久久| 亚洲在线观看视频| 午夜久久久久久| 国产精品综合色区在线观看| 欧美一级大片在线免费观看| 午夜在线一区| 国产一区二区三区久久久| 米奇777超碰欧美日韩亚洲| 久久亚洲春色中文字幕| 亚洲第一网站免费视频| 日韩午夜中文字幕| 欧美视频一区二区三区四区| 亚洲人成在线观看网站高清| 亚洲精品永久免费| 欧美日韩在线大尺度| 久久国产加勒比精品无码| 香蕉视频成人在线观看| 国产主播一区二区三区四区| 亚洲国产成人在线| 欧美日韩国产欧| 久久久综合网站| 欧美亚洲成人网| 两个人的视频www国产精品| 欧美一级电影久久| 亚洲国产日韩欧美一区二区三区| 欧美mv日韩mv国产网站app| 午夜欧美视频| 99国产精品自拍| 亚洲视频一区二区免费在线观看| 影音欧美亚洲| 亚洲精品日韩在线| 欧美国产日韩免费| 欧美一区二区精美| 久久亚洲视频| 欧美一进一出视频| 美日韩精品视频| 亚洲一区二区三区影院| 毛片一区二区三区| 亚洲一区二区视频| 久久久噜噜噜久久| 在线视频日韩| 久久www成人_看片免费不卡| 99pao成人国产永久免费视频| 一区二区高清在线观看| 红桃视频国产精品| 亚洲摸下面视频| 亚洲精品日韩在线观看| 欧美电影免费观看高清完整版| 国产女主播一区二区| 亚洲国产精品黑人久久久| 国语自产精品视频在线看抢先版结局 | 在线看国产日韩| 99国产精品久久| 亚洲精品久久久久久久久久久久 | 欧美怡红院视频| 欧美国产日韩精品| 亚洲电影第1页| 狠狠噜噜久久| 亚洲一区二区三区免费在线观看| 日韩一区二区高清| 久久综合一区二区| 美女图片一区二区| 国产精品日韩在线播放| 亚洲高清不卡av| 亚洲激情在线视频| 久久国产精品久久久久久电车| 在线成人av网站| 久久精品一区二区| 欧美中文字幕精品| 国产精品欧美日韩久久| 亚洲美女色禁图| 亚洲精品资源| 欧美va天堂在线| 老司机aⅴ在线精品导航| 猛男gaygay欧美视频| 久久免费国产| 国内视频精品| 欧美在线视频不卡| 久久精品欧美日韩| 国产欧美一区二区三区在线老狼| 亚洲欧美日韩成人| 国产免费一区二区三区香蕉精| 久久免费精品视频| 一区二区三区在线视频播放| 亚洲性感美女99在线| 久久国产一二区| 国产精品实拍| 久久高清国产| 久久蜜桃资源一区二区老牛| 在线观看一区视频| 久久一区亚洲| 欧美电影美腿模特1979在线看 | 国产日韩欧美精品| 夜夜夜久久久| 久久理论片午夜琪琪电影网| 激情丁香综合| 欧美日韩亚洲网| 亚洲伊人一本大道中文字幕| 欧美视频观看一区| 亚洲一区二区在线免费观看| 欧美一区二区视频在线| 亚洲国产欧美另类丝袜| 欧美国产另类| 久久久久久久久久久一区 | 一本大道av伊人久久综合| 久久免费偷拍视频| 亚洲黄色性网站| 国产精品制服诱惑| 久久久久久一区二区三区| 久久久一本精品99久久精品66| 亚洲经典一区| 欧美午夜视频在线观看| 久久久噜噜噜久噜久久| 亚洲日本一区二区| 久久综合亚州| 亚洲午夜电影| 国产精品普通话对白| 欧美日韩国产成人在线免费| 另类春色校园亚洲| 午夜国产一区| 亚洲精品乱码久久久久久久久 |