Я б хотів зберігати дані захоплення руху від Kinect 2 як файл BVH. Я знайшов код, який робить це для Kinect 1, який можна знайти тут . Я переглянув код і знайшов кілька речей, які я не зміг зрозуміти. Наприклад, у згаданому коді я намагався зрозуміти, що саме є skel
об'єктом Скелет , знайденим у кількох місцях у коді. Якщо ні, чи є якась відома програма для досягнення наміченого?
EDIT: Я намагався змінити Skeleton skel на Body skel, що, на мою думку, є відповідним об'єктом для 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);
У мене виникли помилки під час виклику функції Позиція для тіла. Як я можу отримати X, Y, Z скелета в sdk 2.0 ?? Я намагався змінити вищевказані три рядки на:
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: В основному мені вдалося зберегти файл bvh після поєднання bodyBasicsWPF і kinect2bvh. Однак здається, що скелет, який я зберігаю, не є ефективним. У ліктях спостерігаються дивні рухи. Я намагаюся зрозуміти, чи потрібно щось змінювати у файлі 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
обчислюється код .