【问题标题】:ARKit: Occlude everything in a plane except reference imageARKit:遮挡平面中除参考图像外的所有内容
【发布时间】:2018-12-05 00:23:46
【问题描述】:

我有一个在 ARKit2 上触发体验的图像参考,我想创建一个遮挡平面来覆盖触发器周围的所有内容,但触发器本身除外。比较有代表性的是这样的(把图片放在平面下方更好看,但实际上是在同一平面上):

到目前为止,我对像这样在常规形状上进行遮挡没有任何问题:

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 元素,该元素看起来在我的触发器下方,但只有在自上而下或以小角度观察时才可见。

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

【问题讨论】:

  • 你的触发器总是矩形的吗?如果是这样,请尝试从 4 个较小的平面构建遮挡几何体,中间有一个空白空间。
  • 没有。它实际上总是循环的

标签: swift scenekit arkit


【解决方案1】:

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

您必须在此处进行选择。要么在搅拌机等 3D 建模工具中创建自定义几何体,要么通过 SCNGeometrySource 手动创建,但这很广泛,因为您需要大量三角形才能使其工作。

您可以尝试将CALayer 应用为飞机的geometry: 创建一个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 

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

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2023-03-10
    • 1970-01-01
    • 2017-11-23
    • 2019-12-07
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多