Kinect 2의 모션 캡처 데이터를 BVH 파일로 저장하고 싶습니다. Kinect 1에 대한 코드를 찾았 습니다 . 코드를 살펴본 결과 이해할 수없는 몇 가지 사항을 발견했습니다. 예를 들어, 언급 된 코드 skel
에서 코드의 여러 위치에서 실제로 실제로 Skeleton 객체가 무엇인지 이해하려고 노력했습니다 . 그렇지 않다면, 의도 된 목적을 달성하기 위해 알려진 응용 프로그램이 있습니까?
편집 : 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);
Body skel의 Position 함수를 호출 할 때 오류가 발생했습니다. SDK 2.0에서 골격의 X, Y, Z를 어떻게 검색합니까? 위의 세 줄을 다음과 같이 변경하려고했습니다.
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
가 계산 되는 위치를 이해할 수 없습니다 .