分享
 
 
 

DirectX里的SkinMesh角色动画(三)

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

X文件里的动画不是skin mesh仅有的;它们对X文件里的任何的帧都是适用的.X文件存储了关键帧而程序则应用线性插值的方法产生中间帧.有4种动画关键帧:转动,缩放,位置,矩阵.转动帧被作为一个四元组存储,使用spherical linear interpolation(这应该怎么译?译者也不清楚).函数D3DXQuaternionSlerp可以实现这种插值.下面的X文件模板被用于存储动画.

AnimationKey

这个模板用于存储动画关键帧码.这个模板的每一个实例都包含帧码的类型(位置,缩放,转动,矩阵)和帧码数组.数组中的每一个元素包含帧码的值和一个DWORD型的值指出帧的持续时间.

Animation

这个模板存储特定的动画帧码,它应该至少包含一个AnimationKey模板,也应该有一个指向目标帧的指针.

AnimationSet

用于作为Animation模板的一个容器.在这个集合里面的Animation模板有同样的持续时间值.

实现动画

为了实现skin mesh,我们将需要增加一个新的类.我们把这个类命名为CAnimationNode.这个类拥有帧码和指向目标帧的指针.这个类也同样包含一个SetTime函数.这个函数会用从AnimationKey得到的的新的时间值更新目标帧的变换矩阵.CAnimationNode的每 一个实例将拥有Animation模板的一个实例.下面这个图显示出代码的新的设计:

CSkinMesh::Create()

Begin

Initialize X file API

Register D3DRM templates

Open the X file

For every top level template in the X file

Begin

Retrieve the X file data object

Pass the data object to RootFrame.Load

End

Link the bones to the skin mesh(es)

Link the bones to the animations

End

CFrameNode::Load()

Begin

Check the type of the data object

If the type is Mesh

Begin

Create new CMeshNode object

Attach the new object to the frame

Pass the data object to CMeshNode::Create of the new mesh

End

Else if type is FrameTransformationMatrix

Load the transformation matrix

Else if type is Frame

Else if type is Animation

Instruct CSkinMesh to load the new animation

Begin

Create new CFrameNode object

Attach the new object to this frame

Set the name of the child frame to the name of the template

For every child template of the current

Begin

Retrieve the X file data object

Pass it to newframe.Load

End

End

End

CSkinMesh::LoadAnimation()

Begin

Create new CAnimationNode object

Attach the new object to the link list

For every child template

Call CAnimationNode::Load for the new animation object

End

CAnimationNode::Load()

Begin

Check the type of the data object

If the type is a reference

Begin

Get the referenced template, which is a frame template

Get the name of it

Store the name

End

Else if type is data

Begin

Check the type of the animation key

Load the key accordingly

End

End

这个SetTime函数就是展现动画能力地方. CSkinMesh::SetTime 简单地调用动画对象的SetTime函数.

CAnimationNode::SetTime()

Begin

If a matrix key is available

Begin

Get the nearest matrix to the given time

Set it to the target frame

End

Else

Begin

Prepare an identity matrix called TransMat

If a scale key is available

Begin

Calculate the accurate scale value

Prepare a scale matrix for this scale value

Append the matrix to TransMat

End

If a rotation key is available

Begin

Calculate the accurate rotation quaternion

Prepare a rotation matrix from this value

Append the matrix to TransMat

End

If a position key is available

Begin

Calculate the accurate position value

Prepare a matrix for it

Append the matrix to TransMat

End

Set TransMat to the target frame

End

End

现在你已经了解了所有与skin mesh相关的东西了.是时候去下载代码并自己分析它的了. 注意,源码为清晰起见,已经被简单化了,省去了许多错误检测代码.代码假定你的电脑上有3D加速卡,以及你的系统支持blending weights.对于一个更为复杂的示例,你应该参考DX8 SDK.SDK上面有很多indexed和non-indexed的顶点混合的检测和实现.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有