ARKit 3 中的 ARBodyAnchor 的关节顺序是根据人体骨骼的标准顺序定义的。以下是关节顺序的标准列表:
你可以使用以下代码示例来获取 ARBodyAnchor 的关节转换矩阵(jointsLocalTransforms 或 jointsModelTransforms):
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let bodyAnchor = anchor as? ARBodyAnchor else { return }
// 获取关节转换矩阵
let jointTransforms = bodyAnchor.skeleton.jointModelTransforms
// 输出关节转换矩阵(model space)
for (index, jointTransform) in jointTransforms.enumerated() {
let jointName = bodyAnchor.skeleton.jointNames[index]
print("\(jointName): \(jointTransform)")
}
}
在上面的代码中,我们首先检查 anchor 是否为 ARBodyAnchor,然后获取关节转换矩阵 jointModelTransforms。接下来,我们使用循环遍历 jointTransforms 数组,并输出每个关节的名称和转换矩阵。
请注意,在 ARKit 3 中,我们可以使用 jointsLocalTransforms 或 jointsModelTransforms 属性来获取关节的转换矩阵。jointsLocalTransforms 是相对于 ARBodyAnchor 的局部坐标系计算的,而 jointsModelTransforms 是相对于世界坐标系(SceneKit 中的根节点)计算的。
希望这可以帮助到你!