티스토리 뷰

Kinect

[Kinect 프로젝트] Responding to Movement

생각많은 소심남 2012. 8. 12. 00:30

계속해서 Skeleton 정보를 이용해서 하나의 제스처를 만드는 작업을 해보고 있습니다. 이번에 해볼 것은 넘기는 자세를 통한 지도 네비게이션입니다. 

 보통 네비게이션을 할때 여러분들이 생각하는 제스처는 어떤 것일까요? 대부분의 사람들한테는 책장을 넘기듯 손을 한쪽에서 다른 방향으로 이동시키는 모션이 그런 네비게이션 제스처가 될 것입니다. 물론 일부 사람들에게는 독특한 네비게이션 제스처가 있을 수 있습니다. 그래서 그런 제스처를 일반화하기 위한 작업들을 연구에서 많이 사용합니다. 보통 이런 작업을 User Test라고 하고 이런 과정을 통해서 제스처를 정의하는 과정을 elicitation(끌어내기) 라고 합니다.

 하지만 저희는 이런 과정없이 그냥 모션을 제어해보도록 하지요. 일단 기존 프로젝트를 계속 활용할 예정이고 없으신 분은 이전 포스트에서 dropbox에 프로젝트를 공유했으니까 참고하시기 바랍니다. 첨부된 파일을 다운로드 받고 프로젝트에 추가시킵니다.


MapImage.zip


당연히 Content 프로젝트에 추가시켜야 겠지요?



그 후에 추가시킨 이미지에 대해서 Texture2D로 변수를 선언하고 정의해줍니다. 지난 포스트에서 언급했지만 LoadContent 부분에 추가시켜야 합니다.


자 우선은 지도들을 삽입했으니까 배경을 무엇으로 할건지를 결정해줘야 합니다. 물론 그리는 거야 Draw에서 이뤄져야 하지만 그리는 무언가를 결정하기 위해서는 Draw가 아닌 그보다 일찍 실행되는 부분에서 정의가 되어야 합니다. 일단은 그걸 담을 그릇을 Background라고 하고 맨앞에서 선언해줍니다.



그 다음에 맨 처음 출력될 이미지를 선택해줍니다. 저는 일단 asia로 지정했고 이걸 아까 이미지를 집어넣었던 LoadContent에서 정의했습니다.


이제는 이 Background를 그릴 공간을 지정해야 되는데 당연히 Draw에서 이뤄져야 하겠지요. 거기에 화면을 뒤덮는 네모를  하나 생성합니다. 그리고 그안에 꽉차게 이미지를 삽입해주면 될겁니다.


그 후에 손이미지만 뜨게끔 머리를 그리는 부분은 지워주고 손을 그리는 부분은 놔둡니다.


컨텐츠를 호출하는 것과 그리는 부분이 됬으니까 이제는 그걸 어떻게 구현하냐가 관건이 되겠습니다. 우선 nui_SkeletonFrameReady에서 Track이 됬을때를 다루므로 손에 대한 조건문을 놔두고 다 삭제해줍니다.


이제 제스처에 대한 로직이 정의되어야 할텐데요. 이 부분은 지금까지 채우지 않았던 Update부분에서 정의되어야 합니다. 참고로 말하자면 draw는 화면상으로 갱신되어야 될 내용이 들어가는 부분이고 update는 로직이 갱신되어야 할 부분이 들어가는 부분입니다. 그래서 보통 게임 로직에 관한 내용이 이 부분에 쓰입니다. 


 다양한 제스처 정의가 있을 수 있습니다. 시간을 측정해서 그 시간안에 한손의 좌표가 이동하면 그에 해당하는 이벤트를 발생시키는 동적인 정의가 있을 수 있고요. 또는 사전에 정해진 값들 (프로그램의 width와 height을 이용해서 제스처를 만드는 정적인 정의가 있을 수 있습니다. 그중 쉬운 방법인 정적 정의를 구현해보려고 합니다. 

 자 우선은 화면의 좌측 상단이 (0,0) 입니다. 여기서 왼손이나 오른손이 100픽셀이하가 되면 이동하게끔 합니다.


당연히 유럽은 아시아의 서쪽이니까 서쪽을 가리치는 제스처를 하면 배경이 바뀌어야 하겠지요. 반대로 유럽에서 아시아로 넘어가려면 어떻게 할까요?



앞에서 정의했었지만 각각의 프로그램의 Width는 640이었지요. 위 조건은 결국 540픽셀이면 동쪽으로 가겠다는 것을 의미합니다. 

다음은 남쪽과 북쪽에 관한 제스처를 만들어주면 되겠지요 위와 같은 형식으로 구성해주면 됩니다.


기존에 손의 위치에 대한 폰트 호출부분이 Draw에서 있었지요? 그 부분을 맵의 이름을 나타내는 것으로 바꿔봅시다.


자 결과를 확인해봅시다.



간단하게 제스처를 만드는 작업을 구현해봤는데 어떤 동작과 원하는 결과를 명확히 정의한다면 다른 프로그램에서도 이를 응용할 수 있겠지요. 이번 프로젝트도 역시 드롭박스에서 받으실 수 있습니다.

https://dl.dropbox.com/u/96808368/Kinect/Lab-4B.zip

댓글