2

我想知道是否有人可以帮助简单地解释什么是插值以及它如何在 3D 计算机图形中使用

4

4 回答 4

11

简单地说:给定两个点 A 和 B,在它们之间找到一个点。

例如,如果我想一步一步将某物从位置 x=1 移动到 x=4:

1-----------------------4

第一步在位置 1,第二步在位置 4,因此对象会立即从一个位置移动到另一个位置。但是,如果我希望对象花费一定的时间或帧数来进行转换,我需要通过找到均匀间隔的中间点来改进它。

如果我希望对象采取两个步骤(或帧)从 1 移动到 4,

1-----------X-----------4

我需要计算新点 (X) 是什么,以便我可以在适当的时间在那里绘制对象。在这种情况下,点 X 将是

                                  (max-min)
location = min + (current_step) * --------
                                    steps

location是我们试图找到的。min=1,max=4,在本例中steps为 =2,因为我们要将跨度分为两个步骤:

step:   location:
0       1
1       2.5
2       4

1------------(2.5)-----------4

如果我们想采取4个步骤:

step:   location:
0       1
1       1.75
2       2.5
3       3.25
4       4

1---(1.75)---(2.5)---(3.25)---4

等等。对于四个步骤,对象每帧移动总距离的 25%。对于 10 步、10% 等,令人作呕。

对于多个维度(当对象具有 2 维或 3 维轨迹时),只需将其分别应用于每个 X、Y、Z 轴。

这是线性插值。还有其他种类。与往常一样,Google 可以帮助您

其他应用包括纹理映射、抗锯齿、图像平滑和缩放等,当然还有游戏和图形之外的许多其他用途。

注意:很多框架已经提供了这个。例如,在 XNA 中,它是Matrix.Lerp

于 2011-01-09T18:45:00.260 回答
2

插值是从一件事到另一件事的平滑调整。它用于动画。

例如,如果一个对象位于位置 1,并且我们想在 6 秒内将其移动到位置 2,我们需要在两个端点之间缓慢插入其位置。插值也指对该路径上的位置的任何搜索。

于 2011-01-09T17:22:07.433 回答
0

插值是基于其他点的点的“猜测”。

例如,当您有点 (0,0) 和 (2,2) 时,您可能会“猜测”点 (1,1) 也属于该集合。

simples 应用程序是从两点推导出一条线。

同样的事情适用于 3 维或实际上是 n 维。

在 3D 图形中,它将被使用

  • 对于动画,根据开始和结束坐标计算事物的位置
  • 计算线
  • 渐变
  • 图形缩放,可能还有更多
于 2011-01-09T17:28:25.473 回答
0

一般定义

插值(在数学中)可以被视为从一个值到另一个值的转换。插值通常使用 0 到 1 范围内的值,例如百分比。0 是起始值,1 是结束值。插值的主要目的是找到给定值之间的值。

插值类型

各种程序中使用了许多类型的插值,最常见的是线性插值。这种插值是最简单直接的;它用于在两个点或数字之间的线段中查找值。还有:三次插值二次插值双线性三线性等。有关更多信息,请访问此处:https ://en.wikipedia.org/wiki/Interpolation 。

在 3D 图形中的应用

插值,尤其是线性、双线性和三线性,对于计算几何中的片段(几何的纹理和视觉效果)、混合体积纹理、mip 映射(纹理上的景深效果)和照明(如虚幻引擎的体积光照贴图)。插值的结果可能会有所不同,但它可能会产生非常现实的结果。这是一个相当大的计算,尤其是当插值在 3 维或更高维(超空间)时。

插值示例

在一维中:

n1 = 1
n2 = 2

i = 0.5

n3 = (n1 - n1 * i) + n2 * i

///////////////////////////////////////

                  n3
├────────┼────────┼────────┼────────┤
1       1.25     1.5      1.75      2

///////////////////////////////////////

在 2 个维度中:

v1 = {1, 1}
v2 = {1.5, 2}

i = 0.5
d = √((v1.x - v2.x)^2 + (v1.y - v2.y)^2)

v3 = {v1.x + -d * i * ((v1.x - v2.x) / d),v1.y + -d * i * ((v1.y - v2.y) / d)} 

///////////////////////////////

  2 ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼ v2
1.5 ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─●
    ┼─┼─┼─┼─┼─┼─┼v3─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─●─┼─┼─┼─┼─┼─┼
    ┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ┼v1─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
    ●─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
   1           1.5          2

///////////////////////////////
于 2020-12-11T00:57:46.140 回答