ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:109.49KB ,
资源ID:21224953      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21224953.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(3D游戏角色动画Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

3D游戏角色动画Word文件下载.docx

1、而右上臂是上身的子节点,后者则是躯体的子节点。通过改变不同部分之间的相对位置,比如夹角,位移等等,就可以实现所需要的各种动画效果。这类动画的优点很多。首先,在动画序列的关键帧中只需要存储节点间的相对变化,因此动画文件占用的空间很小。其次,可以实现很多复杂的动画效果,如果应用程序支持反向动力学还可以动态实现预先存储的动画序列之外的新的动画效果。当然这类动画也有不少缺点。其中之一是由于角色模型是一个层次模型,要获得某一个部分相对于世界坐标的位置,必须从根结点开始遍历该节点所有的祖先节点累计计算模型的世界变换。但最关键的问题是在不同部分的结合处往往会有很明显的接缝,这会严重的影响模型的真实感。第二类

2、是渐变动画(Morphing Animation)。这种动画中的角色由一系列的渐变网格模型构成。在动画序列的关键帧中记录着组成网格的各个顶点的新位置或者是相对于原位置的改变量。通过在相邻关键帧之间插值来直接改变该网格模型中各个顶点的位置就可以实现动画效果。相对于关节动画,单一网格模型动画的角色看上去更真实,也不会有关节动画所面临的接缝问题。由于没有使用层次模型,获得模型网格顶点在世界坐标中位置的计算量也很小。但是,这类动画的适应性很弱,角色很难通过实时计算来与环境进行良好的互动,以获得预先存储的动画序列之外的动画效果。另一方面,由于关键帧要存储网格模型所有的顶点信息,动画文件占用的空间比较大。

3、第三类是骨骼蒙皮动画(Skinned Mesh)。骨骼蒙皮动画可以看作是关节动画和渐变动画的结合。他同时兼有关节动画的灵活和渐变动画的逼真。后面将详细介绍骨骼蒙皮动画的技术细节。3D角色动画技术和其它动画技术相结合,就能创造出绚丽多彩的游戏世界。在一个游戏项目中,计时扮演了一个重要的角色。基于时间的运动,也就是创建计时器来控制运动。它能够产生这样一种动画效果:同样处理10000毫秒的动画,在性能好的计算机上得到平滑完整的动画效果,在性能不好的计算机上显得跳帧,但也能够在10000毫秒的时候完成任务,和性能好的计算机是同步的。基本思路是事先设置好动画关键帧序列,在主循环中判断出第一个动画关键帧和

4、下一个动画关键帧的编号,利用一个时间计数器去定位相对于第一动画关键帧的位置。随着时间计数器的增长,不断从第一个动画关键帧的位置移动至下一个动画关键帧的位置。主要分为以下几个步骤:1设置动画关键帧序列。2计算出每一帧的时间Time,Time是相对于程序开始运行的毫秒数。3定位出第一个动画关键帧和下一个动画关键帧。4利用Time计算出相对于第一个动画关键帧的毫秒数,再利用这个偏移毫秒数计算出相对于第一个动画帧的偏移位置。5设置变换矩阵。6回到第2步。上图表示了4帧的关键帧动画,其中第0帧和第3帧变换矩阵相同。下面直接看代码,我将结合代码详细叙述。typedef struct sKeyframe D

5、WORD Time; D3DMATRIX matTransformation; sKeyframe;/关键帧的结构,DWORD Time为执行该帧的时间,D3DMATRIX /matTransformation为在该帧时模型的变换矩阵。sKeyframe g_Keyframes4 = / Keyframe 0, 0ms 0, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.00

6、0000f, 0.000000f, 0.000000f, 1.000000f , / Keyframe 1, 40ms 400, 0.000796f, 1.000000f, 0.000000f, 0.000000f, -1.000000f, 0.000796f, 0.000000f, 0.000000f, 50.000000f, 0.000000f, 0.000000f, 1.000000f , / Keyframe 2, 80ms 800, -0.999999f, 0.001593f, 0.000000f, 0.000000f, -0.001593f, -0.999999f, 0.00000

7、0f, 0.000000f, 25.000000f, 25.000000f, 0.000000f, 1.000000f , / Keyframe 3, 120ms 1200, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f ;/定义了4帧的关键动画。其中第3帧和第0帧的变换矩阵一样,为了使动画能进入循环状态。void DoFrame() /此函数在循环内 static DWORD StartTime = timeGetTime();DWORD Time = timeGe

8、tTime() - StartTime;/用timeGetTime()得到一个操作系统运行的毫秒数,储存到static变量以后将不再改变,/DWORD Time变量不断改变,为本程序运行的毫秒数。Time %= (g_Keyframes3.Time+1);/得到一个不断从0到1200变化的毫秒数。 DWORD Keyframe = 0; / 从第0帧开始。 for(DWORD i=0;i= 某一关键帧的时间,将关键帧定位于此帧。 if(Time = g_Keyframesi.Time) Keyframe = i; DWORD Keyframe2 = (Keyframe=3) ? Keyfram

9、e:Keyframe + 1;/得到接下来的关键帧,如/果Keyframe为第3关键动画帧,Keyframe2也为第3关键动画帧。/当Keyframe=1200时这种情况才成立,几率很小。一般情况下,Keyframe2=Keyframe+1。 DWORD TimeDiff = g_KeyframesKeyframe2.Time - g_KeyframesKeyframe.Time; if(!TimeDiff) TimeDiff=1;/计算两个sKeyframe的时间差,当Keyframe=Keyframe2=3时,TimeDiff=0,/此时另TimeDiff=1。 float Scalar

10、= (float)(Time - g_KeyframesKeyframe.Time) / (float)TimeDiff; / Scalar取 /值为0,1),利用Time计算出相对于Keyframe的偏移毫秒数,再除以两/帧的时间差。 D3DXMATRIX matInt = D3DXMATRIX(g_KeyframesKeyframe2.matTransformation) - D3DXMATRIX(g_KeyframesKeyframe.matTransformation); matInt *= Scalar; /用于计算相对于Keyfrme的偏移位置。 matInt += D3DXMAT

11、RIX(g_KeyframesKeyframe.matTransformation); / 计算出该帧处相/对于Keyfrme的偏移位置。 g_pD3DDevice-SetTransform(D3DTS_WORLD, &matInt); / 设置 world transformation matrix 设置完变换矩阵,剩下的事情就只是渲染了。创建计时器控制动画的技术是非常简单有效的,这是现代计算机游戏动画的基础,因此,必须深刻理解它的内容。1 介绍微软的X文件 制作3D游戏角色动画需要与之相关的“动画容器”。这个“容器”中储存着动画的数据。微软的X文件正是这样的一种容器。由于微软的影响力,它们

12、公司设计的X文件也广为流传。X文件是一套基于模版定义的文件,理论上它能够容纳任何数据。也就意味着不仅仅是3D模型文件,任何用于游戏引擎加载的外部资源都可以被包含于X文件之中。下面我们详细的介绍下X文件。为了得到一个直观的印象,我们首先浏览下它的全貌。xof 0302txt 0032template Header DWORD major;DWORD minor;DWORD flags;template Frame 3D82AB46-62DA-11cf-AB39-0020AF71E433FrameTransformMatrixMeshHeader 1;0;Frame Scene_Root Fram

13、eTransformMatrix 1.000000, 0.000000, 0.000000, 0.000000,0.000000, 1.000000, 0.000000, 0.000000,0.000000, 0.000000, 1.000000, 0.000000,0.000000, 0.000000, 0.000000, 1.000000;Frame Pyramid_Frame Mesh PyramidMesh 5;0.00000;10.00000;,-10.00000;6;3;0,1,2;0,2,3;0,3,4;0,4,1;2,1,4;2,4,3;MeshMaterialList 0,0

14、,0,0,0,0;Material Material0 1.000000; 1.000000;0.000000;0.050000; 0.050000; 0.000000;首先看头文件xof 0302txt 0032。xof表示这是一个真正的X文件。0302txt表示通知程序使用Directx的X文件,版本为3.2的模版,其中txt表示此文件为文本文件,可读,并非是一个2进制文件。0032表示一个浮点数的位数为32,如果想要用64位的浮点数,可以写成0064。下面我们将按照以下七个步骤进行介绍和说明。第一,声明一个模版:假设声明 template ContactEntry ,首先需要用guidg

15、en.exe产生一个GUID。产生的GUID如下:/ 4C9D055B-C64D-4bfe-A7D9-981F507E45FFDEFINE_GUID(0x4c9d055b, 0xc64d, 0x4bfe, 0xa7, 0xd9, 0x98, 0x1f, 0x50, 0x7e, 0x45, 0xff);之后需要在程序代码中加入:#include initguid.h/ At beginning of source code file - add DEFINE_GUIDsDEFINE_GUID(ContactEntry, 还要在X文件中加入:template ContactEntry 4C9D05

16、5B-C64D-4bfe-A7D9-981F507E45FF这里介绍下声明模版用到的数据类型:关键字 描述WORD 16-bit value (short)DWORD 32-bit value (32-bit int or long)FLOAT IEEE float value (float)DOUBLE 64-bit floating-point value (double)CHAR 8-bit signed value (signed char)UCHAR 8-bit unsigned value (unsigned char)BYTE 8-bit unsigned value (unsi

17、gned char)STRING A NULL-terminated string (char)array Signifies an array of following data type to follow ()使用数据类型的举例:DWORD Value;array STRING Text20;/定义一个名为Text的数组,类型为STRING,大小为20。DWORD ArraySize; array STRING NamesArraySize; /可以将大小设置为变量。现在,我们声明一个ContactEntry模版:STRING Name; / The contacts nameSTRIN

18、G PhoneNumber;s phone numberDWORD Age;s age实例化一个模版对象:ContactEntry JimsEntry Jim Adams(800) 555-121230;JimsEntry 可以用这样的形式引用一个数据对象。例如,在一个animation sequence template中引用一个Frame data object做为其内嵌数据对象。也可以利用引用表示一个数据对象的副本,没有必要重复书写这个数据对象。第二,内嵌数据对象和模版约束:首先,我们分别声明了三个不同的模版,请仔细看它们的区别。template ClosedTemplate DWORD

19、 ClosedData;template OpenTemplate 4C9D055B-C64D-4bff-A7D9-981F507E45FFDWORD OpenData;.template RestrictedTemplate 4C9D055B-C64D-4c00-A7D9-981F507E45FFDWORD RestrictedData;ClosedTemplateOpenTemplateClosedTemplate看起来没有什么不同,因为它就是标准的模版声明。在OpenTemplate中包含一个.,表示这是一个开放模版。开放模版允许在中内嵌任何数据对象。例如,你可以实例化OpenTempl

20、ate,在里面定义一个OpenData变量和内嵌一个ClosedTemplate的实例。最后的RestrictedTemplate为约束模版。约束模版实例化时只允许包含它列出的数据对象,如,不能在RestrictedTemplate包含ClosedTemplate,OpenTemplate以外的数据对象。第三,充分利用DirectX .X Standard Templates:正如上面提到的,X文件广泛用于包含一个mesh信息。一个Standard Templates包含了各种信息。Table 3: DirectX .X Standard TemplatesTemplate Name Desc

21、riptionAnimation: Defines animation data for a single frame.AnimationKey: Defines a single key frame for the parent animation template.AnimationOptions: Contains animation playback information.AnimationSet: Contains a collection of animation templates.Boolean: Holds a Boolean value.Boolean2d: Holds

22、two Boolean values.ColorRGB: Contains red, green, and blue color values.ColorRGBA: Contains red, green, blue, and alpha color values.Coords2d: Defines two coordinate values.FloatKeys: Contains an array of floating-point values.FrameTransformMatrix: Holds the transformation matrix for a parent Frame

23、template.Frame: A frame-of-reference template that defines a hierarchy.Header: The .X file header that contains version numbers.IndexedColor: Contains an indexed color value.Material: Contains material color values.Matrix4x4: Holds a 4x4 homogenous matrix container.Mesh: Contains a single meshs data

24、.MeshFace: Holds a meshs face data.MeshFaceWraps: Contains the texture wrapping for mesh faces.MeshMaterialList: Contains the material for face-mapping values.MeshNormals: Holds normals used for mesh data.MeshTextureCoords: Holds texture coordinates used for mesh data.MeshVertexColors: Holds vertex

25、color information used for mesh vertices.Patch: Defines a control patch.PatchMesh: Contains a patch mesh (much like the Mesh template).Quaternion: Holds a quaternion value.SkinWeights: Contains an array of weight values mapped to a meshs vertices. Used in skinned meshes.TextureFilename: Contains the texture file name to use for a material.TimedFloatKeys

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1