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

文档序号:9814739阅读:来源:国知局
候,在k0到kl时间段内做动画时使用非线性时间插值器Til的k0到kl时间的曲线,而kl到k2时间段内做动画时使用非线性时间插值器Ti2的kl到k2时间的曲线,也就是说,两个非线性时间时间插值器的属性值在kl位置时的值不相同,即两个非线性时间插值器对应的曲线在kl处是不连续的,此时就会造成动画卡顿,跳帧现象。
[0078]缩放模块20,用于按照预设比值对获取的所述非线性时间插值器模型进行缩放,得到相邻两个所述关键帧关联的时间插值器模型,其中,所述缩放方式为对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器边界的属性值与相邻非线性时间插值器边界的属性值相同;
[0079]在本实施例中,所述获取模块10先获取任意相邻两个关键帧之间的非线性时间插值器模型,然后所述缩放模块20按照预设比值对获取的所述非线性时间插值器模型进行缩放,得到相邻两个所述关键帧关联的时间插值器模型,而所述缩放方式为对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器边界的属性值与相邻非线性时间插值器边界的属性值相同,也就是说将图4中的非线性时间插值器的属性值进行调整,以将非线性时间插值器边界的属性值与其它相邻非线性时间插值器边界的属性值一致,非线性时间插值器边界的属性值与其它相邻非线性时间插值器边界的属性值一致的结果可参照图5。
[0080]为更好理解本实施例,具体地,参照图6,所述缩放模块20包括:
[0081 ]获取子模块21,用于获取相邻两个所述关键帧之间的非线性时间插值器模型;
[0082]在本实施例中,以三个关键帧举例,此时可知包括两个非线性时间插值器,同样参照图3,若相邻两个所述关键帧为k0和kl,此时,k0关键帧对应的时间点是横坐标为O的时间点,那么,所述关键帧为k0和kl之间的非线性插值器模型即为靠近纵坐标的曲线。
[0083]所述获取子模块21,还用于获取所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点;
[0084]在所述获取子模块21获取相邻两个所述关键帧之间的非线性时间插值器模型后,所述获取子模块21获取所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点,同理参照图3,可知所述非线性时间插值器模型在所述时间区间中对应的第一预设时间点为0,第二预设时间点为kl。
[0085]计算子模块22,用于根据所述第一预设时间点和所述第二预设时间点,计算所述非线性时间插值器模型对应的时长占所述时间区间的比值;
[0086]在所述获取子模块21获取到所述第一预设时间点和所述第二预设时间点后,所述计算子模块22计算所述非线性时间插值器模型的第一预设时间点和第二预设时间点之间的时长,然后计算所述时长占所述时间区间的比值,若此时所述kl为0.3,则可知此时所述非线性时间插值器模型对应的时长为0.3,而所述时长占所述时间区间的比值的计算公式为(kl-0)/1 = kl,可得到计算结果为0.3;同理,在相邻两个所述关键帧之间的非线性时间插值器模型为图3中靠近横坐标的曲线时,此时,所述非线性时间插值器模型的起始时间点为kl,终止时间点为I,那么所述非线性时间插值器模型的时长为Ι-kl,那么所述时长占所述时间区间的比值的计算公式为(Ι-kl)/I = Ι-kl,若kl为0.3,可得到计算结果为0.7。
[0087]缩放子模块23,用于将所述非线性时间插值器模型按照所述比值进行缩放,得到相邻两个所述关键帧关联的时间插值器模型。
[0088]在本实施例中,在得到所述比值后,所述缩放子模块23即可将所述非线性时间插值器模型按照所述比值进行缩放,以得到相邻两个所述关键帧关联的时间插值器模型,具体地,参照图7,所述缩放子模块23包括:
[0089]获取单元231,用于获取所述非线性时间插值器模型中各个点的横坐标和纵坐标;
[0090]相乘单元232,用于分别将各个点的横坐标和纵坐标乘以所述比值,得到缩放后的所述非线性时间插值器模型;
[0091 ] 处理单元233,用于对缩放后的所述非线性时间插值器模型进行处理,得到相邻两个所述关键帧关联的时间插值器模型。
[0092]在本实施例中,所述获取单元231先获取所述非线性时间插值器模型中各个点的横坐标和纵坐标,然后所述相乘单元232分别将各个点的横坐标和纵坐标乘以所述比值,得到缩放后的所述非线性时间插值器模型,最后所述处理单元233对缩放后的所述非线性时间插值器模型进行处理,得到相邻两个所述关键帧关联的时间插值器模型,进一步地,所述处理单元223,还用于根据所述第一预设时间点更新所述非线性时间插值器模型的起始时间点,根据所述第二预设时间点更新所述非线性时间插值器模型的终止时间点,得到相邻两个所述关键帧关联的时间插值器模型。
[0093]在本实施例中,在对所述非线性时间插值器模型进行压缩后,得到的是压缩后的时间插值器模型,而此时,所述处理单元223根据所述第一预设时间点更新所述非线性时间插值器模型的起始时间点,根据所述第二预设时间点更新所述非线性时间插值器模型的终止时间点,即可得到相邻两个所述关键帧关联的时间插值器模型。
[0094]具体地,整个计算过程可通过继承android系统的Time Interpolator类,添加构造函数,并传入相关参数实现,其中,所述构造函数用于在创建对象时初始化对象,而传入相关参数包括传入所述非线性时间插值器模型在预设时间区间中对应的第一预设时间点和第二预设时间点,所述第一时间点为起始时间点kl、第二时间点为终止时间k2、以及重新传入时间插值器 mlnterpolator,重写get Interpo Iat 1n (float input)接口,以实现一个新的插值器类KFTimeInterpolator,在插值生成算法中,相当于将原有的插值器模型进行改善,将传入的插值器模型进行按照所述比值对输入和输出进行缩放,具体计算方式如下:
[0095]if (input< = kl)
[0096]return mlnterpolator.getInterpolat1n(0.0f)*(k2-kl)+kl
[0097]else if(input> = k2)
[0098]return mlnterpolator.getInterpoIat1n(1.0f)*(k2-kl)+kl
[0099]else
[0100]return mlnterpolator.getInterpoIat1n((input-kl)/(k2_kl))*(k2-kl)+kl[01011 即通过传入时间插值器的起始时间kl、终止时间k2、以及TimeInterpolator模型Ti生成一个新的时间插值器KFTimeInterpolator的对象KFTi,最终根据新生成的时间插值器模型对关键帧进行插值,以生成关键帧动画。
[0102]插值模块30,用于根据所述关联的时间插值器模型对相邻两个所述关键帧进行插值以生成关键帧动画。
[0103]在本实施例中,在得到相邻两个关键帧关联的时间插值器模型后,所述插值模块30根据所述关联的时间插值器模型对相邻两个所述关键帧进行插值,S卩可生成关键帧动画。
[0104]本发明提出的关键帧动画的生成装置,该装置包括:获取模块、缩放模块和插值模块,在接收到关键帧动画的生成指令时,获取模块获取相邻两个关键帧之间的非线性时间插值器模型,缩放模块按照预设比值对获取的所述非线性时间插值器模型进行缩放,得到相邻两个所述关键帧关联的时间插值器模型,其中,所述缩放方式为对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器边界的属性值与相邻非线性时间插值器边界的属性值相同,插值模块根据所述关联的时间插值器模型对相邻两个所述关键帧进行插值以生成关键帧动画,而不是在生成关键帧动画时,只能通过人工编写代码,分别对每两个关键帧使用一个属性动画,然后将两个属性动画进行拼接,本实施中通过对所述非线性时间插值器的属性值进行缩放,以使所述非线性时间插值器的边界值与相邻非线性时间插值器的属性值相同,最终生成流畅的关键帧动画,本发明不需要分别对每两个关键帧使用一个属性动画,不仅提尚了关键帧动画生成的效率和智能性,而且提尚了关键帧动画生成的流畅性。
[0105]进一步地,为了提高关键帧动画的生成的灵活性,参照图8,基于第一实施例提出本发明关键帧动画的生成装置的第二实施例,在本实施例中,所述关键帧动画的生成装置还包括:
[0106]绑定模块40,用于将两个所述关键帧关联的时间插值器模型与相邻两个所述关键帧进行绑定。
[0107]在本实施例中,在得到相邻两个关键帧关联的时间插值器模型后,所述绑定模块40将两个所述关键帧关联的时间插值器模型与相邻两个所述关键帧进行绑定,最终根据绑定的关系,所述时间插值器模型即可实现对绑定的关键帧进行插值以生成动画。
[0108]在本实施例中,为更好理解,举例应用场景如下:
[0109]在关键帧为3帧,且每两个关键帧之间的时间插值器模型都为非线性时间插值器模型,此时
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1