3Da*_*ave 11
简单地说:给出两点A和B,找到它们之间的一个点.
例如,如果我想在一个步骤中沿着一条线从一个位置x = 1移动到x = 4:
1-----------------------4
Run Code Online (Sandbox Code Playgroud)
第一步是在位置1,第二步是在位置4,因此对象立即从一个位置移动到另一个位置.但是,如果我希望对象花费一定的时间或帧数来进行转换,我需要通过找到均匀间隔的中间点来改进它.
如果我希望对象采取两个步骤(或帧)从1移动到4,
1-----------X-----------4
Run Code Online (Sandbox Code Playgroud)
我需要计算新点(X)是什么,这样我就可以在适当的时候绘制对象.在这种情况下,点X将是
(max-min)
location = min + (current_step) * --------
steps
Run Code Online (Sandbox Code Playgroud)
location是我们想要找到的.min= 1,max= 4,并且在此示例中steps= 2,因为我们要将跨度分为两个步骤:
step: location:
0 1
1 2.5
2 4
1------------(2.5)-----------4
Run Code Online (Sandbox Code Playgroud)
如果我们想采取4个步骤:
step: location:
0 1
1 1.75
2 2.5
3 3.25
4 4
1---(1.75)---(2.5)---(3.25)---4
Run Code Online (Sandbox Code Playgroud)
等等.对于四个步骤,对象移动每帧总距离的25%.对于10个步骤,10%等广告恶心.
对于多个维度(当对象具有2维或3维轨迹时),只需将其单独应用于每个X,Y,Z轴.
这是线性插值.还有其他种类.一如既往,谷歌可以帮助你.
其他应用包括纹理映射,抗锯齿,图像平滑和缩放等,当然还有游戏和图形之外的许多其他用途.
注意:很多框架已经提供了这个.例如,在XNA中,它是Matrix.Lerp.