Восстановление вращения кости из 3D Skeleton в ARKit 3 - PullRequest
2 голосов
/ 23 сентября 2019

Я пытаюсь связать повороты костей с их родителями, но в итоге получаю довольно странные углы.

Я перепробовал все, умножения матриц, смещения, смена осей и не повезло.

guard let bodyAnchor = anchor as? ARBodyAnchor else { continue }

let skeleton = bodyAnchor.skeleton
let jointTransforms = skeleton.jointLocalTransforms

for (i, jointTransform) in jointTransforms.enumerated() {

    //RETRIEVE ANGLES HERE
}

В //RETRIEVE ANGLES HERE я пробовал разные подходы:

let n = SCNNode()
n.transform = SCNMatrix4(jointTransform)
print(n.eulerAngles)

В этой попытке я установил jointTransformation равным SCNNode.transform, поэтому яЯ могу получить eulerAngles , чтобы сделать их читаемыми человеком и попытаться понять, что происходит.

Я получаю работу над некоторыми суставами, но я думаю, что это чистое совпадение или удача, потому что остальные костиповернуть очень странно.

В другой попытке я получаю их с помощью jointModelTransforms (модель, а не локальная), поэтому все преобразования относятся к корневой кости скелета.

При таком подходе я делаю матричные умножения следующим образом:

LocalMatrix = Inverse(JointModelMatrix) * (ParentJointModelMatrix)

Чтобы получить повороты относительно своего родителя, но в той же ситуации, некоторые кости вращаются хорошо, другие вращаются странно.Бьюсь об заклад, чистое совпадение.

Почему я хочу получить вращение костей?

Я пытаюсь создать приложение MoCap с моим телефоном, который передает вращения Blender, пытаясь построить файлы .BVH из этого, чтобы я мог использовать их в Blender.

Это моя собственная установка:

Я делал это раньше с Kinect, но несколько дней пытался сделать это на ARKit 3, но безуспешно: (

...