Esenthel Engineを試してみてるんですけども。 - LeapMotionと連携
外部ライブラリのリンクもできるようになったので、LeapMotionで指の位置を取るためのプログラムを作りました。
こんな感じ。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で塗りつぶしあり、です。