试图弄清楚如何解决我的着色器应用到我的ARSCNView的问题。以前,当使用标准SCNView时,我已成功地通过以下方式应用失真着色器:
if let path = Bundle.main.path(forResource: "art.scnassets/distortion", ofType: "plist") {
if let dict = NSDictionary(contentsOfFile: path) {
let technique = SCNTechnique(dictionary: dict as! [String : AnyObject])
scnView.technique = technique
}
}
用ARSCNView替换SCNView会给我以下错误:
“错误:金属渲染器不支持nil顶点函数名称”
“错误:_executeProgram - 没有管道状态”
我在想它是因为ARSCNView使用与SCNView不同的渲染器。但是记录ARSCNView.renderingAPI告诉我关于渲染器的任何信息,当我构建我的ARSCNView实例时,我似乎无法选择一个。我必须遗漏一些明显的东西,因为我在网上搜索参考资料时似乎无法找到单一资源。
我最初的想法是使用SCNProgram来应用着色器。但我找不到任何有关如何将其应用于ARSCNView的资源,或者如果它甚至是正确/可能的解决方案,SCNProgram似乎是为材料保留的。
有谁能给我任何有用的指针,如何解决ARSCNView的顶点+片段着色器?
Qazxswpoi的SCNTechnique
不适用于GLSL着色器,而是需要在ARSCNView
和metalVertexShader
键下的技术plist文件中提供Metal函数。
相反,metalFragmentShader
说着色器的任何组合都应该起作用:
您必须同时指定片段和顶点着色器,并且必须指定GLSL着色器程序,一对Metal函数或两者。如果同时指定了两者,则SceneKit将使用适合当前渲染器的任何着色器。
所以这可能是一个错误,但我想文档已经过时了。由于所有ARKit运行设备也运行Metal,因此尚未向ARSCNViews添加GLSL支持。由于iOS12对OpenGL不赞成,这看起来像是计划好的。
我在ARKit iOS11.4和12中遇到过这个问题,它归结为一系列拼错的着色器。我希望这可以帮助某人。