骨骼动画及示例Skinned

合集下载

spine骨骼动画组件使用详解

spine骨骼动画组件使用详解

spine⾻骼动画组件使⽤详解1. spine⾻骼动画⼯具⾻骼动画: 把动画打散, 通过⼯具,调⾻骼的运动等来形成动画spine是⼀个⾮常流⾏的2D⾻骼动画制作⼯具spine 动画美术⼈员导出3个⽂件:(1) .png⽂件:动画的”⾻骼”的图⽚集;(2).atlas⽂件: 每个⾻骼在图⽚集⾥⾯位置,⼤⼩;(3).json⽂件: ⾻骼动画的anim控制⽂件,以及⾻骼位置等信息;⾻骼动画导⼊: 直接把三个⽂件拷贝到项⽬的资源⽬录下即可;使⽤⾻骼动画 2种⽅式:(1) 直接拖动到场景;(2) 创建⼀个节点来添加sp.Skeleton组件;2. sp.Skeletonsp.Skeleton: 控制⾯板属性:Skeleton Data: ⾻骼的控制⽂件.json⽂件;Default Skin: 默认⽪肤;Animation: 正在播放的动画;Loop: 是否循环播放;Premuliplied Alpha 是否使⽤贴图预乘;TimeScale: 播放动画的时间⽐例系数;Debug Slots: 是否显⽰ Slots的调试信息;Debug Bone: 是否显⽰Bone的调试信息;sp.Skeleton重要的⽅法: Skeleton是以管道的模式来播放动画,管道⽤整数编号,管道可以独⽴播放动画,Track;(1)clearTrack(trackIndex): 清理对应Track的动画(2)clearTracks(); 清楚所有Track动画(3)setAnimation(trackIndex, “anim_name”, is_loop)清楚管道所有动画后,再从新播放(4)addAnimation(trackIndex, “anim_name”, is_loop);往管道⾥⾯添加⼀个动画;3. 动画事件监听setStartListener: 设置动画开始播放的事件;setEndListener : 设置动画播放完成后的事件;setCompleteListener: 设置动画⼀次播放完成后的事件;代码⽰例: game_scene.js// Learn cc.Class:// - [Chinese] https:///creator/manual/zh/scripting/class.html// - [English] /creator/manual/en/scripting/class.html// Learn Attribute:// - [Chinese] https:///creator/manual/zh/scripting/reference/attributes.html// - [English] /creator/manual/en/scripting/reference/attributes.html// Learn life-cycle callbacks:// - [Chinese] https:///creator/manual/zh/scripting/life-cycle-callbacks.html// - [English] https:///docs/creator/manual/en/scripting/life-cycle-callbacks.htmlcc.Class({extends: ponent,properties: {// foo: {// // ATTRIBUTES:// default: null, // The default value will be used only when the component attaching// // to a node for the first time// type: cc.SpriteFrame, // optional, default is typeof default// serializable: true, // optional, default is true// },// bar: {// get () {// return this._bar;// },// set (value) {// this._bar = value;// }// },//编辑器绑定ske_anim: {type: sp.Skeleton,default: null,},},// LIFE-CYCLE CALLBACKS:onLoad () {//代码获取var spine = this.node.getChildByName("spine");this.ske_comp = spine.getComponent(sp.Skeleton);//事件this.ske_comp.setStartListener(function() {console.log("play start ");});this.ske_comp.setCompleteListener(function() {console.log("play once ");});},enter_click() {//清理动画播放管道// this.ske_comp.clearTracks();this.ske_comp.clearTracks(0);//指定管道的索引//end//step1 播放⼊场动画this.ske_comp.setAnimation(0, "in", false); //将管道清空,再加⼊this.ske_comp.addAnimation(0, "idle_1", true); //直接加⼊管道队列//end//step 播放我们的idle},start () {},// update (dt) {},});---------------------。

动态效果 Blender中的精灵图和骨骼动画组合运用技巧

动态效果 Blender中的精灵图和骨骼动画组合运用技巧

动态效果:Blender中的精灵图和骨骼动画组合运用技巧Blender是一款功能强大的三维计算机图形软件,它不仅可以制作静态模型,还可以通过精灵图和骨骼动画的组合运用实现动态效果。

