插值算法 —— Lerp, NLerp, SLerp
一、Lerp : Linear interpolation : 线性插值
记为:Lerp(v0,v1,t)Lerp(\boldsymbol v_0, \boldsymbol v_1, t)Lerp(v0,v1,t), ttt 为插值权重。
Lerp(v0,v1,t)=(1−t)v0+tv1
Lerp(\boldsymbol v_0, \boldsymbol v_1, t) = (1-t)\boldsymbol v_0 + t\boldsymbol v_1
Lerp(v0,v1,t)=(1−t)v0+tv1

二、NLerp : Normalized Linear interpolation : 归一化线性插值
记为:NLerp(v0,v1,t)NLerp(\boldsymbol v_0, \boldsymbol v_1, t)NLerp(v0,v1,t), ttt 为插值权重。
这个和普通 LerpLerpLerp 不同的地方就是将插值后的 vLerp\boldsymbol v_{Lerp}vLerp 值归一化
NLerp(v0,v1,t)=(1−t)v0+tv1∥(1−t)v0+tv1∥ NLerp(\boldsymbol v_0, \boldsymbol v_1, t) = \frac{(1-t)\boldsymbol v_0 + t\boldsymbol v_1}{\Vert(1-t)\boldsymbol v_0 + t\boldsymbol v_1\Vert} NLerp(v0,v1,t)=∥(1−t)v0+tv1∥(1−t)v0+tv1

由于是按照弦长的比例来插值的,即在弦上是匀速的,故在 角速度 或 弧 上并不匀速。
三、SLerp : Spherical Linear interpolation : 球面线性插值
为了解决插值角速度不匀速,引入了SLerp,记为:SLerp(v0,v1,t)SLerp(\boldsymbol v_0, \boldsymbol v_1, t)SLerp(v0,v1,t), ttt 为插值权重。
SLerp(v0,v1,t)=sin((1−t)θ)sinθv0+sin(tθ)sinθv1 SLerp(\boldsymbol v_0, \boldsymbol v_1, t) = \frac{\sin((1-t)\theta)}{\sin\theta}\boldsymbol v_0 + \frac{\sin(t\theta)}{\sin\theta}\boldsymbol v_1 SLerp(v0,v1,t)=sinθsin((1−t)θ)v0+sinθsin(tθ)v1

其中,θ\thetaθ 是 v0,v1\boldsymbol v_0, \boldsymbol v_1v0,v1 之间的夹角。
可以看出他是角速度匀速的。
Slerp计算量较大,在 θ→0\theta\rightarrow0θ→0 时,sinθ→θ\sin\theta \rightarrow \thetasinθ→θ,Slerp 退化为 Lerp
更多推荐



所有评论(0)