一、Lerp : Linear interpolation : 线性插值
记为: L e r p ( v 0 , v 1 , t ) Lerp(\boldsymbol v_0, \boldsymbol v_1, t) Lerp(v0,v1,t), t t t 为插值权重。
L
e
r
p
(
v
0
,
v
1
,
t
)
=
(
1
−
t
)
v
0
+
t
v
1
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 : 归一化线性插值
记为:
N
L
e
r
p
(
v
0
,
v
1
,
t
)
NLerp(\boldsymbol v_0, \boldsymbol v_1, t)
NLerp(v0,v1,t),
t
t
t 为插值权重。
这个和普通
L
e
r
p
Lerp
Lerp 不同的地方就是将插值后的
v
L
e
r
p
\boldsymbol v_{Lerp}
vLerp 值归一化
N L e r p ( v 0 , v 1 , t ) = ( 1 − t ) v 0 + t v 1 ∥ ( 1 − t ) v 0 + t v 1 ∥ 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,记为: S L e r p ( v 0 , v 1 , t ) SLerp(\boldsymbol v_0, \boldsymbol v_1, t) SLerp(v0,v1,t), t t t 为插值权重。
S L e r p ( v 0 , v 1 , t ) = sin ( ( 1 − t ) θ ) sin θ v 0 + sin ( t θ ) sin θ v 1 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
θ 是
v
0
,
v
1
\boldsymbol v_0, \boldsymbol v_1
v0,v1 之间的夹角。
可以看出他是角速度匀速的。
Slerp计算量较大,在 θ → 0 \theta\rightarrow0 θ→0 时, sin θ → θ \sin\theta \rightarrow \theta sinθ→θ,Slerp 退化为 Lerp