今天写了两个知识点,发现 CSDN 上都是抄过来抄过去,虽然看看别人写的能解决自己一大部分困惑,然而深入以后还是有不能理解透彻的地方。所以自己把自己理解的加在后面,如有不对,望指教。

Unity 中好几个 Lerp 函数,而对于 Lerp 函数的本质,我以前只知道个大概,参考了别人写的,觉得还是不够清晰,截图加上自己的详细理解如下:

参考资料:http://www.manew.com/blog-42778-2524.html

上面是阅读量最高的解释。不过我还是有不理解的地方。下面是我自己的理解:

Vector3.Lerp

v = Vector3.Lerp(Vector3 from , Vector3 to, float t)等价于 
  v = from + (to - from) * t     这个是它的数学计算公式

t∈[0,1]。t = 0 时,v = from; t = 1 时,v = to;

注意:t 的范围限制在[0,1],这个很重要。

应用:

  上面给出了三个应用案例

1.transform.position = Vector3.Lerp(start,to,0.5f)

t 为固定值 0.5,即每一帧移动到 当前 的 (to- start)*0.5 的位置。明白不了就是上面画的第二个线段图那种移动方式。永远是一半的位置,无限接近 to,但是到达不了 to位置

2.transform.position = Vector3.Lerp(start,to,Time.time)

t  为 Time.time,这个值是游戏开始到现在经过了多少秒,这个数值是一直增加的。但限于 t 的范围只能是 [0,1],所以 Time.time 只有增加到 1 的时候,即游戏开始到现在 1 秒之前这段时间才有意义。

还是理解不了,为什么说这样的写法是 1 秒时间从 from 位置到 to 位置?(官方案例解释)。

正面想不通,从反面想,Time.time 是随着时间增加的,如果他在这个函数中增加到大于 1,而此时 tranform.position 还没有到达 to 位置,而根据数学公式计算  transform.position = from + ( to - from) * t,此时 t = Time.time 大于 1 ,那意味着这一帧 transform.position 要移动的距离要超过当前 to - from 的距离,就是超过了 to ,这显然是错误的。所以 t  = Time.time =1 的时候,transform.position 在最后一次移动的时候位置变化就是 transform.position = from + (to - from) *1,即到达了 to 位置,这个函数的意义就完成了,而 Time.time 再增加,就毫无意义。所以,就是上面官方案例的解释:这样的写法是 1 秒时间从 from 位置到 to 位置。

3. transform.position = Vector3.Lerp(start,to,smoothing*Time.deltaTime) ; float smoothing =5f;

弹簧一样跟随物体。此时,t = smoothing* Time.deltaTime, smoothing 是一个固定值,Time.deltaTime 是执行上一帧所用的时间,会根据电脑性能不同, FPS 变换,每秒执行的整数不固定,每帧执行的时间不同,即 Time.deltaTime 不同。所以 smoothing*Time.deltaTime 是一个动态变化的值,但是也要保证  t 的范围在 [0,1] 之间,超过 1 也就没有意义。假设 FPS 稳定, 60 FPS,则 Time.deltaTime 就是一个固定值 0.02f, t 的值也固定就是 0.1,就和案例 1 一样 t 是一个固定值,永远会无限接近 to ,但到达不了 to 。而实际 FPS  会波动,所以 t 就会波动,就会模拟出弹性跟随的效果。

这种效果就通常用于游戏中摄像机的弹性跟随。

Lerp 函数本质理解相关推荐

  1. 多分类loss函数本质理解

    一.面对一个多分类问题,如何设计合理的损失函数呢? 1.损失函数的本质在数学上称为目标函数:这个目标函数的目标值符合最完美的需求:损失函数的目标值肯定是0,完美分类的损失必然为0 : 2.损失函数分为 ...

  2. 游戏编程 - 从Godot引擎中的lerp(...)函数到线性插值

    从Godot引擎中的lerp(-)函数到线性插值 1. What's LERP? lerp < linear interpolation < 线性插值 < LERP索引页 < ...

  3. 如何用数学函数去理解机器学习?

    本文主要分享了如何基于数学函数原理去理解机器学习的本质,并简要介绍了机器学习的过程. 近期也是在做项目的过程中发现,其实AI产品经理不需要深入研究每一种算法,能了解机器学习的过程,这其中用到哪些常用算 ...

  4. Unity3D中的线性插值Lerp()函数

    在unity3D中经常用线性插值函数Lerp()来在两者之间插值,两者之间可以是两个材质之间.两个向量之间.两个浮点数之间.两个颜色之间,其函数原型如下: Material.Lerp 插值 funct ...

  5. javascript 匿名函数的理解

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他 ...

  6. Java 回调函数的理解

    以下是我对java回调函数的理解,希望对各位有帮助. 简而言之,假设有两个类A与B,还有一个回调接口C(有一个c方法).其中A类持有一个B类对象作为属性和拥有一个a方法,并实现了接口C,所以A类中就有 ...

  7. 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  8. 7.STM32中对DMA_Config()函数的理解(自定义)测试DMA传输数据时CPU还可继续工作其他的事

    STM32中对DMA_Config()函数的理解(自定义):

  9. 4.STM32中对USART1_Config()函数的理解(自定义)

    STM32中对USART1_Config()函数的理解

最新文章

  1. 美多商城之购物车(购物车存储方案)
  2. mybatis调用存储过程
  3. l开头的英文车标是什么车_L开头的英文车标叫什么车
  4. python贴吧回帖-python控制浏览器爬取百度贴吧回复并写入Excel
  5. 窗体的常用属性和常用事件
  6. 如何用 Git 优雅回退代码,别搞错了!
  7. navicat for mysql 如何将表ID排序重1开始?
  8. 201409-5 拼图
  9. 测试一体机ASM failgroup的相关问题处理
  10. 16. CSS 轮廓
  11. mysql group by order_(Mysql5.7踩坑)Mysql关于同时使用Group by 和Order by问题
  12. HCIPHCIE【2019-4月-更新增加新题】221 65道新题
  13. html烟花特效,发射粒子特效,爱心特效,动态祝福、节日祝福网页,时间罗盘,黑客帝国代码雨、文字闪烁、表白爱心网页等等(附下载链接)
  14. SQL - 多字段组合升序ASC降序DESC
  15. axios 框架的介绍和基本使用
  16. LVGL笔记10--lv_cont容器
  17. 《Effective Modern C++》笔记
  18. TextToSpeech文字转语音
  19. 无障碍服务(AccessibilityService)
  20. 雷军:做互联网需7字诀

热门文章

  1. 负载均衡原理与技术实现
  2. udev的应用案例_2018_lcf
  3. socket编程UDP程序
  4. mousewheel的火狐浏览器兼容
  5. vue项目使用nwjs打包、替换exe桌面图标以及exe内容的图标全教程
  6. SQL 结构化查询语言 6部分
  7. 读书笔记-精准努力-对社交的误解不是非要等自己强大了才社交
  8. “五一”出游大数据报告发布,快来看...
  9. 中国内地首家美高梅品牌城市酒店在上海开业;奢华品牌洲至奢选首次进入大中华区;希尔顿花园酒店中国第50家开业...
  10. 小样本学习 | 尝试用于三星堆脸型目标检测(附论文框架下载)