gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:59:11 24 4
gpt4 key购买 nike

我有一个图像引用正在触发 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com