ARKit,用于ARSCNView的金属着色器

时间:2017-11-08 19:47:08

标签: ios swift opengl-es scenekit arkit

试图弄清楚如何解决将着色器应用到我的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解决顶点+片段着色器的有用指针吗?

2 个答案:

答案 0 :(得分:1)

$('#refine-event-txtbox').keyup

SCNTechnique不适用于GLSL着色器,而是需要在该技术的plist文件中的键ARSCNViewmetalVertexShader下提供Metal函数。

相反,documentation说着色器的任何组合都应该起作用:

  

必须同时指定片段着色器和顶点着色器,并且必须   指定GLSL着色器程序,一对Metal函数或   都。如果同时指定了两者,则SceneKit使用哪个着色器   适用于当前渲染器。

所以这可能是一个错误,但是我想文档已经过时了。由于所有运行ARKit的设备也都运行Metal,因此GLSL支持尚未添加到ARSCNViews中。 随着iOS12弃用OpenGL,这看起来像计划中的那样。

答案 1 :(得分:-1)

我在ARKit iOS11.4和12中遇到了这个问题,这归结为一系列拼写错误的着色器。我希望这可以对某人有所帮助。