SCNShadable Reference指出SceneKit
中的某个遮罩修改器可能包含自定义全局函数。但是,自更新至Xcode 7
后,此选项似乎不再适用。即使参考页面的Apple示例也不再编译。根据错误消息,自定义函数根本不存在于由SceneKit
生成的OpenGL
着色器源代码中。 有谁知道这个新的限制(或错误?)可以如何解决?也许需要额外的编译指示?SceneKit:Shademodifier忽略Xcode 7中的自定义全局函数
在“Writing a Shader Modifier Snippet”下的SCNShadable Reference上给出的第一个示例中可以看到问题。 要看到错误,只需创建一个新Xcode
“游戏”项目,并在GameViewController.viewDidLoad()
末粘贴以下代码:
let fragmentShader =
"// 1. Custom variable declarations (optional)\n" +
"// For Metal, a pragma directive and one custom variable on each line:\n" +
"#pragma arguments\n" +
"float intensity;\n" +
"// For OpenGL, a separate uniform declaration for each custom variable\n" +
"uniform float intensity;\n" +
"\n" +
"// 2. Custom global functions (optional)\n" +
"vec2 sincos(float t) { return vec2(sin(t), cos(t)); }\n" +
"\n" +
"// 3. Pragma directives (optional)\n" +
"#pragma transparent\n" +
"#pragma body\n" +
"\n" +
"// 4. Code snippet\n" +
"_geometry.position.xy = sincos(u_time);\n"
"_geometry.position.z = intensity;\n"
if let material = ship.childNodes.first?.geometry?.materials.first {
material.shaderModifiers = [SCNShaderModifierEntryPointGeometry: fragmentShader]
}
运行的程序提供了以下错误,指出自定义标识sincos
未定义:
SceneKit: error, failed to link program: ERROR: 0:191: Invalid call of undeclared identifier 'sincos'
在错误消息中,您还可以看到SceneKit为阴影修饰符生成的程序。它包含所有内容,但已被过滤掉的sincos
的定义。
也许显示您正在使用的代码和您提到的具体Apple示例。 –
谢谢,提示,@我将会。我已经编辑了我的问题。 –
很少有人在野外使用SceneKit。 Apple内部似乎没有人使用它。因此你对样品的问题。基本测试没有完成,更不用说文档更新了。苹果公司及其员工对其内部的系统问题没有任何交流。这导致几乎没有人认真对待它。或许最好把苹果的游戏框架看作是一个慢慢发展的创意糖果,朝着一个未来的方向发展,这个糖果能够为苹果公司提供资金支持,并为他们选择游戏开发商,让他们慢慢成为游戏内容的制作者。 – Confused