gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:33:25 25 4
gpt4 key购买 nike

SCNShadable Reference声明 SceneKit 中的阴影修饰符可能包含自定义全局函数。但是,自从更新到 Xcode 7 后,此选项似乎不再有效。甚至引用页中的 Apple 示例也不再编译。根据错误消息,生成的 OpenGL 着色器源代码中根本没有自定义函数,它是由 SceneKit 生成的。有谁知道如何解决这个新限制(或错误?)?也许需要额外的编译指示?

问题可以在 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 定义以外的所有内容,后者已被以某种方式过滤掉。

最佳答案

您不应该对用 GLSL 编写的着色器修改器使用“#pragma arguments”(SCNShadable.h header 中的文档指定它仅适用于金属着色器)。所以这会起作用:

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;

关于ios - SceneKit:Shademodifier 忽略 Xcode 7 中的自定义全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946356/

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