Kinect 2'den hareket yakalama verilerini BVH dosyası olarak saklamak istiyorum. Burada bulunan Kinect 1 için bunu yapan bir kod buldum . Koddan geçtim ve anlayamadığım birkaç şey buldum. Örneğin, bahsi geçen kodda skel
, kodun çeşitli yerlerinde bulunan Skeleton nesnesinin tam olarak ne olduğunu anlamaya çalıştım . Değilse, amaçlananı gerçekleştirmek için bilinen herhangi bir uygulama var mı?
DÜZENLEME: Kinect SDK 2.0 için uygun nesne olduğunu düşündüğüm İskelet iskeletini Vücut iskeletine değiştirmeye çalıştım. Ancak vücudun pozisyonunu almaya çalıştığımda bir hata var:
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);
Vücut iskeleti için Pozisyon fonksiyonunu çağırırken hatalar aldım. SDK 2.0 iskeletin X, Y, Z nasıl alabilirim? Yukarıdaki üç satırı şu şekilde değiştirmeye çalıştım:
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: Temelde bodyBasicsWPF ve kinect2bvh birleştirdikten sonra bvh dosyasını depolamayı başardı. Ancak, depoladığım iskeletin etkili olmadığı anlaşılıyor. Dirseklerde garip hareketler var. KinectSkeletonBVH.cp dosyasındaki bir şeyi değiştirmem gerekip gerekmediğini anlamaya çalışıyorum . Daha spesifik olarak, kinect 2 versiyonu için eklem ekseni yönündeki değişiklikler nelerdir. Aşağıdaki satırı nasıl değiştirebilirim: skel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
Bu satırı ile değiştirmeye çalıştım skel.JointOrientations[JointType.ShoulderCenter].Orientation
. Haklı mıyım? BVHBone nesnelerine eklem eklemek için aşağıdaki kodu kullanıyorum:
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);
Kodun nerede the axis for every Joint
hesaplandığını anlayamıyorum .