1
나는 스켈레톤의 접합 값을 기록하는 프로그램을 작성했습니다. . 기본적으로 RightHand.joint를 사용하여 센서에서 X, Y, Z 좌표를 얻습니다. 이제는이 값을 사용하여 3D 모델을 애니메이션으로 만들려고합니다. 어떻게 든 x, y 값을 실제 투영법으로 변환하는 수식을 얻었지만 는 Z 좌표와 .. 또한 나는 우리가 다음매핑 x, y, z Kinect에서 XNA의 화면 좌표 또는 투영 좌표로의 좌표
int x = (int) Math.Floor(((float.Parse(temp[0]) * 0.5f) + 0.5f) * maxWidth);
int y = (int) Math.Floor(((float.Parse(temp[1]) * -0.5f) + 0.5f) * maxHeight);
밤은 할 필요가 이유를 이해 해달라고하는 방법을 이해하지 않습니다 그것은 단지 대신 화면 너비에 의해 x와 y 값 & 높이를 곱하면 충분한 * 0.5f (+ 0.5f)를하는 중. . 만약 누군가가 매우 도움이 될 것입니다 또한 Z 좌표를 얻는 방법을 설명 할 수 있을까요? 여기
코드입니다 : protected override void Update(GameTime gameTime)
{
//// TODO: Add your update logic here
using (StreamReader r = new StreamReader(f))
{
string line;
Viewport view = graphics.GraphicsDevice.Viewport;
int maxWidth = view.Width;
int maxHeight = view.Height;
while ((line = r.ReadLine()) != null)
{
string[] temp = line.Split(',');
int x = (int)Math.Floor(((float.Parse(temp[0]) * 0.5f) + 0.5f) * maxWidth);
int y = (int)Math.Floor(((float.Parse(temp[1]) * -0.5f) + 0.5f) * maxHeight);
//Wrong Z - value Cal (Testing)
int z = (int)Math.Floor(((float.Parse(temp[2])* 0.5) + 0.5f) * maxHeight);
motion_z.Add(new Point3D(x, y, z));
}
}
ModelPosition.X = (float)(motion_z[i].X);
ModelPosition.Y = (float)(motion_z[i].Y);
ModelPosition.Z = (float)(motion_z[i].Z);
i++;
base.Update(gameTime);
}
제대로 애니메이션을해야하는 다른 aproach와 . XNA에서 x, y, z 값 위치를 수정하지 않고 모델에 제공합니다. 그리고 World Matrix를 사용하여 모델을 확대/축소하고 이동하고 회전 할 수 있습니다. (내 "모델"은 실린더와 구체로 구성됩니다.) – EdgarT
기본적으로 내 모델은 더 자연스러운 움직임을 원합니다. 예를 들면. 물고기 . . 그래서 그것을하기 위해 복잡한 함수를 사용하는 대신에 jsut은 모션을 기록하고 그것을 움직이기 원합니다 –
어쨌든 당신은 저에게 골격 좌표와 깊이의 차이를 설명 할 수 있습니까? –