Я пытаюсь связать повороты костей с их родителями, но в итоге получаю довольно странные углы.
Я перепробовал все, умножения матриц, смещения, смена осей и не повезло.
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, но безуспешно: (