没有合适的资源?快使用搜索试试~ 我知道了~
Unity3D中的线性插值Lerp()函数解析
需积分: 42 35 下载量 164 浏览量
2015-12-03
19:06:07
上传
评论 1
收藏 1.02MB DOCX 举报
温馨提示
试读
12页
下载自百度文库http://wenku.baidu.com/linkurl=srUzgA0QBvQdJDwcQtmr3NNw6xy1Hq7Bp79jXpjBdDh1inuvg4j56nq1u4aSwFMRumcWWtJ8_XeOtUYIuyJ8a_1w073aZVBCqInTC4HWzHW。 这篇文章很详细的讲述了Lerp函数的使用,相信一定让你恍然大悟。
资源推荐
资源详情
资源评论
Unity3D 中的线性插值 Lerp()函数解析
在 unity3D 中经常用线性插值函数 Lerp()来在两者之间插值,两者之间可以是两个材质
之间、两个向量之间、两个浮点数之间、两个颜色之间,其函数原型如下:
Material.Lerp 插值
funcon Lerp (start : Material, end : Material, t : oat) : void
在两个材质之间插值
Vector2.Lerp 插值
stac funcon Lerp (from : Vector2, to : Vector2, t : oat) : Vector2
两个向量之间的线性插值。按照数字 t 在 form 到 to 之间插值。
t 是夹在 0 到 1 之间。当 t=0 时,返回 from。当 t=1 时,返回 to。当 t=0.5 时放回 from
和 to 之间的平均数。
Vector3.Lerp 插值
stac funcon Lerp (from : Vector3, to : Vector3, t : oat) : Vector3
两个向量之间的线性插值。按照数字 t 在 from 到 to 之间插值。
Vector4.Lerp 插值
stac funcon Lerp (from : Vector4, to : Vector4, t : oat) : Vector4
两个向量之间的线形插值。按照数字 t 在 from 到 to 之间插值。t 是夹在[0...1]之间的
值。,当 t = 0 时,返回 from。当 t = 1 时,返回 to。当 t = 0.5 返回 from 和 to 的平均数。
Mathf.Lerp 插值
stac funcon Lerp (from : oat, to : oat, t : oat) : oat
基于浮点数 t 返回 a 到 b 之间的插值,t 限制在 0~1 之间。当 t = 0 返回 from,当 t = 1
返回 to。当 t = 0.5 返回 from 和 to 的平均值。
Color.Lerp 插值
stac funcon Lerp (a : Color, b : Color, t : oat) : Color
通过 t 在颜色 a 和 b 之间插值。
"t"是夹在 0 到 1 之间的值。当 t 是 0 时返回颜色 a。当 t 是 1 时返回颜色 b。
插值,从字面意思上看,就是在其间插入一个数值,这种理解是否正确呢?我们先从
最简单的浮点数插值函数来分析:
Mathf.Lerp 插值
stac funcon Lerp (from : oat, to : oat, t : oat) : oat
基于浮点数 t 返回 a 到 b 之间的插值,t 限制在 0~1 之间。当 t = 0 返回 from,当 t = 1
返回 to。当 t = 0.5 返回 from 和 to 的平均值。
首先,我们来做一个试验,启动 Unity3D,任建一个脚本文件,在其 Start()中输入内容
如下:
void Start () {
print(Mathf.Lerp(0.0f, 100.0f, 0.0f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.1f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.2f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.3f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.4f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.5f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.6f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.7f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.8f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 0.9f).ToString());
print(Mathf.Lerp(0.0f, 100.0f, 1.0f).ToString());
}
运行 Unity,在控制台将打印出:
这个实验是在 0 到 100 之间插值,插入什么值,取决于第 3 个参数,从打印结果可看
出,第 3 个参数是个比例因数,是 0.1 时表示 0 到 100 这个长度的十分之一,同理,0.2 表
示十分之二,依此类推。从这点上看来,我们起初从字面上所理解的插值就是插入一个数
值是可以这样理解的。
如果我们把上面那个脚本里的插值函数里的第一个参数变为 100.0f,第二个参数变为
110.0f , 第 三 个 参 数 保 持 不 变 , 大 家 想 想 其 运 行 结 果 该 是 什 么 呢 ? 可 不 要 认 为 是
0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9 、 10 了 哟 , 实 际 结 果 是
100、101、102、103、104、105、106….,因插值是把值插在原来的两数之间,这说明这
个函数首先是根据第三个参数所给定的比例算出净增量,再加上起始数,最终算出插值值
的。
在 Unity3D 游戏开发中,应用最多的是 Vector3.Lerp 向量插值,下面我们以此插值来猜
推其内部实现机理以及一些应用。
如图,在空间中存在两点 A(0,10,0)与 B(10,0,-10),我们在 A、B 两点间插入一 C 点,假
设 C 点的位置在 AB 的五分之二处,即 AC/AB=0.4,根据相似图形对应边成比例的初中几何
知 识 可 知 , 在 ⊿ ABO 中 AC/AB=OD/OB , 同 理在 ⊿OBF 中 OD/OB=OE/OF , 所 以 AC/
AB=OD/O=OE/OF = 0.4,则 C 点的 X 坐标值为:OE=0.4*OF=0.4*10=4。
根据上图,还可知 ED/FB=0.4,所以 C 点的 Z 坐标值 DE=0.4*BF=0.4*(-10)=-4。
C 点的 Y 坐标值请看下图:
剩余11页未读,继续阅读
资源评论
LaoJiu_
- 粉丝: 274
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功