티스토리 뷰

Kinect

[Kinect 프로젝트] Movement: Geometry!

생각많은 소심남 2012. 8. 26. 15:52

키넥트의 큰 특징은 바로 사람의 관절 정보를 받아올 수 있다는 것이고, 그걸 활용하면 일종의 제스처를 만들어낼 수 있습니다. 가령 네비게이션을 할때 옆으로 밀어내는 동작을 취하면 페이지가 넘어간다던가 버튼의 역할을 해서 누르면 다른 이벤트가 발생하게 할 수 있지요. 지금까지 계속 그런 걸 해봤고 이번에도 그런걸 활용해서 프로젝트를 만들어보고자 합니다. 

 제목에서도 알수있다시피 키넥트를 통해서 기하학적으로 도형의 크기를 조절하는 것을 해볼겁니다. 

 역시 이전에 했던 것처럼 프로젝트를 재활용할 것이고 이번에는 이미지가 4개 사용됩니다. 받고 프로젝트에 추가하시면 됩니다. 물론 이전에 했던 건 필요없으니까 지우셔도 됩니다.


Geometry.zip


이렇게 이미지를 추가했으니까 그릇이 필요할 겁니다. 그에 대한 변수를 선언해주세요. 추가적으로 우리가 변형시킬 도형도 하나의 Texture2D로 선언해주면 좋겠지요.



계속 나온 이야기지만 당연히 손의 움직임을 볼려면 그에 대한 변수가 선언되어야 할 겁니다. 그리고 이걸 하면서 사각형의 폭과 높이를 조절해야 하겠지요. 정수형으로 선언해주고 지난번에 나왔던 문제를 해결하기 위해서 초기에 사각형의 폭과 높이를 정의해줍니다. 한 100*100 정도가 괜찮지 않을까요?



우선 변수를 선언해주었으니까 그에 대한 컨텐츠를 넣는게 먼저일 듯 합니다. 삽입한 이미지들을 넣어주세요.



다음으로 수정해줄 부분은 바로 스켈레톤이벤트입니다. 지난 프로젝트에서는 그 값을 오른쪽 발에 넣었었지요. 그걸 오른손으로 바꾸고 앞에서 정의한 위치 값을 거기에 넣어주면 됩니다.



이제 입력값에 변화를 주기위한 로직을 Update에서 처리해줘야 합니다. 우선은 저번에도 이야기 했지만 버튼이 눌리고 때지는 이벤트는 가장 쉬운 방법으로 충돌이벤트를 사용하고 그를 위해서는 그 이미지를 채울 수 있는 사각형을 만드는게 필요하다고 언급했습니다. 우리는 여기에 있는 속성중 Intersects 라는 걸 사용하려고 하니까요.

 물론 다른 방법도 있습니다. 키넥트의 관절 정보상 정확하지 않은데 그냥 충돌이벤트만 활성화해서는 의도치 않은 결과가 나올 수 있습니다. 그래서 보통은 GameTime을 활용해서 일정시간이 지난 후에 이벤트가 발생하게 할수도 있습니다. 이부부은 다음에 한번 말씀드려보겠습니다. 우선 충돌에 필요한 사각형을 3개 만들어줍니다. 충돌에 필요한건 버튼 2개와 손이겠지요.



이 상태에서 충돌이벤트가 발생했을 때 앞에서 선언했던 rw와 rh 값이 변하게 하면 되겠지요. 그리고 그 값을 토대로 사각형을 그리게 하면 다음과 같이 표현됩니다.



자 그럼 이제 무얼 그릴건가만 draw 메서드에 정의해주면 되겠습니다. 그냥 간단하게 동작되는 것만 확인하려면 이미지들만 그리게 하면 되겠지요.



그런데 조금 단순합니다.



그냥 오른손을 움직이는 것으로 사각형의 크기가 조절되는 것은 확인할 수 있지만 이 사각형이 실제 몇 픽셀인지. 넓이가 얼마인지는 잘 모릅니다. 이때를 위해서 폰트를 활용한 정보를 보여주도록 합니다. 



이렇게 하면 실시간으로 사각형의 크기가 폰트로 출력되게 됩니다. 결과를 한번 보시겠습니다.



여기다가 추가적으로 더 넣어볼까요? 만약 사각형의 폭과 높이 같다면 그건 정사각형이 됩니다. 그걸 나타내는 구문은 딱 두줄만 써서 표현할 수 있습니다.



이러면 딱 정사각형일때 문구가 출력됩니다.



이걸 활용하면 원이나 삼각형 같은 것도 크기를 늘릴 수도 있을거고 아까 update에서 조금만 더 수정한다면 크기를 출일 수도 있을 겁니다. 그 부분은 직접 해보시는 여러분 몫이 될겁니다. 



댓글