Как вычислить преобразование и положение SCNNode из .scn для области ARSCNView

#swift #arkit #vision #scnnode #arscnview

#swift #arkit #scnnode #apple-видение #arscnview

Вопрос:

Я не понимаю, как я могу вычислить положение SCNNode в моем ARSCNView с использованием объекта Vision. У меня есть обнаруженное лицо (VNFaceObservation) в ARSCNView, загружаю узел из файла .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 с возвращаемым прямоугольником. Этот кадр совпадает с положением грани.

После того, как я загружу узел из файла, добавьте узел в сцену.

Я пытаюсь вычислить новое положение узла в методе делегирования сеанса сцены:

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

Но я не понимаю, как я должен изменить положение SCNNode и создать новый SCNVector3. Я думаю, что я должен использовать свойства SceneView.pointOfView?.simdWorld * для вычисления смещения, когда устройство перемещается или движется человек с обнаруженным лицом. Но я не уверен, что это правильный способ

Есть идея или алгоритм для этого вычисления?