親に関連するボーンの回転を取得しようとしていますが、かなり奇妙な角度になってしまいます。
私はすべて、行列の乗算、オフセット、軸の交換、そして運がないことを試しました。
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をに設定して、 eulerAnglesSCNNode.transform
を取得して人間が読めるようにし、何が起こっているのかを理解しようとします。
私はいくつかの関節を動かすことができますが、それは純粋な偶然か運だと思います.残りの骨は非常に奇妙に回転します.
他の試みでは、 jointModelTransforms (Local ではなく Model) を使用してそれらを取得し、すべての変換が Skeleton の Root ボーンに関連するようにします。
このアプローチでは、次のような行列乗算を行います。
LocalMatrix = Inverse(JointModelMatrix) * (ParentJointModelMatrix)
親に相対的な回転を取得するには、同じ状況で、一部のボーンは正常に回転し、他のボーンは奇妙に回転します。まったくの偶然でしょう。
ボーンの回転を取得する必要があるのはなぜですか?
Blender に回転を渡す携帯電話で MoCap アプリを構築しようとしています。これから .BVH ファイルを構築しようとしているので、Blender で使用できます。
これは私自身のリグです:
Kinectでこれをやったことがありますが、ARKit 3で何日もやろうとしましたが、うまくいきませんでした:(