游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5913|回复: 12

蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

[复制链接]

5

主题

31

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2009-3-26 22:18:00 | 显示全部楼层 |阅读模式
有人能讲一下蒙皮动画中骨骼(骨头)和顶点的关系以及联系吗?
最近在研究蒙皮骨骼动画,可具体到骨骼和顶点之间是如何联系起来的就有点搞不清了,也就是骨骼矩阵索引那块?
还有在.X文件里他们之间的关系是怎么体现出来的呢?

下面是我对骨骼动画的一部分理解,请各位帮我看看我的理解正确否,谢谢
首先是.X文件,每个.X文件下有一个或多个Frame,这里的一个Frame可以看作是一个骨骼Bone,但是肯定总有一个根骨骼,然后其他骨骼直接或者间接连接根骨骼上面。
其次每个Frame下有一个或者多个Mesh,每个Mesh又被分成N个子集,子集的个数根据硬件配置来判定,每个子集都有一个骨骼结合表(D3DXBONECOMBINATION),骨骼结合表里的BoneId数组里存放的是此影响此子集里顶点的骨骼矩阵索引表(Palette Table),索引表里的最大值就是骨骼的总个数了。
然后就是每个顶点最多受四个骨骼矩阵的影响。

说到这里还是对骨骼和顶点的关系很模糊。
是不是顶点在开始就由美工绑定到骨骼上去的?骨骼其实也就是有若干个三角形组成,三角形由顶点组成?
子集与骨骼的关系是怎样的呢,骨骼数是固定的,但子集数不是固定的,是不是子集表示的是骨骼的一部分?还是?

5

主题

31

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2009-3-27 17:42:00 | 显示全部楼层

Re: 蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

为什么没人回呢 这些问题搞得我头大了

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-27 18:33:00 | 显示全部楼层

Re:蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

其实bone的本质就是一种transformation,这种transformation可能包含位移,缩放或者旋转,为了方便讨论,可以把它看成一个matrix

对于一般非skinng mesh来说,一个顶点只会受到一个bone/matrix影响
但skinng mesh中的顶点可能会受到1~n个bone/matrix的影响,实时计算里,一般把n限制为4
一个模型可能包含n个bone,所以每个顶点就必须记录它受到哪几个bone的影响,这就是boneIndex
此外,每个顶点还需要记录每个bone对它影响的权重,这就是boneWeight,所有权重的和必须为1

所以,对于每个顶点:
position;
resultPos;
foreach boneIndex in VertexBoneindices
    resultPos = position * bones[boneIndex] * boneWeight;

你对.x文件感兴趣,可以看看Advanced Animation with DirectX的4~6章

顺便说一下,dx mesh那些frame,hierarchy概念简直是把简单的问题复杂化了,而且非常难用。如果有可能的话,尽量自己做模型导入,设计你自己的model/mesh类

5

主题

31

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2009-3-28 17:04:00 | 显示全部楼层

Re: 蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

谢谢楼上兄弟
有点明白了。
还有一点问一下,每个子集(SubSet)都有自己的Combination Table,表里的BondId里就是你楼上所说的Matrix,就是影响这个子集的所以骨骼矩阵。
但子集里的各个顶点是如何和BondId里影响它的各个矩阵联系起来,也就是对应起来(一个顶点对应1~4个矩阵),这个是不是由D3D自己内部管理的,无须我们手动设置???

8

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2009-3-28 20:07:00 | 显示全部楼层

Re: 蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

clayman讲的真精辟阿。一看就知道写过骨骼动画模块过。

5

主题

31

帖子

41

积分

注册会员

Rank: 2

积分
41
 楼主| 发表于 2009-3-28 21:46:00 | 显示全部楼层

Re: Re: 蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

zhaizai08: Re: 蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

谢谢楼上兄弟
有点明白了。
还有一点问一下,每个子集(SubSet)都有自己的Combination Table,表里的Bon...


clayman 能再帮我解释一下吗  非常非常的感谢再感谢

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-3-29 05:05:00 | 显示全部楼层

Re:蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

http://blog.csdn.net/soilwork/archive/2009/03/29/4033147.aspx
写的有点乱,不知道对你有没有用

0

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2009-4-1 03:01:00 | 显示全部楼层

Re:蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

struct D3DXFRAME_DERIVED: public D3DXFRAME
{
    D3DXMATRIXA16        CombinedTransformationMatrix;
};

增加一个组合矩阵连接每个骨头的transformationMatrix;
CombinedTransformationMatrix = transformationMatrix*matWorld;

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2009-4-2 13:29:00 | 显示全部楼层

Re:蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

顶点权重

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-4-2 21:59:00 | 显示全部楼层

Re:蒙皮动画中骨骼(骨头)和顶点的关系以及联系?

X格式确实有点害人匪浅,我见过有人用opengl写过一个骨骼原理的例子,也就400行左右的代码,那个写的才真把其原理剖析的清清楚楚,楼主去网上找找吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 07:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表