关于Lerp插值的基本原理和在Unity中的应用

插值这个东西,对于很多新手来说,只是停留在使用的阶段,知道什么时候用,但是运算机制却不甚了解。

最近发现,很多新人有这么一种想法:已经封装好的算法,都是很高深的,我们直接用就好了,没有必要去了解它的实现方式。

这种想法是不对的。很多东西,只因为你是站在门外的,所以你看不透彻,当你迈进门里面的时候,就会觉得不过如此。

啰嗦了很多,就是希望看到这篇的帖子的刚出道的新手们,能有一个打破砂锅问到底的精深。

高深之所以高深,只是因为你还没有理解。


言归正传,说一下Lerp的实现:

float Lerp(float a,float b,float t)

return a+(b-a)*t;


有没有大跌眼镜!!当然,我写的这个方法只是解释一下它的基本原理。

unity中提供的与Lerp有关的常用API有下面几个:

Mathf.Lerp(float a, float b, float t)

Mathf.LerpAngle(float a, float b, float t)

Vector3.Lerp(Vector3 a,Vector3 b, float t)


所有插值的原理都是一样的,只是针对特定的应用目标,加入了其他的一些内容。比如角度插值LerpAngle,它只是帮助你封装了角度范围的控制。

这里有必要点一下,不管是Math还是Vector里面的Lerp的返回值value一定是a<=value<=b的。但是他们也都有另一个不限制范围的Lerp方法,LerpUnclamped()。


在网上发现一些东西


这个回答的举例是错误的,从他错误的举例就可以推断答题人并没有真正理解Lerp的计算。碰到这种情况,要自己试验一下,不要看到别人说什么就是什么。如果你试验过,那你一定会对结果产生怀疑的。可能有些人会觉得,差不多是一秒,差不多,程序这东西,差一点就是天壤之别。你看到的差不多,并不是你以为的误差,那就是个错误。

猜你喜欢

转载自blog.csdn.net/u010133610/article/details/64906818