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的纹理坐标进行位移.你能够看到随着深度 ...
随机推荐
- 【左偏树】HDU1512-Monkey King
[题目大意] 在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识(认识具有传递性)的两只猴子之间.争斗时,两只 ...
- UTF8、UTF16、UTF16-LE、UTF16-BE、UTF32都是些什么?
下述内容大部分引用自CSDN: Unicode 是 unicode.org 制定的编码标准,目前得到了绝大部分操作系统和编程语言的支持.unicode.org 官方对 Unicode 的定义是:Uni ...
- [转载]iOS6新特征:UICollectionView官方使用示例代码研究
原文地址:iOS6新特征:UICollectionView官方使用示例代码研究作者:浪友dans 注:这里是iOS6新特征汇总贴链接 iOS6新特征:参考资料和示例汇总 这个链接可以学习到UIColl ...
- ORACLE查看并修改最大连接数的具体步骤
第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes ...
- tengine + lua 实现流量拷贝
环境搭建参考地址:http://www.cnblogs.com/cp-miao/p/7505910.html cp.lua local res1, res2, action action = ngx. ...
- 常见社工破解WPA2密码方法及防范措施
0×00前言 何为社工?社工是一种通过利用受害者心理弱点,如本能反应.好奇心.同情心.信任.贪婪等进行诸如欺骗.盗取.控制等非法手段的一种攻击方式.在无线安全中也可以利用社工做到许多非法操作.下面举几 ...
- 深度增强学习--Actor Critic
Actor Critic value-based和policy-based的结合 实例代码 import sys import gym import pylab import numpy as np ...
- 查看某一个开发者代码修改量的脚本(ios平台可用)
#!/bin/sh # This is a script that help you get your team member's productivity # by analyzing his/he ...
- Android TextView 常见问题与使用总结
一.文字显示行数设置 1. 仅显示一行文字 android:singleLine="true" setTransformationMethod(TransformationMeth ...
- [Angular] Tree shakable provider
When we create a Service, Angluar CLI will helps us to add: @#Injectable({ providedIn: 'root' }) It ...