むずかしいことはわかりません

いろいろ書いてるみたいな

Esenthel Engineを試してみてるんですけども。 - LeapMotionと連携

 外部ライブラリのリンクもできるようになったので、LeapMotionで指の位置を取るためのプログラムを作りました。

f:id:sato_c:20140109185039j:plain

こんな感じ。10個まで位置を取ってくるように制限して、その位置を色替えして表示という簡単なものですけど。

塗りつぶされた円はタッチしてると認識されてるところ、輪郭だけの円はタッチしてないけど指の位置は取れてるところ。

 

http://www.buildinsider.net/small/leapmotioncpp/01

こちらのサイトを参考にしました。

EsenthelEngineでは、実画面の座標をすぐにとってこれないので、Initの中で次のように記述してます。

Vec2 pixleSize = D.screenToPixelSize(Vec2(D.w()*2, D.h()*2));

 (0,0)が中心で、-D.w()~D.w()が画面幅、-D.h()~D.h()が画面高さになるのでその値をPixelSizeに変換して保存。これで、実画面(ウィンドウ)の大きさを持っておけます。

 

LeapMotionのほうは、上記解説サイトを見ればだいたいわかると思います。 

今回は単純に指の位置だけ取れればいいやということで、Leap::InteractionBoxを使って押した位置を補正してもらってます。

      Leap::Vector normalizePosition = iBox.normalizePoint(pointable.stabilizedTipPosition());

 

画面にタッチしたかどうかについては、Leap::Pointable::touchZone()の返り値がZONE_NONEかZONE_HOVERINGかZONE_TOUCHINGかで判定しています。

 あとは、タッチしたかどうかで中を塗りつぶすかどうかきめてますが、それはcircle().draw()の第2パラメータがBool fillということでこれをfalseで塗りつぶしなし、trueで塗りつぶしあり、です。

 


LeapMotion使ってみた動画 - YouTube