如何从.scn计算ARSCNView区域的SCNNode的变换和位置

时间:2019-03-28 12:53:01

标签: swift arkit vision scnnode arscnview

我不理解如何使用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显示为带有返回的rect的sceneView子视图。它与脸部位置相符。

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

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

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

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

此计算有任何想法或算法吗?

0 个答案:

没有答案