ios - 增加 SKShader 中的统一值

标签 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)以在这些值之间平滑过渡。

由于我无法在着色器中存储任何可以在每次执行时增加的值,实现该效果的最佳方法是什么? (或者是用略微增加的值一次又一次地执行上面几行的唯一方法?)

最佳答案

The SKShader documentation说你的着色器收到这个制服:

float u_time; | Uniform | The elapsed time in the simulation.

所以用它来驱动动画。

耗时被传递给 SKSceneupdate 方法。在名为 u_transitionStartTime 的制服中将其传递给着色器。然后,您可以使用 u_timeu_transitionStartTime 计算转换进度(如果需要,还可以使用另一个统一的转换结束时间或转换持续时间)。

关于ios - 增加 SKShader 中的统一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165137/

相关文章:

android - 我可以在移动平台上运行 HTTP 服务器吗?

ios - 使用自动布局为所有屏幕按比例缩放表格 View 单元格高度

swift - 每次显示 View Controller 时如何随机化 UILabel 文本

xcode - 创建多行 UILabel

ios - 为什么在 searchBar 和 tableview 之间添加空白?

android - 如何检测用户安装应用程序的唯一设备

ios - CGImageCreateWithMaskingColors 删除颜色时离开边框

ios - 添加完成/旁边到数字键盘

ios - 火力地堡崩溃。 xcode 9.没有谷歌服务

ios - 为什么我的应用程序文档文件夹不可见?