骨骼动画及微软示例:Skinned Mesh的解析

合集下载

游戏开发进阶Unity网格(Mesh动态合批骨骼动画蒙皮)

游戏开发进阶Unity网格(Mesh动态合批骨骼动画蒙皮)
[RequiredByNativeCode] // MeshFilter is used in the VR Splash screen. private void DontStripMeshFilter() {} extern public Mesh sharedMesh { get; set; } extern public Mesh mesh {[NativeName("GetInstantiatedMeshFromScript")] get; [NativeName("SetInstantiatedMesh")] set; } }
一、前言 二、Hello Mesh 三、萌新初识Mesh
1、引擎内置的Mesh 2、Mesh是什么 三、Mesh的创建方式 1、第三方建模软件 2、Unity建模插件:ProBuilder 3、程序动态生成网格 四、Unity中如何显示网格 1、MeshFilter:网格过滤器 2、MeshRenderer:网格渲染器 3、SkinnedMeshRenderer:蒙皮网格渲染器
MeshRenderer,顾名思义,网格渲染器。我们依旧先来看看官方手册的介绍:
翻译过来就是MeshRenderer会从MeshFilter那里拿到网格数据并在所在物体的位置处将其渲染出来。 如果没有MeshRenderer,我们就看不见网格了,如下
另外,我们还需要在MeshRenderer的Materials中指定一个材质球,这样才能正常显示,否则模型表面就是紫色的。
public class MeshFilter ... { ... private Mesh _mesh; public Mesh mesh {
get { if (_mesh == null) {

动态效果 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等。

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

骨骼蒙皮动画(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)和骨骼的动画(关键帧)数据。

龙教版信息技术五年级上册第11课《骨骼动画(一)》教案

龙教版信息技术五年级上册第11课《骨骼动画(一)》教案

龙教版信息技术五年级上册第11课《骨骼动画(一)》教案一. 教材分析《骨骼动画(一)》是龙教版信息技术五年级上册第11课的内容。

本节课主要让学生了解骨骼动画的基本概念,掌握骨骼动画的制作方法和技巧。

通过学习,学生能够运用骨骼动画技术,为二维角色添加动态效果,提高作品的趣味性和生动性。

二. 学情分析五年级的学生已经掌握了 Flash 动画的基本制作方法,对动画制作有一定的了解。

但在骨骼动画方面,学生可能初次接触,需要教师引导学生逐步掌握。

此外,学生对新鲜事物充满好奇,乐于尝试新技能,但部分学生可能对复杂的制作过程感到困惑,需要教师给予耐心指导和鼓励。

三. 教学目标1.知识与技能:了解骨骼动画的基本概念,掌握骨骼动画的制作方法和技巧。

2.过程与方法:通过实践操作,学会为二维角色添加骨骼动画,提高作品的趣味性和生动性。

3.情感、态度与价值观:培养学生对动画制作的兴趣,激发创新精神,培养团队协作能力。

四. 教学重难点1.重点:骨骼动画的基本概念,骨骼动画的制作方法和技巧。

2.难点:如何为二维角色添加骨骼动画,调整骨骼和关节的运动。

五. 教学方法1.任务驱动法:教师提出任务,引导学生动手实践,巩固所学知识。

2.示范教学法:教师演示制作过程,学生跟随操作,体会制作方法。

3.合作学习法:学生分组合作,共同完成任务,培养团队协作能力。

六. 教学准备1.教师准备: Flash 动画制作软件,骨骼动画素材,教学PPT。

2.学生准备: Flash 动画制作软件,笔记本电脑。

七. 教学过程1. 导入(5分钟)教师通过展示一部有趣的骨骼动画作品,引发学生的好奇心,激发学习兴趣。

提问:“你们知道这是怎么制作的吗?”引导学生思考和讨论。

2. 呈现(10分钟)教师简要介绍骨骼动画的基本概念,展示骨骼动画的制作过程。

通过PPT演示,让学生了解骨骼动画的关键步骤,如创建骨骼、绑定关节、调整运动等。

3. 操练(10分钟)学生分组合作,根据教师提供的骨骼动画素材,尝试为二维角色添加骨骼动画。

深入理解Blender的骨骼和动画系统

深入理解Blender的骨骼和动画系统

深入理解Blender的骨骼和动画系统Blender是一款功能强大的开源3D建模和动画软件,其骨骼和动画系统是其最重要的特点之一。

在本篇文章中,我们将深入理解Blender的骨骼和动画系统,并探讨一些实用的使用技巧。

骨骼系统是Blender中创建和控制角色动画的核心部分。

在Blender 中,骨骼由一系列骨头(bones)组成,可以创建人物的骨架并对其进行动画编辑。

要使用骨骼系统,首先需要创建一个骨骼对象。

在3D视图中,按Shift + A选择添加➞骨骼,即可添加一个新的骨骼。

通过选中骨骼对象并按Tab键,可以进入编辑模式,并对骨骼进行编辑。

在编辑模式下,可以对骨骼进行各种操作,如平移、旋转、缩放等。

通过按G键进行平移,R键进行旋转,S键进行缩放,可以分别对骨骼进行对应的操作。

此外,还可以通过按E键来添加更多的骨骼。

编辑模式下的骨骼操作非常灵活,可以根据角色的需要进行任意调整。

完成骨骼的创建和编辑后,就可以进行动画的制作了。

在动画制作中,可以使用关键帧(keyframes)来控制角色的运动和姿态。

关键帧表示动画中的重要时刻,可以将角色的骨骼状态保存为关键帧,并在时间轴上进行调整。

通过在时间轴上选择不同的关键帧,可以快速切换角色的不同动作。

要将骨骼对象添加到动画中,需要切换到动作编辑器(Action Editor)模式。

在动作编辑器模式下,可以创建和编辑动作,并将其关联到骨骼对象上。

在时间轴上选择一个关键帧,按I键可以将当前骨骼状态存储为关键帧。

通过在不同的关键帧上设置不同的骨骼姿态,可以实现复杂的角色动画效果。

骨骼和动画系统在Blender中的应用非常广泛。

除了角色动画外,它还可以用于创建各种物体的动画效果,例如弹簧、车辆、机器人等。

通过对骨骼和关键帧的灵活运用,可以创造出精彩纷呈的动画作品。

在Blender中,还有一些高级的骨骼和动画技巧可以提升效果。

例如,可以通过使用约束(constraints)来对骨骼进行控制。

3D游戏角色动画

3D游戏角色动画

3D游戏角色动画摘要:本文主要描述了3D游戏角色动画的原理及应用,从介绍微软的X文件到最为广泛应用的骨骼蒙皮动画,另外简要的介绍了下渐变动画的原理。

关键词:Role Animation Skeletal Animation Morphing Animation Skinned MeshAbstract:Introduce 3D Game Role Animation, for example Skeletal Animation and Skinned Mesh etc.目录:一概述3D角色动画的应用二3D游戏动画基础------基于时间的运动三3D游戏角色动画1 介绍微软的X文件2 骨骼蒙皮动画的原理与实现3 增加场景数据4 简介渐变动画四结束语正文:一概述3D角色动画的应用3D角色动画是计算机动画技术的一个重要组成部分,也是计算机图形学的一个分支。

无论是在离线渲染环境下,还是在实时渲染环境下,3D角色动画都得到了广泛的应用。

在离线渲染环境下,主要应用于动画电影制作和各类广告制作。

动画电影制作中所使用的3D 角色动画技术的一个重要特点是动画数据量大,渲染需要耗费大量时间,因此动画作品必须预先制作,渲染,然后转化成视频文件播放。

在实时渲染环境下,主要应用于虚拟现实,视频游戏,甚至是建模软件,动画制作软件。

现在,随着计算机硬件技术的发展,特别是带有硬件加速功能的显卡性能的提高,很多曾经只能在离线环境下应用的技术,都转移到实时渲染环境中来。

其中,实时渲染的角色动画技术得到了发展且被广泛的应用。

目前,实时角色动画技术大体可分为三种类型。

第一类是关节动画(Skeletal Animation)。

关节动画中的角色由若干独立的部分组成。

每一个部分对应着一个独立的网格模型,不同的部分按照角色的特点组织成一个层次结构。

比如说,一个人体模型可以由头,上身,左上臂,左前臂,左手,右上臂,右前臂,右手,左大腿,左小腿,左脚,右大腿,右小腿,右脚等各部分组成。

骨骼动画的原理与实现

骨骼动画的原理与实现

1)首先确定该时刻之前和之后的两个关键帧,然后按照该时刻与前后两个关键帧时刻的时间值插值计算出该时刻该骨骼相对于父骨骼的新变换矩阵,这个变换矩阵往往代表旋转变换,放缩变换也能接受,如果是平移变换矩阵,很容易将Mesh四分五裂。

2)对于皮肤网格中的每一个顶点,计算它在世界坐标中新的位置和朝向。

首先找到影响该顶点的所有骨骼。

然后计算每一骨骼对该顶点的影响。

也就时说,计算在该骨骼独立作用下顶点的新位置。

计算按照如下公式:顶点的新位置= 最初状态顶点的位置* 最初状态骨骼世界变换矩阵的逆矩阵* 骨骼的新变换矩阵(I)然后将所有这些新位置按照每一骨骼的影响权重加权求和。

注意所有权重的和应该恰好为1。

在公式(I)中,最初状态顶点的位置为什么首先要与最初状态骨骼世界变矩阵的逆矩阵相乘呢?前面说过,骨骼的新变换矩阵是相对于父骨骼变换的,另一方面这个新变换矩阵是世界变换矩阵,它的任何变换是相对于世界坐标系原点的。

因此需要把最初状态顶点移动到相当于父骨骼节点是原点的位置上,再进行矩阵变换。

3)根据网格模型顶点的新位置和朝向绘制角色网格。

下面我们结合具体的图形API环境(Direct3D)来进一步介绍骨骼动画。

第一,了解骨骼结构(Skeletal Structures)和骨层级(Bone Hierarchies):骨骼结构就是连续很多的骨头(Bone)相结合,形成的骨层级。

第一个骨头叫做根骨(root bone),是形成骨骼结构的关键点。

其它所有的骨骼作为孩子骨(child bone)或者兄弟骨(sibling bone)附加在根骨之上。

所谓的“骨”用一个帧(frame)对象表示。

在Directx中,用一个D3DXFRAME结构或者X文件中的Frame template来表示帧对象。

下面看一下Frame template和D3DXFRAME结构的定义:template Frame{< 3D82AB46-62DA-11cf-AB39-0020AF71E433 >FrameTransformMatrix frameTransformMatrix; // 骨骼相对于父节点的坐标变换矩阵,就是一个matrixMesh mesh; // 骨骼的Mesh}typedef struct _D3DXFRAME{LPSTR Name; // 骨骼名称D3DXMATRIX TransformationMatrix; // 相对与父节点的坐标变换矩阵LPD3DXMESHCONTAINER pMeshContainer; // LPD3DXMESHCONTAINER对象,//用来加载MESH,还有一些附加属性,见SDKstruct _D3DXFRAME *pFrameSibling; // 兄弟节点指针,和下面的子节点指针// 一块作用构成骨骼的层次结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

尽管微软DXSDK提供了示例Skinned Mesh,但由于涉及众多概念和技术局,顺利上手。

文中所述都是参照各种资料加上自己的理解,也有可能出些偏差,有则回贴拍砖,无则权当一笑一骨骼动画原理原理方面在网上资料比较多,大家都基本明白。

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

有三种方法:1.1关节动画:由于大部分运动,都是皮肤随骨骼在动,皮肤相对于它的骨骼本身并没有发生运动,所以只要知,从子骨骼用矩阵乘法累积到最顶层根骨骼,就可以得到每个子骨骼相对于世界坐标系的转换矩阵。

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

不通过运算调节动作。

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

1.3骨骼蒙皮动画(skinned Mesh)/ A' R4 r5L; R4 C1.2渐变动画:通过保存一系列时刻的顶点坐标来完成动画。

虽然比较逼真,但占用大量空间,灵活性也不高$ T3 P# J, y4 F9 Q& r" C- R6 U相当于上面两方法的折中。

现在比较流行。

在关节动画的基础上,利用顶点混合(Vertex Blend)技术,对于关节附近的顶点,由影响这些顶点的两段(或裂缝问题。

+ r2 E/ c+ O+ R:o这里,引入一个D3D技术概念:“Vertex Blending”---顶点混合技术。

比如说,你肯定用过SetTransform个问题后文会讲到。

你也可以在微软的DXSDK的帮助文件中搜索“GeometryBlending”主题,有裂缝及其二X文件如何保存骨骼动画理解X文件格式,对用好相关的DX函数是非常重要的。

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

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

( ?2.1网格蒙皮信息:首先,在Mesh{}单元中,在原有的普通网格顶点数据基础上,新增了XSkinMeshHead其中,XSkinMeshHeader是总括,举一实例,如下:XSkinMeshHeader{& a2 `8 J- o( l- p% m R$ p8 RK- t. ?" ?9 J3 r9 G0 b2G8D. |x7 `& l! A0 d) b#O9 {5@7 G2,//一个顶点可以受到骨骼影响的最大骨骼数,可用于计算共同作用时减少遍历次数35 //当前Mesh的骨骼总数。

}4,//一个三角面可以受到骨骼影响的最大骨骼数。

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

由于每个骨骼的蒙皮信息都需要用SkinWeights结构去描述,所以有多少块骨骼,在Mesh中就有多少个Sk注意,一般把SkinWeights视作Mesh的一部分。

这种Mesh又称Skinned Mesh (蒙皮网格)SkinWeights结构如下:{STRINGtransformNodeName;//骨骼名8 p- J7 G/ e- y+ B8 [+ t4 \+ `0 B/ q& `3 Y4G; KDWORDnWeights;//权重数组的元素个数,即该骨骼相关的顶点个数array DWORD vertexIndices[nWeights];//受该骨骼控制的顶点索引,实际上定义了该骨骼的蒙皮array float weights[nWeights];//蒙皮各顶点的受本骨骼影响的权值$ L G( `* C$ p2 }- Q! S1 M%l) QMatrix4matrixOffset;//骨骼偏移矩阵,用来从初始Mesh坐标,反向计算顶点在子骨骼坐标}0 K2 Q, Y) @/ Y; q0 d# R* d* J2 \:S- {* L) W4N在有的书中,把上面的matrixOffset叫骨骼权重矩阵,是不恰当的。

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

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

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

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

在动画过程中变化是当前码如下:D3DXMatrixMultiply( &matTemp,&pMeshContainer->pBoneOffsetMatrices[iMatrixIndex], pMesh即,D3DXMatrixMultiply(输出最终世界矩阵,该骨骼的偏移矩阵,该骨骼的变换矩阵)' F8 z; ~# v. W" S4 M2 H6 ]& ^3 ?- ^2 E2.2骨骼层次信息在X文件中,Frame是基本的组成单元。

又称框架Frame。

一个.x可以有多个Frame。

(注意此处的Fram框架Frame允许嵌套,这样就存在父子框架了。

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

这两种关系组合在一起,即可每个框架结构的最前面,有一个FrameTransformMatrix矩阵数据,描述了该框架相对于父框架的变换矩阵。

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

如地形场景。

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

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

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

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

- n2 D5 V- ]& G数据示例:D:\D9XSDK\Samples\Media\tiny.x, P7 P5 ~+ r2 T1 eFrame ...{, F; J:u y& m5 c....., I! |:y:l) ?! b+ _% \, ]Frame Bip01_R_Calf { //子骨骼FrameTransformMatrix {( K& f& y% q' M f1.000,-0."000691,-0."000,0."000,0."000691,1."000,-0."000,0."000,0."00}Frame Bip01_R_Foot {//--孙子骨骼: m; A3 U( ^- m6 Z! c* o7 \5 g Z. c7 i, o+ N! l, J: X4 q8 l2 n:v/ Q' }# M2 \FrameTransformMatrix {}....缩进}}& \3 K/ [+ S7 i+ l4 Z. |0."988831,0."124156,0."082452,0."000,-0."122246,0."992109,-0."027835,0."000,-0."08答:一般来说,每个动画文件只有一个Mesh网格,包含物体所有顶点信息。

[问题]查看示例tiny.x文件,发现只有根框架下有一个Mesh,包含了所有顶点信息。

其它各个Frame都没有3 L; _3 f( c* M0?1 R其它Frame,只是借用来描述各骨骼的层次信息,没必要再定义骨骼网格。

每块骨骼对应的蒙皮顶点信息,坐标,要借助SkinWeights中的顶点索引来进行重新计算。

2.3动画信息:& O& H* M6 q4 F:f7 |* J# I6 ]$ x/ Z3 p由一系列AnimatonKey组成,数据示例如下:AnimationKey {3 ]& _+ z) |1 S; [0 b3 R6 I- v7 Q8 G0 H4 a4;--动画类型4表示矩阵62; --动画帧数,即下面矩阵个数3 Y% m1 k/ j/ g. |2 t& W0;16;1."000,-0."000691,-0."000,0."000,0."000691,1."000,0."000,0."000,0."00.".上面红数字表示时刻tick,兰数字表示数值的个数。

...其它各时刻矩阵..., R:T# v& D' F I" H' H# n80;16;0."992696,-0."120646,-0."000,0."000,0."120646,0."992696,0."000,0."000,-03 |; H7 u0 U6 j) N, l6 D& b{ Bip01_R_Calf }--对应的骨骼对象引用}- p$ h, h# i* G"O {- t') n* m! Y+ j/ W4 q+ e/ Z. a注意:9 K; y8 z/ ?9 u5 A2 F(1)每块骨骼都有一个AnimationKey{}.(2)在上面数据结构中,主要保存了各典型时刻的该骨骼相对于父的变换矩阵.(3)在0时刻的矩阵,与该骨骼对应的前面的Frame所对应的矩阵是相同的。

如Frame Bip01_R_Calf{}中的后动画运行时,DX会提供一种功能,用AnimatonKey中的对应数据刷新初始的变换矩阵(也可能启用关键帧三怎样从X 文件加载骨骼动画信息?3.1负责加载的函数:可能有多种加载方式,在此以SDK中的示例为准,叙述一种标准加载方式,需要用到DX函数D3DXLoadMHRESULT WINAPI% F( B) ^% b1 tD3DXLoadMeshHierarchyFromX(LPCSTR Filename,//.x文件名& T:@! O8 R. X0 z1 W8 ~# Q9N0 @& H6 a! V( j7 Z1i0 G$ @DWORD MeshOptions,//Mesh选项,一般选D3DXMESH_MANAGEDLPDIRECT3DDEVICE9 pD3DDevice,//指向D3D设备Device LPD3DXALLOCATEHIERARCHY pAlloc, //自定义数据容器# [" K3 Y" ^2 S5 I/ P8 @# p4 n* o0 a/ ~* v9 x( W5 e4 @&oLPD3DXLOADUSERDATA pUserDataLoader, //一般选NULLLPD3DXANIMATIONCONTROLLER *ppAnimController //返回相应的动画控制器; `8 A" g. ~+ ?+ hLPD3DXFRAME *ppFrameHierarchy,//返回根Frame指针,指向代表整个骨架的Frame层);这个函数后面的两个输出参数很重要,也很好理解,但输入参数中的自定义数据容器是怎么回事呢?原来,鉴于动画数据的复杂性,需要你配合完成加载过程。

相关文档
最新文档