2

Vision オブジェクトを使用して ARSCNView で SCNNode の位置を計算する方法がわかりません。ARSCNView で検出された顔 (VNFaceObservation) があり、.scn ファイルからノードをロードします。そして、そのノードが顔の位置で動いていたらいいのにと思います。

メソッドを使用して、面バウンディング ボックスの 2D 位置を計算します。

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をsceneViewサブビューとして表示し、rectを返します。顔の位置に合わせたフレームです。

ファイルからノードをロードした後、ノードをシーンに追加します。

シーン セッション デリゲートのメソッドでノードの新しい位置を計算してみます。

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

しかし、SCNNode の位置を変更して新しい SCNVector3 を作成する方法がわかりません。デバイスが動いているとき、または顔が検出された人間が動いているときに、オフセットを計算するために SceneView.pointOfView?.simdWorld* プロパティを使用する必要があると思います。しかし、それが本当の方法であるかどうかはわかりません

この計算のためのアイデアやアルゴリズムはありますか?

4

0 に答える 0