骨骼动画技术的研究与实现

上传人:E**** 文档编号:117892862 上传时间:2019-12-11 格式:PDF 页数:92 大小:3.48MB
返回 下载 相关 举报
骨骼动画技术的研究与实现_第1页
第1页 / 共92页
骨骼动画技术的研究与实现_第2页
第2页 / 共92页
骨骼动画技术的研究与实现_第3页
第3页 / 共92页
骨骼动画技术的研究与实现_第4页
第4页 / 共92页
骨骼动画技术的研究与实现_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《骨骼动画技术的研究与实现》由会员分享,可在线阅读,更多相关《骨骼动画技术的研究与实现(92页珍藏版)》请在金锄头文库上搜索。

1、骨骼动画技术的研究与实现 ( 题名和副题名) 袁会杰 ( 作者姓名) 指导教师姓名朱清新 教授博导 电子科技大学成都 ( 职务、职称、学位、单位名称及地址) 申请专业学位级别硕士专业名称计算机应用技术 论文提交日期2 0 1 0 0 4论文答辩日期2 0 1 0 0 5 学位授予单位和日期电子科技大学 答辩委员会主席 评阅人 年月日 注1 :注明国际十进分类法U D C 的类号。 t q m t A b s r o t a t e V e c t o r ( & s v t x b o n e N o r m a l s k ,& t m p N o r m a l ) ; i f ( 1 (

2、 一O ) 第一个作用骨骼 r v t x p o s i t i o n = t m p P o s i t i o n ; r v t x n o r m a l = t m p N o r m a l 宰s v t x b o n e W e i g h t s k ; ) e l s e 其他作用骨骼,通过线性混合算法实现。 r v t x p o s i t i o n + = t m p P o s i t i o n ; r v t x n o r m a l + = t m p N o r m a l 掌s v t x b o n e W e i g h t s k ; ) )

3、 r v t x n o r m a l n o r m a l i z e O ;对变换后的法线单位化。 ) ) ; 2 6 3 动画数据载入和管理 动画数据既是关键帧数据,本文中的每个关键帧是以( 平移,旋转) 对来保 存信息的。先定义如下数据结构用于保存每个关键帧信息: s t r u c tT B o n e S t a t e 电子科技大学硕士学位论文 v e c t o r 3 ft r a n s l a t e ; q u a t e r 4 fq u a t e r ; ) ; 设计T B o n e A n i m C h a n n e l 类结构( 见图2 6 ) 保存

4、动画数据中每块骨骼的关键 帧信息,其中包括了关键帧插值的计算功能。值得注意的是,获得关键帧的方法 有两种:一是获得最接近的关键帧,二是通过对两个最近的关键帧进行插值获得。 关键帧线性插值采用2 4 节中论述的方法。 对于一个完整的动画,设计T S k e l e t o n A n i m 类用于单个动画管理。 该类中的g e t K e y F r m B o n e N e a r e s t 以及g e t K e y F r m B o n e L i n e a r 是获得所有的骨 骼关键帧数据,通过调用每个T B o n e A n i m C h a r m e l 对象的g e

5、 t K e y F r a m e N e a r e s t 或 者g e t K e y F r a m e L i n e a r 来实现。 2 6 4 骨骼动画驱动实现 为了实现驱动,设计如下数据结构用于保存骨骼更新信息: s t r u c tT B o n e R e f :T B o n e S t a t e m a t r i x 4 4 m t R e l a t i v e ; 当前局部变换矩阵 m a t r i x 4 4 m t A b s ; 当前全局变换矩阵 i n t i B o n e ; 骨骼编号 i n t p a r e n t ; 父骨骼编号 v

6、e c t o r 3 f p r e v T r a n s l a t e ;上一平移信息 q u a t e r 4 fp r e v Q u a t e r ; 上一旋转信息 b o o l h a s C h a n g e d ; 记录是否有更新,用于优化运算 b o o l h a s C a l u ; 记录是否已计算,用于优化 ) ; 有了相应的结构用于模型数据和动画数据的管理之后,就可以很方便的在应 用中驱动骨骼动画,T S k A n i m I n s t a n c e 类的设计如图2 - 6 。 其中,最重要的是p o s t u r e L i n e a r 、

7、c a l u B o n e R e f s 和d e f o r m 函数,它们分别实 现了计算当前变换、更新骨骼局部和全局变换矩阵、和更新顶点的功能。下面一 一对其实现。_ _ p o s t u r e L i n e a r 是通过调用T S k e l e t o n A n i m 的g e t K e y F r m B o n e L i n e a r 函数实现的。D e f o r m 是通过调用T S k e l e t o n M e s h :d e f o r m B o n e 0 来实现的。 b o n e R e f 二 m t R e l a t i V

8、e s e t Q u a t e m i o n ( b o n e R e f - q u a t e r v ) ; b o n e R e f - p r e v Q u a t e r = b o n e R e g q u a t e r ; b o n e R e 0 h a s C h a n g e d = t r u e ; i f ( b o n e R e f - p r e v T r a n s l a t e ! = b o n e R e f - t r a n s l a t e ) 平移信息 b o n e R e f - m t R e l a t i v

9、 e s e t T r a n s l a t i o n ( b o n e R e f - t r a n s l a t e ) ; b o n e R e f - p r e v T r a n s l a t e = b o n e R e f - t r a n s l a t e ; b o n e R e f - h a s C h a n g e d = t r u e ; ) i ff f o n e R e g p a r e n t ! = O ) 父骨骼递归求解 T B o n e R e f * p a r e n t = m c u r B o n e R e

