2013-03-16 10 views
1

kinect (C++)로 작업하는 동안 D3D와 좌표 공간에 대해 배우고 있습니다. Direct2D를 사용하여 쉽게 스켈레톤 위치를 그릴 수 있지만 Direct3D 11을 사용하여 이러한 위치를 그리는 방법과 필요한 좌표 공간 변환 방법에 대해 궁금합니다.D3D로 해골 데이터 그리기 : 좌표 공간 변환

간단한 예 : 왼손의 움직임을 기준으로 큐브를 번역하고 싶습니다. 왼쪽 관절 추적, 골격 위치를 얻을 수 있습니다. 그러나 어떻게 이러한 위치를 큐브의 세계 공간이 이해할 수있는 것으로 변환 할 수 있습니까? - 나에게 화면 공간에 결과를 제공 SkeletonToDepth 변환을 사용하여 깊이

  1. 변환 골격 사항 :

    나는 수행하여 해결책을 시도했다.
  2. XMVector3UnProject(...), 즉 본질적으로 광선 선택 솔루션을 사용하여 스크린 공간 지점을 다시 오브젝트 공간에 매핑하십시오.

괜찮 으면 좋겠지 만 객체 공간으로 다시 매핑하는 것을 포함하지 않고 스크린 공간 또는 적어도 영사 공간에서 직접 작업 할 수있는 효율적인 방법이 있습니까?

+0

Kinect for Windows Toolkit의 D3D 예를 살펴보십시오. 아바타를 다루는 곳이 있는데, 이는 당신에게지도 작성에 대한 통찰력을 줄 것입니다. 나는이 예제를 다루지 않았기 때문에 그들이 원하는 것을 정확히 가지고 있는지 확신 할 수 없다. –

+0

감사의 말 악마 옷장 원숭이. Avateering 데모를 살펴 보았습니다. 나는 그것을 완전히 이해하지 못한다. 왜냐하면 나는 C#에 대한 경험이 전혀 없기 때문이다. 프로그램 코드의 일반적인 흐름 (어떤 프로그램이 무엇을 부르는가)을 이해하는 동안, 나는 스켈레톤 공간에서 모델로의 특정 변환을 식별 할 수 없었다. 나는 내가 찾을 수있는 것을보기 위해 독서를 계속할 것이다. 더 이상의 제안? – Nikky

답변

1

저에게 맞는 답변을 찾았습니다.

skeleton/face tracker의 kinect raw 데이터는 kinect 카메라 공간의 데이터를 제공합니다.이 카메라의 공간은 (0,1,0)으로 정의 된 뷰 행렬로 정의되며, (0,0, - 1), 원점은 (0,0,0)입니다. y = 45.8f에서 fov의 투영 행렬, 뷰 포트의 종횡비 및 응용 프로그램과 거의 비슷하게 일치합니다 (내 경우 1.0f에서 2000.0f까지 mm로 작업). kinect에서 반환 한 3D 점 카메라 공간에 있습니다. 따라서 월드 공간에 도달하려면 뷰 행렬의 역함수를 곱하십시오 (그리고 제 경우에는 -1로 곱하여 변형 된 점에서 x 축 좌표를 플립합니다). 스크린상의 물체는 kinect의 움직임을 따라야합니다.