我试图获得与他们父母相关的骨骼旋转,但我最终得到了非常奇怪的角度。
我已经尝试了一切,矩阵乘法,偏移量,轴交换,但没有运气。
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设置为a SCNNode.transform
,这样我就可以检索eulerAngles以使其易于阅读并尝试了解正在发生的事情。
我开始锻炼一些关节,但我认为这纯属巧合或运气,因为其余的骨头旋转得很奇怪。
在其他尝试中,我使用jointModelTransforms(模型,而不是本地)来获取它们,因此所有变换都相对于骨架的根骨骼。
使用这种方法,我可以像这样进行矩阵乘法:
LocalMatrix = Inverse(JointModelMatrix) * (ParentJointModelMatrix)
为了获得相对于其父项的旋转,但在相同的情况下,一些骨骼旋转正常,而另一些旋转奇怪。我敢打赌纯属巧合。
为什么我要获得骨骼旋转?
我正在尝试用我的手机构建一个 MoCap 应用程序,将旋转传递给 Blender,尝试从中构建 .BVH 文件,这样我就可以在 Blender 上使用它们。
这是我自己的装备:
我以前用 Kinect 做过这个,但是我已经尝试了好几天在 ARKit 3 上做这个,但没有运气:(