Kinect 2のモーションキャプチャデータをBVHファイルとして保存したいと思います。ここで見つけることができるKinect 1のためにそうするコードを見つけました。コードを調べたところ、理解できないことがいくつか見つかりました。たとえば、前述のコードskel
では、コード内のいくつかの場所にあるSkeleton オブジェクトが実際に何であるかを理解しようとしました。そうでない場合、目的を達成するために利用できる既知のアプリケーションはありますか?
編集:私はスケルトンのスケルをボディのスケルに変更しようとしましたが、これはkinect SDK 2.0の対応するオブジェクトだと思います。しかし、体の位置を取得しようとするとエラーが発生します。
tempMotionVektor[0] = -Math.Round( skel.Position.X * 100,2);
tempMotionVektor[1] = Math.Round( skel.Position.Y * 100,2) + 120;
tempMotionVektor[2] = 300 - Math.Round( skel.Position.Z * 100,2);
Body skelの関数Positionを呼び出すときにエラーが発生しました。SDK 2.0でスケルトンのX、Y、Zを取得するにはどうすればよいですか?上記の3行を次のように変更しようとしました。
tempMotionVektor[0] = -Math.Round(skel.Joints[0].Position.X * 100, 2);
tempMotionVektor[1] = Math.Round(skel.Joints[0].Position.Y * 100, 2) + 120;
tempMotionVektor[2] = 300 - Math.Round(skel.Joints[0].Position.Z * 100, 2);
編集:基本的に、bodyBasicsWPFとkinect2bvhを組み合わせた後、bvhファイルを保存することができました。しかし、私が保存しているスケルトンは効率的ではないようです。肘に奇妙な動きがあります。kinectSkeletonBVH.cpファイルで何かを変更する必要があるかどうかを理解しようとしています。より具体的には、kinect 2バージョンのジョイント軸方向の変更は何ですか。次の行を変更するにはどうすればよいですか:でskel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
その行を変更しようとしましたskel.JointOrientations[JointType.ShoulderCenter].Orientation
。私は正しいですか?次のコードを使用して、BVHBoneオブジェクトにジョイントを追加します。
BVHBone hipCenter = new BVHBone(null, JointType.SpineBase.ToString(), 6, TransAxis.None, true);
BVHBone hipCenter2 = new BVHBone(hipCenter, "HipCenter2", 3, TransAxis.Y, false);
BVHBone spine = new BVHBone(hipCenter2, JointType.SpineMid.ToString(), 3, TransAxis.Y, true);
BVHBone shoulderCenter = new BVHBone(spine, JointType.SpineShoulder.ToString(), 3, TransAxis.Y, true);
BVHBone collarLeft = new BVHBone(shoulderCenter, "CollarLeft", 3, TransAxis.X, false);
BVHBone shoulderLeft = new BVHBone(collarLeft, JointType.ShoulderLeft.ToString(), 3, TransAxis.X, true);
BVHBone elbowLeft = new BVHBone(shoulderLeft, JointType.ElbowLeft.ToString(), 3, TransAxis.X, true);
BVHBone wristLeft = new BVHBone(elbowLeft, JointType.WristLeft.ToString(), 3, TransAxis.X, true);
BVHBone handLeft = new BVHBone(wristLeft, JointType.HandLeft.ToString(), 0, TransAxis.X, true);
BVHBone neck = new BVHBone(shoulderCenter, "Neck", 3, TransAxis.Y, false);
BVHBone head = new BVHBone(neck, JointType.Head.ToString(), 3, TransAxis.Y, true);
BVHBone headtop = new BVHBone(head, "Headtop", 0, TransAxis.None, false);
コードのどこthe axis for every Joint
が計算されるのか理解できません。