在本文中,我们将分享一些关于如何在Blender中使用精灵图和骨骼动画的技巧。

首先,我们需要准备一些精灵图。

精灵图是由多个帧组成的,每个帧代表一个动画状态。

在Blender中,我们可以将精灵图导入到一个带有骨骼的模型中,并通过骨骼来控制不同帧之间的切换,从而实现动画效果。

要创建一个带有骨骼的模型,我们可以使用Blender的骨骼工具。

在3D视图中选择模型,然后进入编辑模式。

选择一个适合的位置,点击骨骼菜单中的“添加骨骼”选项,会在该位置生成一个骨骼。

接下来,我们需要将精灵图导入到我们的模型中。

首先,选择一个带有骨骼的模型,并将其设置为活动对象。

然后,在属性面板中的“动画”选项卡下,选择“精灵图动画”。

点击“添加精灵图动画”按钮,会出现一个对话框,然后选择我们准备好的精灵图文件。

在对话框中,我们可以设置精灵图的帧数、帧速率等参数。

完成设置后,点击“确认”按钮。

现在,我们需要将精灵图的帧与骨骼关联起来。

在3D视图中,选择模型,并进入动作编辑器。

在动作编辑器窗口的顶部菜单中,点击“动画”选项,然后选择“骨骼动画”。

点击“添加动画”按钮,会出现一个对话框。

在对话框中,选择我们之前导入的精灵图动画,并将其关联到之前创建的骨骼上。

然后,我们可以通过在时间轴上设置关键帧来控制骨骼的动画效果。

在动作编辑器中,我们可以通过选择不同的帧来预览精灵图动画的效果。

如果需要调整帧数或帧速率,可以在属性面板中的“动画”选项卡下进行相应设置。

除了精灵图,我们还可以使用其他动画效果来增强模型的表现力。

例如,通过使用形状关键帧或运动路径来控制模型的形状变化或运动轨迹。

最后,我们需要在渲染设置中选择适当的渲染引擎,并设置渲染参数。

在渲染设置中,我们可以选择渲染的帧数、分辨率、输出格式等。

让模型动起来 Blender骨骼动画基础教程

让模型动起来 Blender骨骼动画基础教程

让模型动起来:Blender骨骼动画基础教程骨骼动画是Blender软件中一项重要的功能,可以为模型添加生动的动作效果。

通过在模型上创建骨骼系统,并将骨骼与模型关联起来,我们可以实现各种各样的动画效果。

本文将介绍Blender软件中骨骼动画的基础知识和使用技巧。

首先,打开Blender软件并导入你的模型。

在选择模式下,选择骨骼模式,创建一个新的骨骼系统。

你可以使用Shift + A组合键或点击菜单中的“添加”按钮来添加骨骼。

在编辑模式下,你可以对骨骼进行调整和修改。

接下来,将骨骼与模型关联起来。

在选择模式下,选择你的模型并按住Shift键选择骨骼。

然后点击菜单中的“关联”按钮或使用Ctrl + P组合键来关联骨骼和模型。

你可以选择不同的关联方式,例如空间或权重等。

现在,你可以开始创建动画了。

切换至动画模式,选择你需要调整的关节,例如腿或手臂。

通过选择关节,你可以对其进行旋转、平移或缩放等操作。

使用关键帧来记录关节的不同状态。

在时间轴上选择一个关键帧,然后对关节进行调整,再次点击“关键帧”按钮或使用I键来生成新的关键帧。

你可以使用时间轴和关键帧来控制动画的时间和播放速度。

在时间轴上选择关键帧并拖动它,可以调整动画中关键帧的位置和时间。

通过增加和删除关键帧,你可以调整动画的长度和细节。

除了基本的关节运动,你还可以为骨骼添加其他的效果和约束。

例如,你可以添加IK约束来实现更自然的运动,或者使用形变器来调整模型的外观。

在调整动画时,你可以使用Blender软件提供的各种工具和选项。

例如,你可以使用Graph Editor来调整关键帧之间的过渡效果,使用Dope Sheet来管理和编辑关键帧,使用Pose Library来保存和应用不同的关节姿势等。

当你完成了动画的创建和调整后,你可以导出它以便在其他项目或软件中使用。

Blender软件支持多种导出格式,例如FBX、OBJ和Collada等。

