swift - ARKit:遮挡平面上除引用图像之外的所有内容

标签 swift scenekit arkit

我有一个图像引用正在触发 ARKit2 上的体验,并且我想创建一个遮挡平面来覆盖触发器周围的所有内容(触发器本身除外)。代表性的,是这样的(将图像放在平面下方以便更好地显示,但实际上是在同一水平面上):

Need to create the occlusion plane shown on the top

到目前为止,我对在常规形状上进行遮挡没有任何问题,如下所示:

func setOcclusionMaterial() {

    let occlusionPlane = SCNPlane(width: imageReference!.physicalSize.width, height: imageReference!.physicalSize.height)

    let holdout = SCNMaterial()
    holdout.isDoubleSided = true
    holdout.diffuse.contents = CIColor.black
    holdout.colorBufferWriteMask = SCNColorMask(rawValue: 0)
    occlusionPlane.firstMaterial? = holdout

    let occlusionNode = SCNNode()
    occlusionNode.eulerAngles.x = -.pi / 2
    occlusionNode.geometry = occlusionPlane
    node!.addChildNode(occlusionNode)

}

但是,我不确定如何创建一个排除图像区域(圆形)的平面。

我想要做的是放置一个 3D 元素,该元素看起来位于我的触发器下方,但只有在自上而下或以微小角度查看时才可见。

希望这足够清楚,如果您有任何想法,感谢您的帮助。

最佳答案

您的代码不会为我呈现遮挡,至少在我快速拼凑起来的 Playground 中不会。如果我的答案不能真正解决您的问题,也许您可​​以创建一个。

您必须在此处进行选择。使用 blender 等 3D 建模工具或通过 SCNGeometrySource 手动创建自定义几何体但这是很广泛的,因为你需要很多三角形才能使其工作。

您可以尝试应用CALayer作为平面的几何: 创建一个 CGPath,它是带有圆形切口(或任何您想要的形式)的矩形,并从该路径创建一个 CAShapeLayer

var path = CGMutablePath()

path.addRect(CGRect(x: 0, y: 0, width: 100, height: 100))
path.addEllipse(in: CGRect(x: 25, y: 25, width: 50, height: 50))

let layer = CAShapeLayer()
layer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
layer.path = path
layer.fillColor = UIColor.white.cgColor
layer.fillRule = .evenOdd 

我无法确认这是否真的有效,因为你的遮挡对我来说不太有效。

关于swift - ARKit:遮挡平面上除引用图像之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603125/

相关文章:

swift - 如何放置一个始终看着相机的 RealityKit 实体?

swift - 如何仅在 SceneKit 中的球体的一部分应用菲涅耳效果?

iOS Swift Paypal 集成崩溃并出现 NSInvalidArgumentException 应用程序尝试在目标上呈现 nil 模态视图 Controller

ios - 在 itunesConnect 中,我的应用程序显示 Apple Pay 选项,我正在使用 Braintree。如何摆脱在我的 itunesConnect 中显示 Apple Pay 选项?

ios - 从这里抛出的错误不会在 swift 2 xcode 7 中处理

ios - 在不阻塞主线程的情况下向 SceneKit SCNScene 添加多个节点

iOS XCode 突然控制台垃圾邮件 : [default] IOConnectCallMethod (kIOHIDEventServiceFastPathUserClientCopyEvent): 0xe00002f0 (copySpec = (null))

xcode - 'Class.Type' 没有名为 'variable' 的成员错误只是缺少类变量支持?

swift - ARKit – 如何在 ARSession 中加载 GIF 动画?

swift - 将阴影转换到 ARKit 中的 SCNNode