Leap Motion & openFrameworks 指表示
Leap Motionで検出した手・指をopenFrameworksにより、表示させます。openFrameworksでは①ofLeapMotionというアドオンを使う方法と、②Leap MotionのSDKを使う方法があるますが、本ホームページでは②のSDKを用います。理由としては、純正のSDKのほうがアップグレード更新が速いため、最新の機能が使えるためです。下記のページを参考に、プログラムを作っていきます。
http://gndo.blogspot.jp/2013/07/leap-motion-openframeworks.html
PIとDEG_TO_RADとRAD_TO_DEGという定数が、2重定義でビルドエラーが出ますが、上記のURLを参考にifndefでくくると、エラーは出なくなりビルドできます。実行結果は下図の通りです。
フレームの処理はopenFrameworksのdraw()で処理し、一過性のイベント(Leap motionのサービス開始等)はLeap Listerの関数で処理します。そのため、ofAppクラスにLeap::Listernクラスを継承しています。
Leap MotionのSDKでも問題なく動くことができたので、次にジェスチャーにInteractionできるように改造していきたいと思います。
// ofApp.h //////////////////////////////////////////////
#pragma once
using namespace Leap;
class ofApp : public ofBaseApp, public Listener{
public: void setup(); void update(); void draw();
void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseEntered(int x, int y); void mouseExited(int x, int y); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg);
// Leap Motionのコントローラー Controller leap; // カメラ ofCamera camera; // 球体の描画処理 void drawSphere(Leap::Vector vector, float radius);
//----- 一過性のイベントだけListnerから取得 ----------------------------// //----- フレームの処理はdraw()で行う -----------------------------------// void onConnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onDisconnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onFocusGained(const Controller&) { cout << __FUNCTION__ << endl; }
void onFocusLost(const Controller&) { cout << __FUNCTION__ << endl; }
void onServiceConnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onServiceDisconnect(const Controller&) { cout << __FUNCTION__ << endl; } //------------------------------------------------------------//
};
// ofApp.h //////////////////////////////////////////////
#pragma once
using namespace Leap;
class ofApp : public ofBaseApp, public Listener{
public: void setup(); void update(); void draw();
void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseEntered(int x, int y); void mouseExited(int x, int y); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg);
// Leap Motionのコントローラー Controller leap; // カメラ ofCamera camera; // 球体の描画処理 void drawSphere(Leap::Vector vector, float radius);
//----- 一過性のイベントだけListnerから取得 ----------------------------// //----- フレームの処理はdraw()で行う -----------------------------------// void onConnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onDisconnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onFocusGained(const Controller&) { cout << __FUNCTION__ << endl; }
void onFocusLost(const Controller&) { cout << __FUNCTION__ << endl; }
void onServiceConnect(const Controller&) { cout << __FUNCTION__ << endl; }
void onServiceDisconnect(const Controller&) { cout << __FUNCTION__ << endl; } //------------------------------------------------------------//
};