Ios 增加SKShader中的“一致”值
在SpriteKit节点上,我运行片段着色器(SKShader)来显示动画(Ios 增加SKShader中的“一致”值,ios,swift,xcode,shader,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,
canvasNode.fillShader=shader
)
在某个时刻,我想增加一个统一参数(transitionProgress
,介于0和1之间),以更改动画阶段
目前,我只是将其从0设置为1
shader.uniforms = [
SKUniform(name: "u_transitionProgress", float: 1)
]
然而,我更希望在这些值之间有一个平滑的过渡(比如线性增加,0,0.001,0.002,…,0.999,1)
既然我不能在着色器中存储任何可以在每次执行时增加的值,那么实现该效果的最佳方法是什么?(或者,只有这样才能一次又一次地执行上面的行,并略微增加值?表示着色器接收到此一致性:
浮动u_时间;|均匀|模拟中经过的时间
所以用它来驱动动画
经过的时间被传递到
SKScene
的update
方法。以名为u\u transitionStartTime
的统一格式将其传递给着色器。然后,您可以使用u\u time
和u\u transitionStartTime
(如果需要,还可以使用另一个统一的转换结束时间或转换持续时间)计算转换进度。这听起来像是更新:
接收CACurrentMediaTime()
而不是从模拟开始以来的时间(不管是什么)。在第一次调用update:
时,您应该节省时间。然后在后续调用中,您可以减去第一次调用的时间以获得“模拟中经过的时间”。