线性插值(linear interpolation,常简称 lerp)是在两个已知值之间按比例取中间值的计算。给定两个端点 a、b 和一个参数 t,插值结果为:
lerp(a,b,t)=a+t(b−a)=(1−t)a+tb
- t=0 得到 a,t=1 得到 b,t=0.5 得到中点
- 两个权重 (1−t) 与 t 之和恒为 1,所以本质是加权平均(weighted average)
图形学里最常用到它的地方是光栅化:三角形内部的片元属性(颜色、法线、UV、深度等)都由顶点属性插值而来。
- 如果要把两个端点的情形推广到三角形三个顶点,权重会变成三个,处理方法是采用 重心坐标。
注:对于 w=1 的 齐次坐标 直接进行线性差值,会得到非线性的成果:
-
对于 (x1,y1,z1,w1) 和 (x2,y2,z2,w2),直接线性插值进行计算:
x=(1−t)x1+tx2y=(1−t)y1+ty2z=(1−t)z1+tz2w=(1−t)w1+tw2
最终的坐标除以 w 进行归一化后,得到的结果是:
((1−t)w1+tw2(1−t)x1+tx2,(1−t)w1+tw2(1−t)y1+ty2,(1−t)w1+tw2(1−t)z1+tz2)
- 先对两个顶点进行透视除法,得到 (w1x1,w1y1,w1z1) 和 (w2x2,w2y2,w2z2),再进行线性插值:
(1−t)(w1x1,w1y1,w1z1)+t(w2x2,w2y2,w2z2)=(w1(1−t)x1+w2tx2,w1(1−t)y1+w2ty2,w1(1−t)z1+w2tz2)