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