Как применить вращение глазного яблока с помощью ARKit в iOS из FaceTracking
Я использую ARFaceTrackingConfiguration от ARKit для отслеживания форм наложения лица вместе с преобразованиями левого и правого глаза. Я экспортирую эти данные в json и применяю эти данные к 3D-модели (в которой предварительно настроены ключи формы, узлы глаз). Я смог применить данные формы наложения, но меня поразило, как применить вращение глаз. я получаю left Eye Transform, right Eye Transform, который является 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 ответ
Я использую следующие два расширения в своих приложениях для 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)
}
}