Увеличьте равномерное значение в SKShader - PullRequest
0 голосов
/ 06 ноября 2018

На узле SpriteKit я запускаю фрагментный шейдер (SKShader), чтобы показать анимацию (canvasNode.fillShader = shader).

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

В настоящее время я просто установил значение от 0 до 1.

shader.uniforms = [
    SKUniform(name: "u_transitionProgress", float: 1)
]

Однако я бы предпочел переход (например, линейное увеличение 0, 0,001, 0,002, ..., 0,999, 1) для плавного перехода между этими значениями.

Поскольку я не могу хранить в шейдере какие-либо значения, которые я мог бы увеличивать при каждом выполнении, каков наилучший подход для достижения этого эффекта? (или это единственный способ выполнить строки выше снова и снова с небольшим увеличением значений?)

1 Ответ

0 голосов
/ 06 ноября 2018

В документации SKShader говорится, что ваш шейдер получает эту форму:

float u_time; | Униформа | Истекшее время в симуляции.

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

Истекшее время передается методу SKScene s update. Передайте это шейдеру в форме с именем u_transitionStartTime. Затем вы можете рассчитать ход перехода, используя u_time и u_transitionStartTime (и, при необходимости, другую униформу для времени окончания перехода или продолжительности перехода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...