Vorrei archiviare i dati di motion capture da Kinect 2 come file BVH. Ho trovato il codice che lo fa per Kinect 1 che può essere trovato qui . Ho esaminato il codice e ho trovato diverse cose che non riuscivo a capire. Ad esempio, nel codice citato ho cercato di capire cosa sia esattamente l' skel
oggetto Skeleton , che si trova in diversi punti del codice. In caso contrario, sono disponibili applicazioni conosciute per realizzare le intenzioni?
EDIT: Ho provato a cambiare Skel Skeleton in Body skel che penso sia l'oggetto corrispondente per Kinect SDK 2.0. Tuttavia ho un errore quando provo a ottenere la posizione del corpo:
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);
Ho ricevuto errori quando ho chiamato la funzione Position for the Body skel. Come posso recuperare la X, Y, Z dello scheletro in sdk 2.0 ?? Ho provato a cambiare le tre righe precedenti in:
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);
EDIT: Fondamentalmente sono riuscito a memorizzare il file a bvh dopo aver combinato bodyBasicsWPF e kinect2bvh. Tuttavia, sembra che lo scheletro che sto conservando non sia efficiente. Ci sono strani movimenti nei gomiti. Sto cercando di capire se devo cambiare qualcosa nel file kinectSkeletonBVH.cp . Più specificamente, quali sono i cambiamenti nell'orientamento dell'asse articolare per la versione kinect 2. Come posso cambiare la seguente riga: skel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
ho provato a cambiare quella linea con skel.JointOrientations[JointType.ShoulderCenter].Orientation
. Ho ragione? Sto usando il seguente codice per aggiungere il giunto agli oggetti 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);
Non riesco a capire dove the axis for every Joint
viene calcolato il codice .