关键帧动画的生成装置及方法_4

文档序号:9814739阅读:来源:国知局
,可参照图3,三个关键帧分别是k0 (起始帧)、kl (中间某一帧)、结束帧(k2),k0到kl之间使用时间插值器(kftl,靠近纵坐标的曲线),kl到k2之间使用时间插值器(kft2,靠近横坐标的曲线),那么将上述非线性时间插值器按照比值进行缩放以后,kftl、kft2曲线在关键帧kI时间时,表现为属性值为同一个值,整个动画的时间插值器曲线如图5所示,整个动画过程中不会出现跳变,动画流畅。
[0110]同理,在关键帧包括4帧或更多的时候,对关键帧动画与关键帧3帧的生成方式一致,此时不再赘诉。
[0111]本发明进一步提供一种关键帧动画的生成方法。
[0112]参照图9,图9为本发明关键帧动画的生成方法第一实施例的流程示意图。
[0113]本实施例提出一种关键帧动画的生成方法,所述关键帧动画的生成方法包括以下步骤:
[0114]步骤S10,在接收到关键帧动画的生成指令时,获取相邻两个关键帧之间的非线性时间插值器模型;
[0115]在本实施例中,首先获取相邻两个关键帧之间的非线性时间插值器(TimeInterpolator)模型,然后分析所述非线性时间插值器模型。
[0116]可以理解,时间插值器是用来指定动画的某一个属性随着时间的变化规律,并且将该时间区间进行归一化,可以将时间插值器模型的起始值为O,终止值为I。因此,在获取到所述非线性时间插值器模型时,先查看相邻两个关键帧之间的非线性时间插值器模型的源码,假设现在有3个关键帧,则需要两个非线性时间插值器模型,两个非线性时间插值器模型参照图3,分别是图3中的两条曲线,而此时的三个关键帧,分别为kO、kl和k2三个关键帧,三个关键帧可参照图4,kO关键帧对应的时间点是横坐标中的原点,k2关键帧对应的时间点是横坐标中的I,我们对kO和kl之间设置一个非线性时间插值器模型Til,对kl和k2时间段再次设置一个非线性时间插值器模型Ti2。而此时,系统会认为Til、Ti2的时间起始点都为kO,终止点时间为k2,这样就会造成系统在做关键帧动画的时候,在kO到kl时间段内做动画时使用非线性时间插值器Til的kO到kl时间的曲线,而kl到k2时间段内做动画时使用非线性时间插值器Ti2的kl到k2时间的曲线,也就是说,两个非线性时间时间插值器的属性值在kl位置时的值不相同,即两个非线性时间插值器对应的曲线在kl处是不连续的,此时就会造成动画卡顿,跳帧现象。
[0117]步骤S20,按照预设比值对获取的所述非线性时间插值器模型进行缩放,得到相邻两个所述关键帧关联的时间插值器模型,其中,所述缩放方式包括对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器边界的属性值与相邻非线性时间插值器边界的属性值相同;
[0118]在本实施例中,先获取任意相邻两个关键帧之间的非线性时间插值器模型,然后按照预设比值对获取的所述非线性时间插值器模型进行缩放,得到相邻两个所述关键帧关联的时间插值器模型,而所述缩放方式为对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器边界的属性值与相邻非线性时间插值器边界的属性值相同,也就是说将图4中的非线性时间插值器的属性值进行调整,以将非线性时间插值器边界的属性值与其它相邻非线性时间插值器边界的属性值一致,非线性时间插值器边界的属性值与其它相邻非线性时间插值器边界的属性值一致的结果可参照图5。
[0119]为更好理解本实施例,具体地,参照图10,所述步骤S20包括:
[0120]步骤S21,获取相邻两个所述关键帧之间的非线性时间插值器模型;
[0121]在本实施例中,以三个关键帧举例,此时可知包括两个非线性时间插值器,同样参照图3,若相邻两个所述关键帧为kO和kl,此时,kO关键帧对应的时间点是横坐标为O的时间点,那么,所述关键帧为kO和kl之间的非线性插值器模型即为靠近纵坐标的曲线。
[0122]步骤S22,获取所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点;
[0123]在获取相邻两个所述关键帧之间的非线性时间插值器模型后,获取所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点,同理参照图3,可知所述非线性时间插值器模型在所述时间区间中对应的第一预设时间点为0,第二预设时间点为kl。
[0124]步骤S23,根据所述第一预设时间点和所述第二预设时间点,计算所述非线性时间插值器模型对应的时长占所述时间区间的比值;
[0125]在获取到所述第一预设时间点和所述第二预设时间点后,计算所述非线性时间插值器模型的第一预设时间点和第二预设时间点之间的时长,然后计算所述时长占所述时间区间的比值,若此时所述kl为0.3,则可知此时所述非线性时间插值器模型对应的时长为0.3,而所述时长占所述时间区间的比值的计算公式为(kl-0)/l=kl,可得到计算结果为
0.3;同理,在相邻两个所述关键帧之间的非线性时间插值器模型为图3中,靠近横坐标的曲线时,此时,所述非线性时间插值器模型的起始时间点Skl,终止时间点为I,那么所述非线性时间插值器模型的时长为Ι-kl,那么所述时长占所述时间区间的比值的计算公式为(1-kl)/I = Ι-kl,若kl为0.3,可得到计算结果为0.7。
[0126]步骤S24,将所述非线性时间插值器模型按照所述比值进行缩放,得到相邻两个所述关键帧关联的时间插值器模型。
[0127]在本实施例中,在得到所述比值后,即可将所述非线性时间插值器模型按照所述比值进行缩放,以得到相邻两个所述关键帧关联的时间插值器模型,具体地,参照图11,所述步骤S24包括:
[0128]步骤S241,获取所述非线性时间插值器模型中各个点的横坐标和纵坐标;
[0129]步骤S242,分别将各个点的横坐标和纵坐标乘以所述比值,得到缩放后的所述非线性时间插值器模型;
[0130]步骤S243,对缩放后的所述非线性时间插值器模型进行处理,得到相邻两个所述关键帧关联的时间插值器模型。
[0131]在本实施例中,先获取所述非线性时间插值器模型中各个点的横坐标和纵坐标,然后分别将各个点的横坐标和纵坐标乘以所述比值,得到缩放后的所述非线性时间插值器模型,最后对缩放后的所述非线性时间插值器模型进行处理,得到相邻两个所述关键帧关联的时间插值器模型,进一步地,所述步骤S243包括:
[0132]根据所述第一预设时间点更新所述非线性时间插值器模型的起始时间点,根据所述第二预设时间点更新所述非线性时间插值器模型的终止时间点,得到相邻两个所述关键帧关联的时间插值器模型。
[0133]在本实施例中,在对所述非线性时间插值器模型进行压缩后,得到的是压缩后的时间插值器模型,而此时,根据所述第一预设时间点更新所述非线性时间插值器模型的起始时间点,根据所述第二预设时间点更新所述非线性时间插值器模型的终止时间点,即可得到相邻两个所述关键帧关联的时间插值器模型。
[0134]具体地,整个计算过程可通过继承android系统的Time Interpolator类,添加构造函数,并传入相关参数实现,其中,所述构造函数用于在创建对象时初始化对象,而传入相关参数包括传入所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点,所述第一时间点为起始时间点kl、第二时间点为终止时间k2、以及重新传入时间插值器 mlnterpolator,重写get Interpo Iat 1n (float input)接口,以实现一个新的插值器类KFTimeInterpolator,在插值生成算法中,相当于将原有的插值器模型进行改善,将传入的插值器模型进行按照所述比值对输入和输出进行缩放,具体计算方式如下:
[0135]if (input< = kl)
[0136]return mlnterpolator.getInterpolat1n(0.0f)*(k2-kl)+kl
[0137]else if(input〉= k2)
[0138]return mlnterpolator.getInterpoIat1n(1.0f)*(k2-kl)+kl
[0139]else
[0140]return mlnterpolator.getInterpoIat1n((input-kl)/(k2_kl))*(k2-kl)+kl[0141 ] 即通过传入时间插值器的起始时间kl、终止时间k2、以及TimeInterpolator模型Ti生成一个新的时间插值器KFTimeInterpolator的对象KFTi,最终根据新生成的时间插值器模型对关键帧进行插值,以生成关键帧动画。
[0142]步骤S30,根据所述关联的时间插值器模型对相邻两个所述关键帧进行插值以生成关键帧动画。
[0143]在本实施例中,在得到相邻两个关键帧关联的时间插值器模型后,根据所述关联的时间插值器模型对相邻两个所述关键帧进行插值,即可生成关键帧动画。
[0144]本发明提出的关键帧动画的生成方法,在接收到关键帧动画
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1