10、f s b o n e R e f - p a r e n t ; i f ( ! p a r e n t - h a s C a l u ) _ c a l u B o n e R e f F M ( p a r e n t ) ; b o n e R e f - m t A b s = p a r e n t - m t A b s * b o n e R e f - m t R e l a t i v e ; ) e l s e 根骨骼 b o n e R e f - m t A b s = b o n e R e g m t R e l a f i v e ; b o n e R e

11、f - h a s C a l u = t r u e ; 2 5 电子科技大学硕士学位论文 ) ; 可以看出,该过程采用了较多的优化,比如通过p r e v T r a n s l a t e 的比较来判断 是否需要更新平移信息,并用h a s C h a n g e d 记录是否有信息改变发生,用于顶点更 新时做简化运算。 2 6 5 骨骼动画的渲染 最后要特别指出的是渲染过程,由于本文采取了网格子对象划分的方法,因 此在渲染的时候需要多做一些额外的工作。下面给出渲染实现的伪代码。 v o i dT S k e l e t o n M e s h :r e n d e r 0 设置当前顶点

12、数组以及顶点格式等。 f o r ( i :l n ,对子对象m _ o b j e c t s i 进行分别处理) 对子对象进行单独处理该阶段是实现第三章平面阴影的关键。 f o r ( j :1 r l ,对子材质组进行分别处理) 设置当前子组的材质信息; 根据索引数组绘制子对象。 ) ) ) 这样的架构就可以满足一些应用的需求,对有相同属性的一些顶点进行分组 处理,而且也不会额外增加顶点数据。 2 7 小结 骨骼动画作为一个新兴的技术,借力于计算机硬件的快速发展,已经在实时 应用领域取得了广泛的应用。它与其他技术相结合,可以实现很多复杂的动画效 果,如动画混合技术,平面阴影技术等等,在后

13、面的章节中本文将对这些扩展技 术进行研究实现。 本章从实践的角度出发,详细分析了骨骼动画的实现原理,给出了完整的实 子对象 化。本 由C P U 以期能 电子科技大学硕士学位论文 第三章骨骼动画的扩展应用 本章讨论骨骼动画的一些扩展应用技术,如动画混合、平面阴影等技术。并 提出了一些适合应用需求的改进,并在上一章的框架内予以实现。 3 1 动画混合 上面章节中骨骼动画的设计实现都是针对已有动画序列的驱动,本节将给出 利用已有动画来生成新动画的技术动画混合技术的设计方法。动画混合技术 就是利用两个甚至多个已有动画序列来混合生成一个新动画的技术,这种技术不 但可以生成许多新动画效果,同时还节省了动

14、画载入的开销以及存储动画的内存 开销,而且减轻了美术制作人员制作动画的工作量。假如在角色动画序列中已经 存在跑步和摔倒两个动画,当角色在跑步动画播放的时候因为碰到障碍物需要产 生摔倒动作,如果让角色立刻停止播放跑步动画,同时启动播放摔倒动画,这样 产生的动画效果就不真实,会很突兀生硬。动画混合技术可以很好的解决这个问 题,可以控制角色在碰到障碍物后的一小段时间里,播放跑步和摔倒两个动画的 混合,这样角色就会实现从跑步动作到摔倒动作的平滑过渡。此外,假如动画序 列中存在跑步动画和开枪动画,利用动画混合技术就可以生成边跑步边开枪的新 动画。 3 1 1 动画混合原理及步骤 动画混合技术的基本思路是

15、对多个不同的动画序列分别赋予合适的混合因 子,每个动画序列在对顶点进行影响之前分别乘以其混合因子后求和得到新动画 序列。本文只对两个动画的混合进行了实现,对多个动画的混合与此类似。 动画混合的实现步骤设计如下: 一、对每个需要混合的动画序列计算其混合因子,需要注意的是这些混合因 子的和必须为l 。对混合因子的计算一般是基于需要混合的时间或者帧数来计算 的,在一个典型的基于时间( t i m e - b a s e d ) 的应用中,在指定混合动画的时刻,需 要指定总体混合时间,即两个动画的混合过程总共需要多长时间来完成,然后再 第三章骨骼动画的扩展应用 以后的每帧中,根据当前混合时间和总体混合

16、时间来计算出对应的混合因子。 二、分别计算需要混合的动画序列的当前需求帧数,换句话说,就是计算动 画当前应该播放到第几帧。这个过程和单个动画驱动过程是一样的,只不过要对 两个动画序列分别求解。 三、对每个参与混合的动画求解其关键帧,并插值求得变换信息( 平移向量 和旋转四元数) ,这一过程与单一动画驱动是一样的,不同的是需要对求解结果分 别保存用于混合运算。 四、变换信息混合。这一过程对于动画混合技术来说是最关键的一步。需要 分别对每块骨骼在更新其局部矩阵之前,进行关键帧二次插值求解。公式为: 最终平移向量= 动画i 的平移向量半动画i 的混合因子。其中n 是需要 f = l 混合的动画个数。 最终旋转四元数= s l e r p ( 动画1 的旋转四元数,动画2 的旋转四元数,混合 因子) 。关于s l e r p 的公式见公式2 1 ,这里不做重复。 五、之后

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号