#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 * для вычисления смещения, когда устройство перемещается или движется человек с обнаруженным лицом. Но я не уверен, что это правильный способ
Есть идея или алгоритм для этого вычисления?