关键帧系统的实现(Hermite位置插值+Squad四元数空间的朝向插值)

    谈谈工作中的低层运动控制方法吧。动画师设计动画时一般先设计好物体的运动轨迹,然后指定物体沿该轨迹的运动。物体的运动轨迹为样条曲线,由用户交互给出。
    假设物体的运动轨迹为一空间参数曲线Q(u),我们必须对Q(u)等间隔采样,以求得物体在每一帧的位置。但是,当对参数u等间隔采样时,并不能得到样条曲线上的等间隔采样,因为等间距的参数不一定对应等间距的弧长。由于弧长函数s=A(u)是u的严格增函数,因此s和u是一对一的关系。A(u)是一个积分方程,它没有解析解。我们无法直接将A -1(s)解析表达出来,通常只能采用数值求解的方法。此方法在《Advanced Animation and Rendering Techniques》中有详细说明,此书作者Watt还根据他们的实践提出了一种基于向前差分的近似计算方法,这在算法中均以实现。而我们的轨迹用什么样条的类型来表示呢?计算机辅助几何设计中常用的样条函数有Bezier、B样条、β样条,各有优缺点吧。 B样条是动画中较常用的曲线之一,其二阶连续性保证了运动的光滑性,局部性保证了可对动画进行局部调整,因此非常适合于作轨迹曲线,但并不太适合关键帧插值。在Hermite函数基础上Kochanek将两个附加参数引入到约束方程中,得到的样条函数非常适合关键帧插值系统。
    具体的Hermite样条函数很多有讲解,只列出入切矢量和出切矢量的一般公式:
张量参数 t用来控制曲线在插值点处的尖锐性;偏移量参数b用来调整源弦和目标弦的相对权值;连续性参数c来控制左右切向的大小。利用这三个参数非常适合于指定曲线的形状调整。
    关于位置插值曲线的设计:
class Spline 
{
public:
    Spline();
    virtual ~Spline();
 
public:
    void
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值