Ответ 1
Как я понимаю, вы хотите, чтобы texel находился в vUv
, когда t=0
и через center
через некоторое время.
Результат - это увеличение по центру текстуры.
На самом деле ваш код делает это от t = 0
до t = 1
. Когда t = 1
положение текселя center
.
У вас такое же поведение, используя функцию mix.
vec2 newPosition = mix(vUv, center, t);
Также, когда t = 1
все, тексель находится в center
, и изображение представляет собой одноцветное изображение. (Цвет центра текстуры).
Ваша проблема в том, что t
продолжает расти. И когда t > 1
тексель продолжается на своем пути. После того, как все они встречаются в центре, теперь они отклоняются друг от друга. Эффект заключается в том, что текстура меняется на противоположную, и вы видите уменьшение.
В зависимости от того, как вы хотите, чтобы это закончилось, есть несколько решений:
-
Вы хотите перейти к максимальному масштабированию и сохранить это изображение: clamp t в диапазоне
[0, 1]
как этоt = clamp(t, 0, 1);
. -
Вы хотите перейти к максимальному масштабированию, и изображение исчезнет: прекратите рисовать его, когда
t > 1
(илиt >= 1
, если вы не хотите одиночного цветного изображения). -
Вы хотите бесконечное масштабирование, т.е. тексель приближается и приближается к центру, но никогда не достигает его.
Для этого третьего поведения вы можете использовать новый t
, скажем t2
:
-
t2 = 1 - 1/(t*k+1); // Where k > 0
-
t2 = 1 - pow(k, -t); // Where k > 1
-
t2 = f(t); // Where f(0) = 0, f is increasing, continuous and limit in +∞ is 1