您的位置:首页 > 移动开发 > Unity3D

关于函数Vector3.Lerp差值函数的理解记录

2016-12-02 16:10 363 查看
     
 转载请注明来自于:http://blog.csdn.net/strangenightmare/article/details/53435362

      本人是U3D的小菜鸟一枚。之前经常看到很多代码里都用到Lerp函数,去百度了下啥叫插值函数。但是确实不明白是什么意思。这两天着实研究了下才懂了一点点皮毛。希望对同样迷惑的小伙伴一点帮助。

      言归正传,目前我只看到用Vector2和Vector3做插值的比较多。我看了文档,说两个Color,或者两个Material也可以做插值计算。那么什么是差值。我理解的插值就是在两个向量之间插入一个中间值来使过渡更加流畅。比如你要让摄像机以一个速度接近目标物体,直接用Translate函数移动就会产生那种瞬间到的感觉。这样体验就不太好。那么我们就可以通过在起始点到目标点之间加入一系列的插值,逐渐到达每一个插值的坐标点,最终到达目标点。这样过渡就会很流畅。或者说你要让你的物体原地旋转,用插值再去旋转,这样就会感觉很真实,而不是一瞬间转到目标坐标。

     上面讲了一下使用场景,接下来我们说一下原理。在这里我是参考了点击打开链接这位大神的博客才理解清楚的,下面复制几张他的图片方便讲解。



如图。在空间中存在两点A(0,10,0)与B(10,0,-10),我们假设插入一个比值是0.4的点C,也就是说AC/AB=OD/OB=OE/OF=0.4,通过这个比例关系,我们就可以用初中数学知识很清晰的确定出C点的坐标。比如说,DE就是⊿OBF的0.4分线(-_-可以这么叫吧),那么DE=BF*0.4,DE的距离就是C点的Z轴坐标。通过这样计算,我们可以计算出C点坐标是C(4,6,-4)。在U3D中使用Vector3.Lerp函数大家可以自己验证这个结果。

      就像上面的C点就是插值的点。在游戏中情况更复杂,可能出现空间直线,这样计算过程思路不变,但是原理就更复杂了。U3D给我们提供了函数Lerp(from,to,t)来直接替我们计算插值。t的取值是[0,1],当t=0的时候,插值函数返回from;当t=1的时候,插值函数返回to。如果你想要一个逐渐接近to的坐标,可以逐渐增加t的数值。

      Vector3.lerp函数使用后给我的感觉更像是数学中的极限,逐渐接近目标坐标,但是极限是永远不可能等于目标,但是插值是最终会等于目标点坐标的。

     本菜鸟水平有限,只能理解到这里。希望对其他菜鸟一点小小的启示吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Vector3 Lerp Unity3D