티스토리 뷰

아.. 1주일동안 삽질하던게 함수하나로 이렇게 해결이 되어 버리네요.

사실 제가 구하고자 했던 것이 이미지상의 손의 위치를 실제 키넥트와의 거리를 측정함으로써 계산하는 것이었습니다. 그런데 아무리 찾아도 내용이 안나오니까 어떻게 마련한 대안이 예제에 포함되어 있는 Depth-D3D 입니다.



보다시피 각 픽셀에 대한 위치가 3D로 나오기 때문에 저는 이 값을 취할 수 있을 줄 알았습니다. 그런데 확인해보니까 이렇게 3D로 매핑해주는 부분이 geometry Shader에서 처리하는 것이더군요. 결론적으로 기존에 만든 코드랑은 완전 별개라는 겁니다. 

아.. 생각하다하다 msdn을 살펴보자 해서 찾은 함수가 바로 NuiTransformDepthImageToSkeleton 이라는 함수입니다.

사실 제가 헷갈렸던 건 Skeleton이라는 것이 함수명에 들어있으니까 분명 골격이 인식되어야 사용할 수 있겠구나라고 생각했었습니다. 그런데 아니더군요. 잠깐 함수를 보겠습니다.



자 보면 아시겠지만 그냥 해당 depth의 픽셀값만 넣어주면 자동으로 Vector4 값으로 변환시켜줍니다. 뒤에 붙는 resolution은 현재 depth를 뽑아내는 depth map의 해상도인데 안 넣어주면 320x240으로 들어값니다. 저는 기본으로 뽑는 depth resolution이  640*480이니까 NUI_IMAGE_RESOLUTION_640x480을 적용시켜주면 기준축이 카메라의 직교축이 되게 됩니다. 그래서 카메라 왼쪽으로 가면 x좌표가 음수, 오른쪽으로 가면 양수가 나오게 됩니다. ( 아니면 반대가 되겠지요. 아무튼 x의 기존의 키넥트의 위치가 된다는 겁니다.)


 


약간 메모리 해제문제가 걸려있지만 조만간 멋있는거 보여드릴 수 있을 듯 합니다.




댓글