關於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的計算。碰到這種情況,要自己試驗一下,不要看到別人說什麼就是什麼。如果你試驗過,那你一定會對結果產生懷疑的。可能有些人會覺得,差不多是一秒,差不多,程式這東西,差一點就是天壤之別。你看到的差不多,並不是你以為的誤差,那就是個錯誤。