增加SKShader中的均匀值

时间:2018-11-06 02:50:59

标签: ios swift xcode shader

在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 :(得分:2)

The SKShader documentation说您的着色器收到此制服:

  

浮动u_time; |制服模拟中的经过时间。

所以用它来驱动动画。

经过的时间将传递给SKScene的{​​{1}}方法。以统一的update将其传递给着色器。然后,您可以使用u_transitionStartTimeu_time(如果需要,还可以使用另一个统一的过渡结束时间或过渡持续时间)来计算过渡进度。