Unity3D - LINEAR INTERPOLATION
原文地址:http://unity3d.com/learn/tutorials/modules/beginner/scripting/linear-interpolation
水平有限,翻译粗略,欢迎吐槽 :)
When making games it can sometimes be useful to linearly interpolate between two values. This is done with a function called Lerp. Linearly interpolating is finding a value that is some percentage between two given values. For example, we could linearly interpolate between the numbers 3 and 5 by 50% to get the number 4. This is because 4 is 50% of the way between 3 and 5.
制作游戏时,在两个值之间进行线性插值有时候很有用。Lerp函数能够实现该功能。线性插值就是要找出两个给定值之间位于一定百分比的某个值。举例来说,在数字3和数字5之间以50%进行线性插值能够得到数字4。这是因为数字4位于数字3到数字5的50%处。
In Unity there are several Lerp functions that can be used for different types. For the example we have just used, the equivalent would be the Mathf.Lerp function and would look like this:
在Unity中有若干个用于不同类型的Lerp函数。对于我们之前刚刚举得例子来说,等价的Mathf.Lerp函数看起来如下:
// In this case, result = 4
float result = Mathf.Lerp (3f, 5f, 0.5f);
The Mathf.Lerp function takes 3 float parameters: one representing the value to interpolate from; another representing the value to interpolate to and a final float representing how far to interpolate. In this case, the interpolation value is 0.5 which means 50%. If it was 0, the function would return the ‘from’ value and if it was 1 the function would return the ‘to’ value.
函数Mathf.Lerp有三个浮点型参数:一个表示插值的起始值,另一个表示插值的结束值,最后一个浮点数表示要插值多少。在上面的代码中,插值量是0.5,也就是50%。如果插值量是0,则函数就会返回起始值。如果插值量是1,则函数就会返回结束值。
Other examples of Lerp functions include Color.Lerp and Vector3.Lerp. These work in exactly the same way as Mathf.Lerp but the ‘from’ and ‘to’ values are of type Color and Vector3 respectively. The third parameter in each case is still a float representing how much to interpolate. The result of these functions is finding a colour that is some blend of two given colours and a vector that is some percentage of the way between the two given vectors.
其他Lerp函数的例子有Color.Lerp以及Vector3.Lerp。他们的工作方式和Mathf.Lerp函数几乎一致,除了起始值和结束值分别是Color和Vector3类型。他们的第三个参数仍旧是表示插值多少的一个浮点值。这些函数的结果是找出一个由两个给定颜色经过一定比例混合的颜色值以及两个给定向量之间位于一定百分比处的一个向量值。
Let’s look at another example:
让我们来看看另一个例子:
Vector3 from = new Vector3 (1f, 2f, 3f);
Vector3 to = new Vector3 (5f, 6f, 7f); // Here result = (4, 5, 6)
Vector3 result = Vector3.Lerp (from, to, 0.75f);
In this case the result is (4, 5, 6) because 4 is 75% of the way between 1 and 5; 5 is 75% of the way between 2 and 6 and 6 is 75% of the way between 3 and 7.
在上面的情况下结果将是(4, 5, 6),因为数字4位于数字1到数字5的75%处,数字5位于数字2到数字6的75%处,数字6位于数字3到数字7的75%处。
The same principle is applied when using Color.Lerp. In the Color struct, colours are represented by 4 floats representing red, blue, green and alpha. When using Lerp, these floats are interpolated just as with Mathf.Lerp and Vector3.Lerp.
当使用Color.Lerp时其原理也是一样的。在Color结构体中,颜色是由4个分别表示红,蓝,绿和alpha的浮点值构成的。当使用Lerp时,这些浮点值的插值方式就像Mathf.Lerp与Vector3.Lerp一样。
Under some circumstances Lerp functions can be used to smooth a value over time. Consider the following piece of code:
在一些情况下Lerp函数能够用于随时间流逝而平滑一个值。来看下面的代码:
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f);
}
If the intensity of the light starts off at 0 then after the first update it will be set to 4. The next frame it will be set to 6, then to 7, then to 7.5 and so on. Thus over several frames, the lights intensity will tend towards 8 but the rate of it’s change will slow as it approaches its target. Note that this happens over the course of several frames. If we wanted this to not be frame rate dependent then we could use the following code:
如果光的强度从0开始,那么在第一次更新后它的值将是4。下一帧它的值将是6,接着是7,然后是7.5等等。因此在若干帧后,光的强度将会趋近于8,但是它的变化速率在接近目标值时将减慢。需要注意这个过程是发生在若干帧里的。如果我们想要这个过程不依赖帧率的话,那么我们可以使用下面的代码:
void Update ()
{
light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}
This would mean the change to intensity would happen per second instead of per frame.
这样就意味着强度的改变是依赖于每秒的,而不是每帧。
Please note that when smoothing a value it is often best to use the SmoothDamp function. Only use Lerp for smoothing if you are sure of the effect you want.
请注意,通常来说最好使用函数SmoothDamp来平滑一个值。只有在你确定函数Lerp能够达到你想要的效果时才去使用它。
Unity3D - LINEAR INTERPOLATION的更多相关文章
- 3.2 Piecewise Linear Interpolation(站点)
Newton Interpolation: https://www.youtube.com/watch? v=EyRQXA56asI Piecewise Linear Interpolation: h ...
- 【转】线性插值(Linear Interpolation)基本原理
转:https://blog.csdn.net/u010312937/article/details/82055431 今天在阅读大牛代码的时候,发现了Linear Interpolation一次,百 ...
- 线性插值(linear interpolation)
线性插值通常用于:使用离散的样本来重建连续的信号.在计算机图形学中,这些样本可能是纹理.动画关键帧等. template <class T> T Lerp(T& a, T& ...
- [Unity3D] C# Basic : Gameplay Scripting
教程:https://unity3d.com/cn/learn/tutorials/s/scripting 补充:http://www.runoob.com/csharp/csharp-inherit ...
- OpenCASCADE Interpolation - Lagrange
OpenCASCADE Interpolation - Lagrange eryar@163.com Abstract. Power basis polynomial is the most simp ...
- Interpolation in MATLAB
Mathematics One-Dimensional Interpolation There are two kinds of one-dimensional interpolation i ...
- Unity 官方教程 学习
Interface & Essentials Using the Unity Interface 1.Interface Overview https://unity3d.com/cn/lea ...
- OpenGL实现相机视频NV21格式转RGB格式
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- OpenGL核心之视差映射
笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑.畅销书作者;已出版书籍:<手把手教你¯的纹理坐标偏移T3来对fragment的纹理坐标进行位移.你能够看到随着深度 ...
随机推荐
- 统计正数和负数的个数,然后计算这些数的平均值 Exercise05_01
import java.util.Scanner; /** * @author 冰樱梦 * * */ public class Exercise05_01{ public static void ma ...
- React Conf 2017 干货总结 1: React + ES next = ♥
React Conf 2017在加利福尼亚州的圣克拉拉万豪酒店圆满落幕,这已经是Facebook举办的第三届React官方大会了.虽然不能参会,但是作为前端开发者,我们当然不能错过这个绝佳的学习契机. ...
- 【sql】mysql数据库做两条数据替换的操作,不使用第三方变量
需求: 1.将数据库中两条数据中的唯一约束列 做值的替换 原始思想: 将两条数据查出来,在程序中设置第三方变量,进行两条数据的替换,然后将原始两条数据删除,将新的两条替换后的数据插入. 新思想: 1 ...
- Echart学习
制表,展示好帮手,自己看官方文档吧,有示例和入门指导 参考:1.http://echarts.baidu.com/tutorial.html#5%20%E5%88%86%E9%92%9F%E4%B8% ...
- Linux设备驱动之mmap设备操作
1.mmap系统调用 void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); 功能:负责把文件内容 ...
- win7上搭建ruby开发环境
1. 安装ruby 可使用windows下的ruby安装工具rubyinstaller来方便地安装ruby解释器,可以http://rubyinstaller.org/网站上下载得到.安装时,看清安装 ...
- eclipse 配置maven 项目tomcat 运行
- Centos 7 进入单用户模式图文详解
由于昨晚做了一个很傻X的事情,所以有幸进入了CentOS 7 的单用户模式. CentOS 7 在进入单用户的时候和6.x做了很多的改变, 下面让我们来看看如何进入单用户模式. 如何进入CentOS ...
- 阿里云ECS linux通过iptables 配置SNAT代理网关,实现局域网上网
场景说明: 本文将介绍如何通过为VPC中Linux系统的ECS实例配置SNAT,实现无公网ECS通过有EIP的服务器代理访问公网. 步骤: 1.使用SSH的方法登陆一个已经绑定EIP外网的ECS实例. ...
- 小米6安装google play
http://bbs.xiaomi.cn/t-13579116 http://m.mk52.cn/jiaocheng/3288.html 步骤: 1.下载需要的文件并解压 (http://techta ...