Cap*_*Fim 4 ios scenekit xcode7
该SCNShadable参考指出,在阴影修饰SceneKit可以包含自定义的全局函数。但是,由于Xcode 7对此选项的更新似乎不再起作用。甚至参考页面上的Apple示例也不再编译。根据错误消息,生成的OpenGL着色器源代码(由生成的着色器源代码)完全不存在自定义功能SceneKit。有谁知道如何解决这个新限制(或错误?)?也许需要额外的编译指示?
在SCNShadable参考上的“编写着色器修改器片段”下给出的第一个示例中可以看到该问题。要查看该错误,只需创建一个新的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]
}
Run Code Online (Sandbox Code Playgroud)
运行该程序会出现以下错误,指出自定义标识符sincos未定义:
SceneKit: error, failed to link program: ERROR: 0:191: Invalid call of undeclared identifier 'sincos'
Run Code Online (Sandbox Code Playgroud)
在错误消息中,您还可以看到SceneKit为阴影修改器生成的程序。它包含所有内容,但其定义sincos已被滤除。
您不应该将“ #pragma arguments”用于以GLSL编写的着色器修改器(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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |