Как рассчитать преобразование и положение SCNNode из .scn для области ARSCNView - PullRequest
1 голос
/ 28 марта 2019

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

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

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

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

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

Любая идея или алгоритм для этого расчета?

...