选择适合你需求的格式并导出动画,并确保选择正确的导出选项。

人体动态解剖 美术 漫画 3D 素描必学PPT课件

人体动态解剖 美术 漫画 3D 素描必学PPT课件

9
躯干肌肉
斜方肌 肩胛肌 三角肌 冈下肌 小圆肌
胸锁乳突 肌 三角肌 胸大肌
大圆肌
前锯肌
菱形肌
外斜肌
背阔肌 臀中肌
腹直肌
臀大肌
缝匠肌
大转子
ppt精选版阔筋膜肌
10

腹直肌:从合生耻骨到肋骨软骨,即从第五块肋软骨到第七块
肋软骨。作用:拉伸骨盆。使骨盆和躯干拉成直角。
ppt精选版
11
• 前锯肌:从上肋骨第二到第九共八块条状肌肉向后上方走到肩胛 骨——脊柱的边缘,浅表型。作用:将肩胛骨向前方拉,提升肋骨。
绞关节,其内部和外部有两块隆突骨节。

两个骨节都突出在表面。内骨节作为测量点,它比外骨节更突
出。

前臂有两块骨,一块叫尺骨,尺骨的凹口刚好包裹住胳臂和肘
部两个关节之间的圆形表面。在这根骨头的下部末端有一个球形关
节,在小手指一侧的腕关节相连。它是宽的,向上呈曲线到它的顶
端。桡骨的顶端小,呈杯状,在肱骨的外骨节处一个系带环将其固

皮肤垫的长度差不多,但指节的长度不一样,所以褶皱
不正对指关节。
ppt精选版
28
指骨
掌骨
腕骨
ppt精选版
29
• 梯状形体

手指的关节长得像浅鞍状,也
就是说,一个向上达到了侧面,另
一个向下达到了前面和后面。
• 正对三块指骨的是四块皮肤垫, 从指骨的背面测量,第一指节和后 面两个指节差不多相等(尽管骨头 本身短一些)。当三个指节弯成一 个正方形的三条边时,四块垫处于 这个正方形的内部。

我们的四个手指,每一个都有三块骨头(指骨、吊骨)。
每节指骨在其上一节的基础上活动,并使得上一节指骨的末端

骨骼蒙皮动画(Skinned Mesh)的原理解析(一)

骨骼蒙皮动画(Skinned Mesh)的原理解析(一)

骨骼蒙皮动画(Skinned Mesh)的原理解析(一)一)3D模型动画基本原理和分类3D模型动画的基本原理是让模型中各顶点的位置随时间变化。

主要种类有Morph动画,关节动画和骨骼蒙皮动画(Skinned Mesh)。

从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。

但由于这三种技术的不同,关键帧的数据是不一样的。

