2

我不明白如何使用 Vision 对象计算 ARSCNView 上的 SCNNode 位置。我在 ARSCNView 中检测到人脸 (VNFaceObservation),从 .scn 文件加载节点。我希望那个节点随着面部位置移动。

我用方法计算人脸边界框的二维位置:

private func faceFrameFrom(_ box: CGRect) -> CGRect {
    let origin = CGPoint(x: box.minX * sceneView.bounds.width, y: (1 - box.maxY) * sceneView.bounds.height)
    let size = CGSize(width: box.width * sceneView.bounds.width, height: box.height * sceneView.bounds.height)

    return CGRect(origin: origin, size: size)
}

并将 UIView 显示为带有返回矩形的场景视图子视图。它与面部位置相匹配。

从文件加载节点后,将节点添加到场景。

我尝试在场景会话委托的方法中计算节点的新位置:

func session(_ session: ARSession, didUpdate frame: ARFrame) 

但我不明白我应该如何修改 SCNNode 位置并创建新的 SCNVector3。我认为,当设备移动或检测到人脸移动时,我应该使用 sceneView.pointOfView?.simdWorld* 属性来计算偏移量。但我不确定这是真的方式

这个计算的任何想法或算法?

4

0 回答 0