ShaderToy与SpriteKit?

时间:2015-09-06 03:48:28

标签: objective-c xcode6 sprite-kit shader

有人可以就如何使用精灵工具包中shadertoy网站的代码提供一些指导吗?这适用于.fsh文件中的其他着色器,但我似乎无法从shadertoy获取任何代码。我使用.sks文件将我的SpriteNode添加到场景中。我使用界面构建器中的SKNode Inspector将自定义着色器应用于SpriteNode。

1 个答案:

答案 0 :(得分:6)

我已经设法从shadertoy网站上获得一些着色器以使用Sprite Kit。

首先,在您看到的着色器中:

void mainImage( out vec4 fragColor, in vec2 fragCoord )

将其更改为:

void main ()

通常,您需要更改这些变量的名称:

iGlobalTimeu_time

fragColorgl_FragColor

fragCoordgl_FragCoord

iResolutionu_sprite_size

但在iOS9中,u_sprite_size已被破坏。我一直在通过创建自己的制服&将其称为c_sprite_size并在检查器中设置sks文件中的值。

SpriteKit制服的清单在这里:

SKShader Class Reference

全局变量似乎在fsh文件中效果不佳;在少数情况下,我不得不更改代码以将变量值作为函数参数传递;我对着色器编程很新;可能还有其他一些东西让这个变量被声明为统一的&变化等。

我遇到了一些不在模拟器或Sprite Kit场景编辑器中工作但不会在设备上工作的着色器。我一直在使用带有iOS 9.2的iPhone 6s。

最后,值得注意的是,当您在iDevice上运行应用程序时,着色器编译错误将显示在调试控制台中。 E.g。


Jet: Error Domain=MTLLibraryErrorDomain Code=3 "Compilation failed: 

program_source:6:1: error: unknown type name 'precision' precision mediump float; ^ program_source:6:19: error: expected unqualified-id precision mediump float; ^ program_source:8:1: error: unknown type name 'varying' varying vec2 position; ^ program_source:8:13: error: expected ';' after top level declarator varying vec2 position; ^

我能够以这种方式修复一些着色器。