ARKit,用于ARSCNView的金属着色器

问题描述 投票:3回答:2

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

ios swift opengl-es scenekit arkit
2个回答
1
投票

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

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

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

所以这可能是一个错误,但我想文档已经过时了。由于所有ARKit运行设备也运行Metal,因此尚未向ARSCNViews添加GLSL支持。由于iOS12对OpenGL不赞成,这看起来像是计划好的。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.