小编sar*_*tak的帖子

如何计算 SKShader 添加到精灵后的当前时间?

着色器中的变量u_time告诉您​​当前时间。但是,如果您重复使用着色器(根据Apple 的最佳实践:“如果多个精灵需要相同的行为,请创建一个着色器对象并将其与每个精灵 [\xe2\x80\xa6] 关联”),然后u_time继续从第一次将其添加到场景中时。这使得使用着色器产生某些类型的效果变得困难,例如从黑色到白色的简单淡入淡出,如下所示:

\n\n
void main() {\n    float duration = 3.0; // seconds\n    float progress = u_time / duration;\n\n    gl_FragColor = vec4(progress, progress, progress, 1.0);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该着色器第一次添加到精灵时会按预期工作,u_time从零开始。但是,后续重用相同的着色器代码会以非零开始u_time。因此,后续着色器将开始完全白色,并且不会渲染预期的从黑到白的淡入淡出。这似乎极大地限制了可能的效用SKShader

\n

shader opengl-es glsl sprite-kit

6
推荐指数
1
解决办法
795
查看次数

标签 统计

glsl ×1

opengl-es ×1

shader ×1

sprite-kit ×1