나는 항상 Kinect를 마주 보도록 사용자의 스켈레톤을 변환하고 회전시켜야하는 Kinect에서 프로젝트를 만들고 있습니다.Kinect SDK를 사용하여 SkeletonPoint의 값을 colorImage에 매핑하기 전에 어떻게 변환합니까?
나는 스켈레톤의 실제 값을 변경할 수 없다는 것을 알고 있으므로 littleGuy라는 아바타 해골을 만들었습니다. littleGuy는 각 요소에 각각 할당 된 실제 해골의 모든 해골 점을 갖는 해골 점의 배열입니다.
모든 조작은 littleGuy 해골에 일어난 다음 transguy (번역 된 사람)라는 다른 해골에 저장됩니다. 문제는 transGuy의 값을 편집 한 다음 colorImage에 매핑하려고 할 때마다 오버플로가 발생하고 골격이 렌더링되지 않습니다.
아래 코드에서 littleGuy [0]에 센터 힙을 지정하고 나서 모든 번역이이 centerHip을 기반으로하므로 -CHip가되도록 오프셋을 선택합니다. 그런 다음 transGuy 오프셋을 추가하십시오.
if (joint.JointType == JointType.HipCenter)
{
littleguy_chip = skeleton.Joints[JointType.HipCenter].Position;
littleGuy[0] = littleguy_chip;
TransValue.X = -littleguy_chip.X;
TransValue.Y = -littleguy_chip.Y;
TransValue.Z = -littleguy_chip.Z;
transGuy[0] = littleGuy[0];
transGuy[0].X = littleGuy[0].X + TransValue.X;
transGuy[0].Y = littleGuy[0].Y + TransValue.Y;
transGuy[0].Z = littleGuy[0].Z + TransValue.Z;
prevPositions[0] = joint.Position;
}
그 후, 나는 transGuy 루핑 및 골격에 값을 매핑하여 각 관절을 그립니다,하지만 난 항상 가치를 정말 그들을 매핑하기 전에 포인트를 조작해야 2147483648
for (int j = 0; j < transGuy.Length; j++)
{
if ((transGuy[i] == littleguy_head && transGuy[j] == littleguy_cshoulder)
|| (transGuy[i] == littleguy_cshoulder && transGuy[j] == littleguy_spine)
|| (transGuy[i] == littleguy_spine && transGuy[j] == littleguy_chip))
{
var p2 = kinect.CoordinateMapper.MapSkeletonPointToColorPoint(
transGuy[j], ColorImageFormat.RgbResolution640x480Fps30);
spriteBatch.Draw(lineTex, new Vector2(p.X + 80, p.Y),
null, Color.White, (float)Math.Atan2(p2.Y - p.Y, (p2.X + 80) - (p.X + 80)), new Vector2(0f, (float)lineTex.Height/2),
new Vector2(Vector2.Distance(new Vector2(p.X + 80, p.Y), new Vector2(p2.X + 80, p2.Y)), 1f), SpriteEffects.None, 0f);
}
컬러 이미지에 ... 어떻게해야합니까?