在RealityKit中,与ARKit类似,只有在相机检测到某种平整表面后,物体才会显示出来并固定在其上。
我该如何(通过代码)知道相机是否已经检测到了平坦表面?实际上,我想突出可选择区域,但我不确定RealityKit是否允许这样做,不过我知道SceneKit可以。
在RealityKit中,与ARKit类似,只有在相机检测到某种平整表面后,物体才会显示出来并固定在其上。
我该如何(通过代码)知道相机是否已经检测到了平坦表面?实际上,我想突出可选择区域,但我不确定RealityKit是否允许这样做,不过我知道SceneKit可以。
在RealityKit中有一个针对此目的的plane
初始化器(和枚举情况):
convenience init(plane alignment: AnchoringComponent.Target.Alignment,
classification: AnchoringComponent.Target.Classification,
minimumBounds: SIMD2<Float>)
/* Where `minimumBounds` is the minimum size of the target plane */
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)
注意,alignment
和classification
参数符合OptionSet协议。
您始终可以找出平面锚点是否已经创建:
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)
semiTranparentPlaneEntity
。我正在寻找像这样的行为:https://developer.apple.com/documentation/arkit/world_tracking/tracking_and_visualizing_planes。我已经发现我可以在`session(_ session: ARSession, didUpdate anchors: [ARAnchor])`函数中跟踪表面几何变化。 - Hrabovskyi OleksandrSceneEvents.Update
来持续检测吗? - AnupamChugh