Swift ARKit: получить преобразование привязки лица относительно камеры - PullRequest
0 голосов
/ 11 апреля 2020

Моему приложению Swift ARKit требуется положение и ориентация лица относительно фронтальной камеры. Если я установлю ARConfiguration.worldAlignment = .camera, все, что мне нужно сделать, это вызвать faceAnchor.transform, который работает отлично; но мне нужно запустить по умолчанию worldAlignment = .gravity. В этом режиме я могу получить faceAnchor.transform и camera.transform, которые оба поставляются в мировых координатах. Как я могу использовать эти преобразования, чтобы получить привязку лица в координатах камеры? Я пытался умножить их вместе, а также умножить одно на обратное другого, во всех комбинациях четырех порядков, но ни один из этих результатов не работает. Я просто недостаточно хорошо понимаю матричные операции, чтобы добиться успеха здесь. Может кто-нибудь пролить свет на это для меня?

1 Ответ

1 голос
/ 26 апреля 2020

Я наконец-то понял это с помощью функций SceneKit!

    let currentFaceTransform = currentFaceAnchor!.transform

    let currentCameraTransform = frame.camera.transform

    let newFaceMatrix = SCNMatrix4.init(currentFaceTransform)

    let newCameraMatrix = SCNMatrix4.init(currentCameraTransform)
    let cameraNode = SCNNode()
    cameraNode.transform = newCameraMatrix

    let originNode = SCNNode()
    originNode.transform = SCNMatrix4Identity

    //Converts a transform from the node’s local coordinate space to that of another node.
    let transformInCameraSpace = originNode.convertTransform(newFaceMatrix, to: cameraNode)

    let faceTransformFromCamera = simd_float4x4(transformInCameraSpace)

Надеюсь, это поможет некоторым другим!

...