如何在ARKit中使用SCNNode过滤器?

3
我正在尝试实现一个自定义的CIFilter来与我的ARSCNView中的SCNNode一起使用。不幸的是,它只会在节点应该出现在屏幕上的位置创建一个灰色矩形。我还尝试了内置的CIFilters来检查我的代码,但没有成功。
在其他一些SO帖子上,我读到CIFilter仅在选择OpenGL作为SCNView的渲染API时才起作用,因为CoreImage与Metal不兼容,并且据我所知,无法让ARSCNView在OpenGL下运行。该帖子发布于2016年,因此我想知道是否有任何变化。
我尝试实现的是在屏幕上勾画/突出显示对象以向用户反馈对象选择。通过添加着色器修改器,我已经实现了可用的东西,但它对着色控制有限。我真的不想接管所有的着色工作。
以下是我用于轮廓绘制的CIKernel,在Quartz Composer上效果非常好。
非常感谢您的帮助和信息。
kernel vec4 outline(sampler src) {
  vec2 texturePos = destCoord();
  float alpha = 4.0f * sample(src, texturePos).a;
  float thickness = 5.0f;

  alpha -= sample(src, texturePos + vec2(thickness, 0.0f)).a;
  alpha -= sample(src, texturePos + vec2(-thickness, 0.0f)).a;
  alpha -= sample(src, texturePos + vec2(0.0f, thickness)).a;
  alpha -= sample(src, texturePos + vec2(0.0f, -thickness)).a;

  if (alpha > 0.9f) {
      vec4 resultCol = vec4(1.0f, 1.0f, 1.0f, alpha);
      return resultCol;
  }else{
      vec4 resultCol = sample(src, texturePos);
      return resultCol;
  }
}

这个有进展了吗? - omarojo
你解决了吗? - Roi Mulia
1个回答

3

我也遇到了类似的问题。原因是我们做了以下设置。通过删除这个设置,可以实现CIFilter。我没有分析细节,但如果有帮助就好了!

sceneView.antialiasingMode = .multisampling4X
sceneView.contentScaleFactor = 1.3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接