空间向量及值插值相关函数

1.两个向量之间插值
    float3 slerpBetweenVector(float3 from, float3 to, float delta){  
        quatf model_start = quatf::fromDirectedRotation(normalize(from), normalize(from));
        quatf model_end = quatf::fromDirectedRotation(normalize(from), normalize(to));
        quatf result = slerp(model_start, model_end, delta);
        float len_from = length(from);
        float len_to = length(to);
        return normalize(result * from) * slerpBetweenValue(len_from,len_to,delta);
    }

quatf::fromDirectedRotation为求两向量间的旋转的四元数,见Filament源码

2.两个点之间插值
float slerpBetweenValue(float from, float to, float delta){
    return from+(to-from)*delta;
}

float3 slerpBetweenPoint(float3 point_from, float3 point_to, float delta){  
    return float3(slerpBetweenValue(point_from.x,point_to.x,delta),
        slerpBetweenValue(point_from.y,point_to.y,delta),
        slerpBetweenValue(point_from.z,point_to.z,delta));
}

3.两个Transform之间插值
void slerpBetweenTransform(const std::shared_ptr<Transform> from,const  std::shared_ptr<Transform> to, float delta,const std::shared_ptr<Transform>& result){
    result->setPosition(slerpBetweenPoint(from->getPosition(),to->getPosition(),delta));
    result->setRotation(slerp(from->getRotation(),to->getRotation(),delta));
    result->setScale(slerpBetweenPoint(from->getScale(),to->getScale(),delta));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值