Как применить вращение глазного яблока с помощью ARKit в iOS от FaceTracking - PullRequest
0 голосов
/ 19 февраля 2020

Я использую ARKaceTrackingConfiguration от ARKit для отслеживания смешанных форм лица, а также преобразования левого и правого глаза. Я экспортирую эти данные в json и применяю эти данные к 3d-модели (которая предварительно настроила ключи формы, узлы глаза). Мне удалось применить данные формы наложения, но я был поражен тем, как применять повороты глаз. я получаю leftEyeTransform, rightEyeTransform, который является simd_float4 * 4 из FaceAnchor.

Здесь показано, как применить вращение к узлам глаза из значений преобразования. Я считаю, что для глаз достаточно применить вращение. eyeTransforms:

Метод 1:

let faceNode = SCNNode()
faceNode.simdTransform = eyeTransform
let vector = faceNode.eulerAngles
eyeLeftNode.eulerAngles = vector

Метод: 2

let faceNode = SCNNode()
faceNode.simdTransform = eyeTransform
let rotation = vector_float3(faceNode.orientation.x,faceNode.orientation.y,faceNode.orientaton.z)
let yaw = (rotation.y)
let pitch = (rotation.x)
let roll = (rotation.z)
let vector = SCNVector3(pitch, yaw, roll)

eyeLeftNode.eulerAngles = vector

Метод: 3

let simd_quatf = simd_quaternion(eyeTransform)
let vector = SCNVector3(simd_quatf.axis.x,simd_quatf.axis.y,simd_quatf.axis.z)

eyeLeftNode.eulerAngles = vector

Ни один из способов не работает , Я не могу выяснить реальную проблему о том, как вращать глазные яблоки. Подскажите, пожалуйста, как это сделать

Спасибо, Чайтанья

1 Ответ

0 голосов
/ 19 февраля 2020

Я использую следующие два расширения в своих приложениях для simd_float4x4 компонентов перевода и ориентации, если это все, что вам нужно:

extension float4x4 {
    var translation: SIMD3<Float> {
        let translation = columns.3
        return SIMD3<Float>(translation.x, translation.y, translation.z)
    }

    /**
     Factors out the orientation component of the transform.
    */
    var orientation: simd_quatf {
        return simd_quaternion(self)
    }
}
...