gpt4 book ai didi

xcode - SpriteKit 着色器不与制服一起运行

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:50 24 4
gpt4 key购买 nike

//将其张贴以防有人遇到同样的问题。

原始问题:

将一个着色器移植到 OSX,并尝试为它提供一个制服。着色器实际上并未运行。

这是在:XCode 7.3,Swift 2。

游戏场景.swift:

var myShader = SKShader();

override func didMoveToView(view: SKView) {

//////////////////////////////////
// Create SKShader
let shaderContainer = SKSpriteNode(color: NSColor.grayColor(), size: CGSizeMake(300, 300));
shaderContainer.position = CGPointMake(self.frame.width/2, self.frame.height/2);

self.addChild(shaderContainer);

myShader = SKShader(fileNamed: "color-wheel.fsh");
let utest = SKUniform(name: "utest", float: 0.3);
myShader.addUniform(utest);

shaderContainer.shader = myShader;
}

color-wheel.fsh(着色器):

#define PI 3.14159265359
#define TWO_PI 6.28318530718

// Function from Iñigo Quiles
// https://www.shadertoy.com/view/MsS3Wc
vec3 hsb2rgb( in vec3 c ){
vec3 rgb = clamp(abs(mod(c.x*6.0+vec3(0.0,4.0,2.0), 6.0)-3.0)-1.0, 0.0, 1.0 );
rgb = rgb*rgb*(3.0-2.0*rgb);
return c.z * mix(vec3(1.0), rgb, c.y);
}

void main (void) {
vec2 st = v_tex_coord; // SPRITEKIT SPECIFIC

vec3 color = vec3(0.0);

// Using Polar Coordinates instead of Cartesian
vec2 vectorToCentre = vec2(0.5) - st;
float angle = atan(vectorToCentre.y, vectorToCentre.x); // function is atan(y,x) , not x,y
float distanceToCentre = length(vectorToCentre);
float radius = distanceToCentre * 2.0;
angle = angle + u_time*0.6 - radius*2.5;

vec3 hue = vec3(angle/TWO_PI+0.5, radius, 1.0) * vec3(1.0, 0.4, 1.0);
color = hsb2rgb(hue);

gl_FragColor = vec4(color, 1.0);
}

最佳答案

经过一些试验后发现了这一点。

解决方案:

在这种情况下(XCode 7.3),如果着色器使用制服和#defines,就会出现#defines 不能在第零行,例如;

color-wheel.fsh(着色器):

// BLANK LINE HERE
#define PI 3.14159265359
#define TWO_PI 6.28318530718

...

我想 iOS 可能也需要类似的考虑。

关于xcode - SpriteKit 着色器不与制服一起运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com