gpt4 book ai didi

swift - RealityKit – 平面检测

转载 作者:行者123 更新时间:2023-12-04 01:29:38 25 4
gpt4 key购买 nike

在与 ARKit 类似的 RealityKit 中,物体在相机检测到某种平面之前不会显示。一旦相机检测到该表面,对象将显示并固定在该表面上。

我如何(通过代码)知道相机是否检测到平面?实际上,我想突出显示可选区域,但我不确定 RealityKit 是否真的允许您这样做,我知道 SceneKit 可以。

最佳答案

有一个plane RealityKit 中的初始化器(和枚举用例)用于此目的:

convenience init(plane alignment: AnchoringComponent.Target.Alignment,
classification: AnchoringComponent.Target.Classification,
minimumBounds: SIMD2<Float>)

/* Where `minimumBounds` is the minimum size of the target plane */

它是 ARKit 的 ARPlaneAnchor 的对应物与 extent属性(这是检测到的平面的估计宽度和长度)。但在 RealityKit 中,它的工作方式有点不同。

在实际代码中,您可以这样使用它:
let anchor = AnchorEntity(.plane([.horizontal, .vertical],
classification: [.wall, .table, .floor],
minimumBounds: [0.375, 0.375]))

/* Here we create an anchor for detected planes with a minimum area of 37.5 cm2 */

anchor.addChild(semiTranparentPlaneEntity) // visualising a detected plane
arView.scene.anchors.append(anchor)

注意 alignmentclassification参数符合 OptionSet 协议(protocol)。

并且您总是可以找出平面 anchor 是否已创建:
let arView = ARView(frame: .zero)

let anchor = AnchorEntity(.plane(.any, classification: .any,
minimumBounds: [0.5, 0.5]))
anchor.name = "PlaneAnchor"


let containsOrNot = arView.scene.anchors.contains(where: {
$0.name == "PlaneAnchor"
})
print(containsOrNot)

print(arView.scene.anchors.count)
print(arView.scene.anchors.first?.anchor?.id)

关于swift - RealityKit – 平面检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61298228/

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