为什么SpriteKit不更新着色器的制服?

拉拉尔夫

我在项目中添加了两个着色器,一个是WWDC 2014示例中的相同着色器,另一个具有相同的代码,但添加了自定义统一样式。问题在于,具有自定义制服的精灵在应用程序运行时会变为静态,而在Xcode的SpriteKit编辑器中会变为黑色。

在此处输入图片说明

下面u_speed带有自定义制服的着色器,用于控制波浪移动的速度。

void main()
{
    float currTime = u_time * u_speed;

    vec2 uv = v_tex_coord;
    vec2 circleCenter = vec2(0.5, 0.5);
    vec3 circleColor = vec3(0.8, 0.5, 0.7);
    vec3 posColor = vec3(uv, 0.5 + 0.5 * sin(currTime)) * circleColor;

    float illu = pow(1. - distance(uv, circleCenter), 4.) * 1.2;
    illu *= (2. + abs(0.4 + cos(currTime * -20. + 50. * distance(uv, circleCenter)) / 1.5));

    gl_FragColor = vec4(posColor * illu * 2., illu * 2.) * v_color_mix.a;
}

我将这个项目与着色器和两个显示该问题的精灵放在一起。

ItnAAnti

据我所知,您的代码没有错。GameScene.sks如何将您的自定义着色器统一传递到着色器中,导致该着色器为0,并且动画冻结,似乎存在一个错误。

如果您在代码中而不是在UI Builder中初始化所有内容,则可以正常工作。将此粘贴到您的文件中,didMoveToView:以了解我的意思。

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:CGSizeMake(100, 100)];
sprite.position = CGPointMake(self.size.width/2, self.size.height/2);
[self addChild:sprite];
SKShader* spin2x = [SKShader shaderWithFileNamed:@"Shader2"];

spin2x.uniforms = @[
                         [SKUniform uniformWithName:@"u_speed" float:(2.0)],
                         ];
sprite.shader = spin2x;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不编译opengl着色器?

这些不匹配的着色器变量为什么不产生链接器错误?

片段着色器中所有顶点的变体,没有插值。为什么不?

为什么着色器不包括构建?

为什么我的几何着色器“过载”?

为什么必须为片段着色器设置精度?

为什么此WebGL着色器类型无效?

为什么在使用着色器时出现黑屏?

为什么OpenGL着色器无法正确编译?

为什么我的GLSL着色器呈现裂痕?

为什么在着色器中顺序很重要?

为什么阴影贴图着色器向后工作?

WebGL:是否禁止在顶点着色器和片段着色器中绑定相同的制服?

OpenGL 着色器不绘制

究竟什么是计算着色器?

每次在着色器上设置制服时,是否需要冲洗Spritebatch吗?

Vulkan; 从SPIR-V着色器获取制服和属性列表

在未使用的着色器中设置制服会影响输出

如何使用Swift将Float制服传递给iOS Metal着色器?

着色器中没有名称为“ u_proj”的制服

OpenGL-切换着色器和制服是否经常成为严重的瓶颈?

编写片段着色器:无法理解制服的定义方式

仅在Raspberry Pi上的着色器中没有名称统一的制服

为什么检查器中的着色器名称与文件名称不同?

当一个着色器被优化而另一个未优化时,为什么我的GLSL程序不链接?

带SpriteKit的着色器仅注册黑色的Alpha

为什么使用OpenGL编译顶点着色器时出现着色器编译器错误#143,#160和#216?

为什么在使用GLFW时不需要加载着色器?

为什么尽管链接和验证成功,着色器程序仍无法编译?