gpt4 book ai didi

ios - 绘制一条 SKShapeNode 线 color-gradient 从一种颜色到另一种颜色

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:16 24 4
gpt4 key购买 nike

我正在为 iPad 和 iOS 10 编写应用程序。我正在使用 Objective-C 和 SpriteKit。

我需要绘制一条以一种颜色开始并以另一种颜色结束的线(例如,红色到绿色)。

这是我的 Objective-C 代码:

CGPoint points[2];
points[0] = CGPointMake(100, 100);
points[1] = CGPointMake(160, 110);

SKShapeNode *line1=[SKShapeNode shapeNodeWithPoints:points count:2];
line1.lineWidth = 2.0;
line1.zPosition = -1;
line1.name=@"line";
SKShader *myShader=[SKShader shaderWithFileNamed:@"shader1.fsh"];
line1.strokeShader=myShader;
[self addChild:line1];

这是着色器:

void main(){

float length = u_path_length;
float distance = v_path_distance;


gl_FragColor = vec4(1.0*(1-(distance/length)), 1.0*(distance/length), 0., 1.);
}

当我运行应用程序时出现错误(与 Metal 相关):断言“u_path_length[0] 的索引 1 处缺少缓冲区绑定(bind)”失败。

看起来 u_path_length 和 v_path_distance 在 iOS 10 中不起作用。

你能帮忙解决这个问题吗?或者您可以针对该问题提出不同的解决方案吗?

最佳答案

如果我在 Info.plist 文件中添加 bool 值为 YES 的 PrefersOpenGL 键,错误(与 Metal 相关)就会消失。当然这意味着我的 App 不会使用 Metal。我想这是 iOS 10 中的一个错误。

我遇到了另一个问题:v_path_distance 按预期工作,但 u_path_length 没有。u_path_length 始终为 0。

为了解决这个问题,我不得不修改我的代码。

这是我的 Objective-C 代码:

CGPoint points[2]; 
points[0] = CGPointMake(100, 100);
points[1] = CGPointMake(160, 110);

SKShapeNode *line1=[SKShapeNode shapeNodeWithPoints:points count:2];
line1.lineWidth = 2.0;
line1.zPosition = -1;
line1.name=@"line";
SKShader *myShader=[SKShader shaderWithFileNamed:@"shader1.fsh"];
float my_length=hypotf(points[1].x-points[0].x, points[1].y-points[0].y);
myShader.uniforms=@[[SKUniform uniformWithName:@"u_my_length" float:my_length]];
line1.strokeShader=myShader;
[self addChild:line1];

这是着色器:

void main(){    

gl_FragColor=vec4(1.0*(1.0-(v_path_distance/u_my_length)),1.0*(v_path_distance/u_my_length),0.,1.0);

}

关于ios - 绘制一条 SKShapeNode 线 color-gradient 从一种颜色到另一种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440170/

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