Morph(渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh 所有顶点在关键帧对应时刻的位置。

关节动画的模型不是一个整体的Mesh,而是分成很多部分(Mesh),通过一个父子层次结构将这些分散的Mesh组织在一起,父Mesh带动其下子Mesh的运动,各Mesh中的顶点坐标定义在自己的坐标系中,这样各个Mesh是作为一个整体参与运动的。

动画帧中设置各子Mesh相对于其父Mesh的变换(主要是旋转,当然也可包括移动和缩放),通过子到父,一级级的变换累加(当然从技术上,如果是矩阵操作是累乘)得到该Mesh在整个动画模型所在的坐标空间中的变换(从本文的视角来说就是世界坐标系了,下同),从而确定每个Mesh在世界坐标系中的位置和方向,然后以Mesh为单位渲染即可。

关节动画的问题是,各部分Mesh中的顶点是固定在其Mesh坐标系中的,这样在两个Mesh结合处就可能产生裂缝。

第三类就是骨骼蒙皮动画即Skinned Mesh了,骨骼蒙皮动画的出现解决了关节动画的裂缝问题,而且效果非常酷,发明这个算法的人一定是个天才,因为Skinned Mesh的原理简单的难以置信,而效果却那么好。

骨骼动画的基本原理可概括为:在骨骼控制下,通过顶点混合动态计算蒙皮网格的顶点,而骨骼的运动相对于其父骨骼,并由动画关键帧数据驱动。

一个骨骼动画通常包括骨骼层次结构数据,网格(Mesh)数据,网格蒙皮数据(skin info)和骨骼的动画(关键帧)数据。

AE骨骼动画教程 制作骨骼和角色动画

AE骨骼动画教程 制作骨骼和角色动画

AE骨骼动画教程:制作骨骼和角色动画Adobe After Effects(简称AE)是一款强大的视频编辑和特效制作软件。

在AE中,我们可以使用骨骼动画技术来制作真实而流畅的角色动画效果。

本篇教程将为大家介绍如何在AE中制作骨骼和角色动画。

1. 导入角色素材首先,我们需要导入角色素材。

可以在互联网上寻找合适的角色图片或视频,然后将其导入到AE中。

点击“文件”菜单,选择“导入”和“文件”,然后选择你的角色素材并导入。

2. 创建角色骨架在AE的“项目”面板中,选中导入的角色素材,然后右击并选择“新建”和“合成”。

这将创建一个新的合成,用于制作角色的骨架。

3. 添加骨骼层在新建的合成中,点击“图层”菜单,选择“新建”和“null对象”。

这个null对象将作为我们的骨骼层,用于连接角色各个部分。

4. 组织角色层级将角色的各个部分(头、身体、四肢等)分别导入到AE的“项目”面板中,然后将其拖放到骨骼层(null对象)下方,形成一个层级结构。

确保每个角色部分都位于骨骼层的下级。

5. 设置锚点和位置选中每个角色部分的图层,在“图层”面板中找到“锚点”属性。

点击“锚点”图标,然后将锚点位置放置在角色部分的关节处。

接下来,设置每个角色部分的初始位置。

6. 连接角色部分选中骨骼层(null对象),在“图层”面板中找到“父子链接”属性。

分别将头部、身体、四肢等角色部分的图层拖放到父子链接属性的空白处。

这将形成角色部分的骨骼连接,使其随着骨骼层的移动而移动。

7. 创建关键帧在AE的时间轴中,将播放头移动到你想要制作关键帧的位置。

选中骨骼层,然后点击“平移”、“旋转”、“缩放”等属性的小钟表图标,以创建关键帧。

重复这个过程,为角色的每个动作位置都创建关键帧。

8. 完善动画过程在时间轴中调整关键帧的位置和属性,以确保角色动画的流畅和自然。

你可以使用AE的缓动函数来控制角色运动的速度和加速度。

9. 添加动画效果在AE中,你可以为角色动画添加各种特效和过渡效果,以增强动画的视觉效果。

AE中的角色骨骼动画教程

AE中的角色骨骼动画教程

AE中的角色骨骼动画教程在AE(After Effects)中,我们可以使用角色骨骼动画来创建生动的角色动画。

通过使用AE内置的工具和插件,我们可以轻松地给角色添加骨骼,并实现复杂的动作效果。

下面将为大家介绍一些AE中角色骨骼动画的基本教程和使用技巧。

第一步是导入你的角色素材。

可以将角色的各个部分分开导入,例如头部、身体、四肢等,或者你也可以导入一个完整的角色合成。

确保素材的分辨率和帧速率与你的项目设置相匹配。

接下来,选择一个部位来添加骨骼。

点击“工作区”窗口中的“层”按钮,在你要添加骨骼的图层上右键单击,选择“创建”>“形状图层”。

在弹出的对话框中,选择“自由变形”工具。

这将使你能够创建和控制骨骼。

现在,将“自由变形”工具应用到你的图层上。

点击你要添加骨骼的位置,并拖动鼠标来添加骨骼的控制点。

你可以根据需要添加多个骨骼来确保你能够自由控制角色的部位。

一旦你添加了骨骼,你可以使用“选择”工具来调整和移动骨骼的位置。

选择骨骼并拖动它们,调整它们的位置和角度。

你还可以通过点击骨骼上的控制点来旋转和缩放它们。

当你完成了骨骼的设置后,你可以进入关键帧动画模式。

你可以选择一个骨骼,并在时间轴上设置关键帧来创建动画效果。

例如,你可以选择角色的腿,然后在时间轴上的不同帧上设置不同的腿部位置,以实现角色的行走动作。

通过在时间轴上设置多个关键帧,你可以创建出更为复杂的动作。

在动画模式下,你还可以使用AE的其他特效和过渡效果来增强你的动画。

选择你要使用特效的图层,然后在“效果与预设”窗口中选择适当的特效。

例如,你可以应用“色彩关键”效果来改变角色的颜色,或者应用“变换”效果来实现角色的形态变化。

除了AE内置的工具和特效,你还可以使用各种第三方插件来扩展AE的功能。

例如,你可以使用Joysticks 'n Sliders插件来添加更流畅的控制器,或者使用Duik Bassel插件来创建更复杂的骨骼动画。

使用Flash骨骼工具制作角色动画 ppt课件

使用Flash骨骼工具制作角色动画 ppt课件
ppt课件 10
骨骼工具基础
3.使用选取工具(V),拖动位于链条顶端的最后一根 骨骼(在尾部的最根部)。因为非常直的尾巴看起来并 不自然,因此我们把骨架放置成了类似S形,
ppt课件 11
骨骼工具基础
4.在IK跨度中添加新的帧,在时间线(Timeline)中点 击后面的帧数并按F5,或者将IK跨度的边缘拖到右边。 你想要创建一个无缝动画的话,就需要让第一帧和最后 一帧相同才行。
ppt课件 1
骨骼工具基础
你可以使用骨骼工具来创建影片剪辑的骨架或者是向量 形状的骨架。让我们开始构建一个元件的基本骨架吧: 1.创建一个新的Flash文档,并选择ActionScript 3.0。 骨骼工具只和AS 3.0文档配合使用。
ppt课件 2
骨骼工具基础
在舞台(Stage)上画一个对象。在范例中,为了让其简 单,我使用矩形工具创建了一个基本的形状。
确定骨架中的父/根元件实例。这个实例将会是骨骼的第 一段。拖向下一个符号实例来把它们连接起来。当你松 开鼠标的时候,在两个符号实例中间将会出现一条实线 来表示骨骼段。
ppt课件 4
骨骼工具基础
重复这个过程把第二个符号实例和第三个实例连接起来。 通过不断从一个元件拖向另一个来连接它们,直到所有的 元件实例都用骨骼连接起来了。
ppt课件 18
腿部动画
腿部是由3个单独元件组成
ppt课件 19
腿部动画
将所有的腿部符号放到一个图形元件中: 1.选中这3个符号,然后按F8(转换为元件),并为它
重命名。双击这个元件进入编辑状态。 2.选中骨骼工具(X)并连接这3个腿部对象,以上部的
腿作为这个骨架中的根骨骼。完成后的骨架应该是只包 括两块骨骼。
ppt课件 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

骨骼动画及示例Skinned Mesh的解析来源:ChinaItLab作者:佚名时间:2007-7-12这是我自个写的,第一次发。

没想到这个贴子编辑器极差。

原文是有字体字色的。

现在只能清一色了。

版主,发贴的编辑器太难用!你有必要向上反映一下。

下面的字体是我敲html标记加上的,大家凑和看。

关于骨骼动画及微软示例Skinned Mesh的解析骨骼动画是D3D的一个重要应用。

尽管微软DXSDK提供了示例Skinned Mesh,但由于涉及众多概念和技术细节,示例相对于初学者非常复杂,难以看懂。

在此,提供一些重要问题评论,以使初学者走出迷局,顺利上手。

文中所述都是参照各种资料加上自己的理解,也有可能出些偏差,有则回贴拍砖,无则权当一笑。

一骨骼动画原理原理方面在网上资料比较多,大家都基本明白。

在此说一下重点:总体上,绝大部分动画实现原理一致,就是“提供一种机制,描述各顶点位置随时间的变化”。

有三种方法:1.1 关节动画:由于大部分运动,都是皮肤随骨骼在动,皮肤相对于它的骨骼本身并没有发生运动,所以只要描述清楚骨骼的运动就行了。

用矩阵描述各个骨骼的相对于父骨骼运动。

(大多运动都是旋转型)易知,从子骨骼用矩阵乘法累积到最顶层根骨骼,就可以得到每个子骨骼相对于世界坐标系的转换矩阵。

这种动画,只须用普通Mesh保存最初始的各顶点坐标,以及一系列后续时刻所对应的各骨骼的运动矩阵。

不用保存每时刻的顶点数据,节省了大量存储空间。

而且比较灵活,可以利用关键帧插值运算,便于通过运算调节动作。

缺点是在两段骨骼交接处,容易产生裂缝,影响效果。

1.2 渐变动画:通过保存一系列时刻的顶点坐标来完成动画。

虽然比较逼真,但占用大量空间,灵活性也不高。

1.3 骨骼蒙皮动画(skinned Mesh)相当于上面两方法的折中。

现在比较流行。

在关节动画的基础上,利用顶点混合(Vertex Blend)技术,对于关节附近的顶点,由影响这些顶点的两段(或多段)骨骼运动,分别赋以权值,共同决定顶点位置。

相当于在骨骼关节上动态蒙皮,有效解决了裂缝问题。

这里,引入一个D3D技术概念:“Vertex Blending”——顶点混合技术。

比如说,你肯定用过SetTransform(D3DTS_WORLD,……),但SetTransform(D3DTS_WORLDMATRIX(i),……)是不是很奇怪?这个问题后文会讲到。

你也可以在微软的DXSDK的帮助文件中搜索“Geometry Blending”主题,有裂缝及其解决办法图示。

二X文件如何保存骨骼动画理解X文件格式,对用好相关的DX函数是非常重要的。

不含动画的普通X文件,有一个Mesh单元,保存了各顶点信息、各三角面的索引信息、材质种类及定义等。

动画X文件,则在这个单元中增加了“各骨骼蒙皮信息”、“骨骼层次及结构信息”、“各时刻骨骼矩阵信息”等。

2.1 网格蒙皮信息:首先,在Mesh{}单元中,在原有的普通网格顶点数据基础上,新增了XSkinMeshHeader{}结构,以及多个SkinWeights{}结构。

用以描述各个骨骼的蒙皮信息。

其中,XSkinMeshHeader是总括,举一实例,如下:XSkinMeshHeader { 2,//一个顶点可以受到骨骼影响的最大骨骼数,可用于计算共同作用时减少遍历次数4,//一个三角面可以受到骨骼影响的最大骨骼数。

这个数字对硬件顶点混合计算提出了基本要求。

35 //当前Mesh的骨骼总数。

}由于每个骨骼的蒙皮信息都需要用SkinWeights结构去描述,所以有多少块骨骼,在Mesh中就有多少个SkinWeights对象。

注意,一般把SkinWeights视作Mesh的一部分。

这种Mesh又称Skinned Mesh (蒙皮网格)SkinWeights 结构如下:{ STRING transformNodeName;//骨骼名DWORD nWeights;//权重数组的元素个数,即该骨骼相关的顶点个数array DWORD vertexIndices[nWeights];//受该骨骼控制的顶点索引,实际上定义了该骨骼的蒙皮array float weights[nWeights];//蒙皮各顶点的受本骨骼影响的权值Matrix4x4 matrixOffset;//骨骼偏移矩阵,用来从初始Mesh坐标,反向计算顶点在子骨骼坐标系中的初始坐标。

}在有的书中,把上面的matrixOffset叫骨骼权重矩阵,是不恰当的。

应该称为骨骼偏移矩阵比较合适。

[问题] 在整个动画过程中,子骨骼运动矩阵的数值是不断变化的。

上面的骨骼偏移矩阵变化吗?有没有必要重新计算?它在什么时候使用?答:各骨骼的偏移矩阵matrixOffset专门用来从原始Mesh数据计算出各顶点相对于骨骼坐标系的原始坐标。

在绘制前,把它与当前变换矩阵相乘,就可以得到该骨骼的当前的最终变换矩阵。

总之,骨骼偏移矩阵是与原始Mesh顶点数值相关联的,在整个动画过程中是不变的,也不应该变。

在动画过程中变化是当前骨骼变换矩阵,可由。

X中的AnimatonKey中的各时刻矩阵得到。

这个矩阵乘法在示例中的对应代码如下:D3DXMatrixMultiply(&matTemp,&pMeshContainer->pBoneOffsetMatrices[iMatrixIndex],pMeshContainer->ppBoneMatrixPtrs[iMatrixIndex] );即,D3DXMatrixMultiply(输出最终世界矩阵,该骨骼的偏移矩阵,该骨骼的变换矩阵)2.2 骨骼层次信息在X文件中,Frame是基本的组成单元。

又称框架Frame. 一个。

x 可以有多个Frame.(注意此处的Frame不是帧,与帧没什么关系)框架Frame允许嵌套,这样就存在父子框架了。

而并列的框架,称为兄弟框架。

这两种关系组合在一起,即可以纵深,又可以并列,形成一种层次结构。

这种结构,可用二叉树描述。

每个框架结构的最前面,有一个FrameTransformMatrix矩阵数据,描述了该框架相对于父框架的变换矩阵。

也就是说,该框架中的坐标,与该矩阵相乘,可转换为父框架坐标系的坐标。

这种层次结构,使得X文件能描述许多复杂的物体。

如地形场景。

在骨骼动画文件中,框架结构可直接拿来描述人物骨骼的层次结构。

框架的名字通常为对应的骨骼名。

如“左上臂->左前臂->手掌->手指”就形成一个父子骨骼链。

而左上臂与右上臂是并行关系。

数据示例:D:\D9XSDK\Samples\Media\tiny.x Frame ……{……Frame Bip01_R_Calf { //子骨骼FrameTransformMatrix { 1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;;} Frame Bip01_R_Foot {//——孙子骨骼FrameTransformMatrix { 0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;;}……缩进} [问题]查看示例tiny.x文件,发现只有根框架下有一个Mesh,包含了所有顶点信息。

其它各个Frame都没有Mesh数据。

怎么理解?答:一般来说,每个动画文件只有一个Mesh网格,包含物体所有顶点信息。

其它Frame,只是借用来描述各骨骼的层次信息,没必要再定义骨骼网格。

每块骨骼对应的蒙皮顶点信息,由根Mesh中的相应骨骼的SkinWeights中蒙皮顶点索引描述的。

在动画过程中,各个顶点的新坐标,要借助SkinWeights中的顶点索引来进行重新计算。

2.3 动画信息:由一系列AnimatonKey组成,数据示例如下:AnimationKey { 4;——动画类型4表示矩阵62;——动画帧数,即下面矩阵个数0;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;,80;16;0.992696,-0.120646,-0.000000,0.000000,0.120646,0.992696,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000002,1.000000;;,……上面红数字表示时刻tick,兰数字表示数值的个数。

……其它各时刻矩阵……{ Bip01_R_Calf }——对应的骨骼对象引用}注意:(1)每块骨骼都有一个AnimationKey{}.(2)在上面数据结构中,主要保存了各典型时刻的该骨骼相对于父的变换矩阵。

(3)在0时刻的矩阵,与该骨骼对应的前面的Frame所对应的矩阵是相同的。

如Frame Bip01_R_Calf{}中的变换矩阵,与Bip01_R_Calf所对应的AnimationKey 的第0时刻矩阵是一样的。

这说明,在以后动画运行时,DX会提供一种功能,用AnimatonKey中的对应数据刷新初始的变换矩阵(也可能启用关键帧插值算法)。

这个功能对应于示例中的m_pAnimController->SetTime(……)语句。

三怎样从X文件加载骨骼动画信息?3.1 负责加载的函数:可能有多种加载方式,在此以SDK中的示例为准,叙述一种标准加载方式,需要用到DX函数D3DXLoadMeshHierarchyFromX(),函数字面意思是读取Mesh层次信息。

HRESULT WINAPI D3DXLoadMeshHierarchyFromX(LPCSTRFilename,//.x文件名DWORD MeshOptions,//Mesh选项,一般选D3DXMESH_MANAGED LPDIRECT3DDEVICE9 pD3DDevice,//指向D3D设备Device LPD3DXALLOCATEHIERARCHY pAlloc,//自定义数据容器LPD3DXLOADUSERDATA pUserDataLoader,//一般选NULL LPD3DXFRAME*ppFrameHierarchy,//返回根Frame指针,指向代表整个骨架的Frame层次结构LPD3DXANIMATIONCONTROLLER *ppAnimController //返回相应的动画控制器);这个函数后面的两个输出参数很重要,也很好理解,但输入参数中的自定义数据容器是怎么回事呢?原来,鉴于动画数据的复杂性,需要你配合完成加载过程。

相关文档
最新文档