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