• 【Away3D代码解读】(五):动画模块及骨骼动画


    动画模块核心存放在away3d.animators包里;

    Away3D支持下面几种动画格式:

    • VertexAnimator:顶点动画
    • SkeletonAnimator:骨骼动画
    • UVAnimator:UV动画
    • SpriteSheetAnimator:二维切换动画
    • ParticleAnimator:粒子动画
    • PathAnimator:路径动画

    这几种动画都有各自的特点及应用场景,一般而在3D游戏中应用得最广泛的是骨骼动画,因为骨骼动画是人物动画的核心,我们下半段会专门详解这个动画;

    动画简介

    核心类

    IAnimator

    提供控制动画播放的接口,具体的动画类型对应具体的实现类,如骨骼动画使用SkeletonAnimator类;

    将该对象赋值到对应的Mesh的animator属性既可以控制该Mesh对象播放动画;

    对于播放的所有动画都应该存放到IAnimationSet对象中;

    IAnimationSet

    提供管理多个动画的容器,多个动画如奔跑或攻击都需要添加到对应的Set容器后才能进行播放;

    data包

    动画所需的数据对象元变化(帧)信息;

    nodes包

    一串变化组成的一个独立动画节点;

    states包

    动画当前状态,从Nodes提取以供当前显示的动画元(帧)信息;

    渲染流程

    Away3D中的动画渲染是双线更新渲染的,一个更新位于AnimatorBase类的方法update中,负责更新动画数据,一个更新位于MaterialBase类的renderPass方法中,负责渲染绘制;

    具体的更新都是更具当前时间来更新对应的State对象,更新具体流程可以具体的打断点查看,这里就不深入解读了。

    骨骼动画

    骨骼动画在网络上有大量的资料,大家可以去网上搜搜看,这里主要说一下Away3D中是如何处理骨骼动画的数据的;

    SkeletonJoint

    由于多个关节之间是可以相互链接的(父关节变化时会影响到子关节),该对象用来保存关节的链接信息;

    Skeleton

    骨骼对象包含了所有关节的链接信息(SkeletonJoint);

    JointPose

    保存一个关节的信息,包括3个数据:名称、四元数(用于旋转)和转换信息;

    SkeletonPose

    记录一个关键帧下所有的关节的信息(每个关节的位置及旋转数据),包含所有的关节对象(JointPose)列表;

    SkeletonClipNode

    包含了一个骨骼动画的所有关键帧数据(SkeletonPose列表),同时还可以为每个关键帧指定一定的间隔;

    SkeletonClipState

    更新特定时间点的骨骼数据,骨骼动画的插值运算;

    SkeletonAnimationSet

    存放多个骨骼动画(SkeletonClipNode)的容器,使骨骼动画(SkeletonClipNode)和其name属性关联起来,配合SkeletonAnimator的play方法可以指定播放哪个骨骼动画(SkeletonClipNode);

    SkeletonAnimator

    骨骼动画的播放类,可以设定到指定Mesh上,需要指定一个骨骼容器(SkeletonAnimationSet)和对应的骨骼对象(Skeleton);

  • 相关阅读:
    正向代理和反向代理
    python的reduce,map,zip,filter和sorted函数
    sed和awk的简单使用
    nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    nginx负载均衡
    nginx入门与实战
    python开发之virtualenv与virtualenvwrapper讲解
    Linux下的python3,virtualenv,Mysql、nginx、redis安装配置
    Linux系统基础优化及常用命令
    vim与程序员
  • 原文地址:https://www.cnblogs.com/hammerc/p/4192141.html
Copyright © 2020-2023  润新知