Интерполяция в 3d компьютерной графике

Мне было интересно, если кто-то может помочь с простыми словами объяснить, что такое интерполяция и как она используется в компьютерной графике 3D

4 ответа

Проще говоря: учитывая две точки 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.

Интерполяция - это плавная настройка от одного к другому. Используется в анимации.

Например, если объект находится в местоположении 1, и мы хотим переместить его в местоположение 2 в течение шести секунд, нам нужно медленно интерполировать его местоположение между двумя конечными точками. Интерполяция также относится к любому поиску местоположения на этом пути.

Интерполяция - это "угадывание" точек на основе других точек.

например, когда у вас есть точки (0,0) и (2,2), вы можете "догадаться", что точка (1,1) также принадлежит набору.

Простое приложение - вывести линию из двух точек.

То же самое работает в 3-х или фактически n-размерности.

В 3D графике это будет использоваться

  • для анимации, чтобы рассчитать положение вещей на основе начальной и конечной координации
  • счетные линии
  • градиенты
  • масштабирование графики и, возможно, многое другое

Общее определение

Интерполяцию (в математике) можно рассматривать как переход от одного значения к другому. Интерполяция обычно использует значение в диапазоне от 0 до 1, например, в процентах. 0 — это начальное значение, а 1 — конечное значение. Основная цель интерполяции - найти значения между заданными значениями.

Типы интерполяции

Существует много типов интерполяции, используемых в различных программах, наиболее распространенной из которых является линейная интерполяция . Этот тип интерполяции самый простой и понятный; Он используется для поиска значений в сегменте линии между двумя точками или числами. Также есть: кубическая интерполяция , квадратичная интерполяция , билинейная , трилинейная и т.д. Для получения дополнительной информации перейдите сюда: https://en.wikipedia.org/wiki/Interpolation.

Применение в 3D-графике

Интерполяция, особенно линейная, билинейная и трилинейная, важна для вычисления фрагментов геометрии (текстуры и визуальные эффекты геометрии), смешивания объемных текстур, мип-мэппинга (влияние глубины резкости на текстуру) и освещения (например, объемного изображения нереального движка). карты освещения). Результаты интерполяции могут различаться, но потенциально они могут дать очень реалистичные результаты. Это довольно большие вычисления, особенно когда интерполяция выполняется в 3-х измерениях или выше (гиперпространство).

Пример интерполяции

В 1 измерении:

      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

///////////////////////////////
Другие вопросы по тегам