在 ARKit 3 中从 3D 骨架检索骨骼旋转

Car*_*s C 7 swift arkit ios13 realitykit

我试图获得与他们父母相关的骨骼旋转,但我最终得到了非常奇怪的角度。

我已经尝试了所有方法,矩阵乘法、偏移、轴交换,但没有运气。

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
}
Run Code Online (Sandbox Code Playgroud)

//RETRIEVE ANGLES HERE我尝试过不同的方法:

let n = SCNNode()
n.transform = SCNMatrix4(jointTransform)
print(n.eulerAngles)
Run Code Online (Sandbox Code Playgroud)

在这次尝试中,我将JointTransformation设置为 a,SCNNode.transform以便我可以检索eulerAngles以使它们具有人类可读性并尝试了解发生了什么。

我开始工作一些关节,但我认为这纯粹是巧合或运气,因为其余的骨骼旋转非常奇怪。

在其他尝试中,我使用jointModelTransforms(模型,而不是本地)来获取它们,因此所有变换都相对于骨架的根骨骼。

用这种方法我做矩阵乘法是这样的:

LocalMatrix = Inverse(JointModelMatrix) * (ParentJointModelMatrix)
Run Code Online (Sandbox Code Playgroud)

为了获得相对于其父级的旋转,但同样的情况,一些骨骼旋转正常,其他旋转很奇怪。我敢打赌纯属巧合。

为什么我想要获得骨骼旋转?

我正在尝试使用我的手机构建一个 MoCap 应用程序,该应用程序将旋转传递给 Blender,尝试从中构建 .BVH 文件,以便我可以在 Blender 上使用它们。

这是我自己的装备:

我以前用 Kinect 做过这件事,但我已经尝试了好几天在 ARKit 3 上做到这一点,但没有运气:(

小智 0

只是猜测\xe2\x80\xa6 这能完成这项工作吗?

\n\n
  let skeleton = bodyAnchor.skeleton\n  let jointTransforms = skeleton.jointLocalTransforms\n\n  for (i, jointTransform) in jointTransforms.enumerated() {\n    print(Transform(matrix: jointTransform).rotation)\n  }\n
Run Code Online (Sandbox Code Playgroud)\n