Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SceneKit:Shademodifier忽略Xcode 7中的自定义全局函数_Ios_Xcode7_Scenekit - Fatal编程技术网

Ios SceneKit:Shademodifier忽略Xcode 7中的自定义全局函数

Ios SceneKit:Shademodifier忽略Xcode 7中的自定义全局函数,ios,xcode7,scenekit,Ios,Xcode7,Scenekit,声明SceneKit中的着色修改器可能包含自定义全局函数。但是,由于对Xcode 7的更新,此选项似乎不再起作用。甚至参考页面中的苹果示例也不再编译。根据错误消息,生成的OpenGL着色器源代码中没有自定义函数,该源代码由SceneKit生成。 有人知道如何解决这个新的限制(或bug?)吗?也许需要一个额外的pragma 在“编写着色器修改器代码段”下给出的第一个示例中可以看到该问题。 要查看错误,只需创建一个新的Xcode“game”项目,并将以下代码粘贴到GameViewController

声明
SceneKit
中的着色修改器可能包含自定义全局函数。但是,由于对
Xcode 7
的更新,此选项似乎不再起作用。甚至参考页面中的苹果示例也不再编译。根据错误消息,生成的
OpenGL
着色器源代码中没有自定义函数,该源代码由
SceneKit
生成。 有人知道如何解决这个新的限制(或bug?)吗?也许需要一个额外的pragma

在“编写着色器修改器代码段”下给出的第一个示例中可以看到该问题。 要查看错误,只需创建一个新的
Xcode
“game”项目,并将以下代码粘贴到
GameViewController.viewDidLoad()的末尾:

运行该程序会出现以下错误,说明自定义标识符
sincos
未定义:

SceneKit: error, failed to link program: ERROR: 0:191: Invalid call of undeclared identifier 'sincos'
在错误消息中,您还可以看到SceneKit为“着色”修改器生成的程序。它包含除已被过滤掉的
sincos
定义之外的所有内容。

对于用GLSL编写的着色器修改器,不应使用“#pragma参数”(SCNShadable.h标题中的文档指定它仅用于金属着色器)。 因此,这将起作用:

uniform float intensity;

// Custom global functions (optional)
vec2 sincos(float t) { return vec2(sin(t), cos(t)); }

// Pragma directives (optional)
#pragma transparent
#pragma body

//  Code snippet
_geometry.position.xy = sincos(u_time);
_geometry.position.z = intensity;

可能会显示您正在使用的代码和您提到的特定苹果示例。谢谢您的提示,@I'L'L。我对我的问题进行了相应的编辑。很少有人在野外使用SceneKit。似乎苹果内部没有人使用它。因此,您对样本存在问题。基本测试还没有完成,更不用说文档更新了。苹果公司及其员工对其内部的系统性问题没有任何沟通。这导致几乎没有人认真对待它。也许最好把苹果的游戏框架想象成一个缓慢发展的思想糖浆,走向一个由苹果出资并与苹果签订契约的未来,让他们慢慢成为游戏内容制作者的游戏开发者可以选择。2年后,我也有同样的问题。关于苹果是否会修复它的任何线索?我们如何在shaders.metal文件中为metal kit声明u_时间?
uniform float intensity;

// Custom global functions (optional)
vec2 sincos(float t) { return vec2(sin(t), cos(t)); }

// Pragma directives (optional)
#pragma transparent
#pragma body

//  Code snippet
_geometry.position.xy = sincos(u_time);
_geometry.position.z = intensity;