有人可以就如何使用精灵工具包中shadertoy网站的代码提供一些指导吗?这适用于.fsh文件中的其他着色器,但我似乎无法从shadertoy获取任何代码。我使用.sks文件将我的SpriteNode添加到场景中。我使用界面构建器中的SKNode Inspector将自定义着色器应用于SpriteNode。
答案 0 :(得分:6)
我已经设法从shadertoy网站上获得一些着色器以使用Sprite Kit。
首先,在您看到的着色器中:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
将其更改为:
void main ()
通常,您需要更改这些变量的名称:
iGlobalTime
至u_time
fragColor
至gl_FragColor
fragCoord
至gl_FragCoord
iResolution
至u_sprite_size
但在iOS9中,u_sprite_size
已被破坏。我一直在通过创建自己的制服&将其称为c_sprite_size
并在检查器中设置sks文件中的值。
SpriteKit制服的清单在这里:
全局变量似乎在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;
^
我能够以这种方式修复一些着色器。