Your SlideShare is downloading. ×
Leap Motion - 1st Review
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Leap Motion - 1st Review

13,551
views

Published on

2013/3/12 …

2013/3/12
Leap Motion 1st Review

Original PowerPoint File Download : http://sdrv.ms/YdnyjD

Published in: Technology

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,551
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
153
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Leap Motion 1st ReviewTsukasa SUGIURA@UnaNancyOwen
  • 2. 12[mm] LEDUSB 3.0 micro-B
  • 3. Youtube – Leap Motion (Leap Visualizer) http://youtu.be/cxlpjSUrOa0
  • 4. ■システムの設定C:¥Program Files¥ 環境変数 LeapSDK 変数 変数値 LEAPMOTION_DIR C:¥Program Files¥LeapSDK¥ include ;%LEAPMOTION_DIR%lib¥x86 Path lib ;%LEAPMOTION_DIR%lib¥x64■プロジェクトの設定(C++)インクルード ディレクトリ ライブラリ ディレクトリ $(LEAPMOTION_DIR)lib¥x86 $(LEAPMOTION_DIR)include $(LEAPMOTION_DIR)lib¥x64依存ファイル 構成 ライブラリ Debug Leapd.lib Release Leap.lib
  • 5. ■基本的なプログラムの構成ヘッダファイルのインクルード// Include Header#include <Leap.h>Leap::Listenerクラスを継承するサブクラスの定義// Listenerclass Listener : public Leap::Listener{ public: virtual void onInit( const Leap::Controller& ); virtual void onConnect( const Leap::Controller& ); virtual void onDisconnect( const Leap::Controller& ); virtual void onExit( const Leap::Controller& ); virtual void onFrame( const Leap::Controller& );};コールバック関数の実装void Listener::onInit( const Leap::Controller& controller ){ /* 実装 */ }void Listener::onConnect( const Leap::Controller& controller ){ /* 実装 */ }void Listener::onDisconnect( const Leap::Controller& controller ){ /* 実装 */ }void Listener::onFrame( const Leap::Controller& controller ){ /* 実装 */ }void Listener::onExit( const Leap::Controller& controller ){ /* 実装 */ }
  • 6. メイン関数の実装// Mainint _tmain( int argc, _TCHAR* argv[] ){ // Create a listener and controller Listener listener; Leap::Controller controller; // Have the listener receive events from the controller controller.addListener( listener ); // Keep this process running until Enter is pressed std::cout << "Press Enter to quit..." << std::endl; std::cin.get(); // Remove the listener when done controller.removeListener( listener ); return 0;}
  • 7. class Leap::Listenervirtual void onInit( const Leap::Controller& )インスタンス化されたときに呼び出されるvirtual void onConnect( const Leap::Controller& )コントローラーに接続(Leap::Controller::addListener())されたときに呼び出されるvirtual void onDisConnect( const Leap::Controller& )Leap Motionが外されたときに呼び出されるvirtual void onFrame( const Leap::Controller& )Leap Motionのフレームが更新されたときに呼び出されるvirtual void onExit( const Leap::Controller& )コントローラーと切断(Leap::Controller::removeListener())され、インスタンスが破棄されたときに呼び出される
  • 8. class Leap::Controllerbool addLitener( Leap::Listener &listener )Leap::Listenerを接続するbool removeListener( Leap::Listener &listener )Leap::Listenerを切断するLeap::Frame frame( int history = 0 ) constフレーム情報(Leap::Frame)Leap::ScreenList calibratedScreens() constキャリブレーションしたスクリーン情報のリスト(Leap::ScreenList)void enableGesture( Leap::Gesture::Type type, bool enable = true ) constLeap::Gesture::Typeのジェスチャー検出を有効にする
  • 9. class Leap::ScreenListLeap::Screen operator[]( int index ) constindexのスクリーン情報(Leap::Screen)を取得する Class Leap::Screenint widthPixels() constスクリーンの幅 [pixel]int heightPixels() constスクリーンの高さ [pixel]Leap::Vector intersect( const Leap::Pointable &pointable, bool normalize , float clampRatio = 1.0f ) constLeap::Pointable(指など)とスクリーンの交点bool isValid() constスクリーン情報の有効性
  • 10. class Leap::FrameLeap::HandList hands() const手情報のリスト(Leap::HandList)Leap::GestureList gestures() constジェスチャー情報のリスト(Leap::GestureList)
  • 11. class Leap::HandListLeap::Hand operator[]( int index ) constindexの手情報(Leap::Hand)を取得するbool empty() const手情報のリストが空 Class Leap::HandLeap::PointableList pointables() constポインター情報のリスト(Leap::PointableList)Leap::FingerList fingers() const指情報のリスト(Leap::FingerList)
  • 12. class Leap::FingerListLeap::Finger operator[]( int index ) constindexの指情報(Leap::Finger)を取得するbool empty() const指情報のリストが空 class Leap::Finger : Leap::PointableLeap::Vector tipPosition() constLeap Motion原点からの指先端のミリメートル位置(x, y, z) [mm]Leap::Vector tipVelocity() const指先端のミリメートル位置の秒変化率(速度) [mm/s]
  • 13. class Leap::GestureListLeap::Gesture operator[]( int index ) constindexのジェスチャー情報(Leap::Gesture)を取得するint count() constリストに入っているジェスチャー情報の数bool empty() constジェスチャー情報のリストが空 class Leap::GestureLeap::Type type() const検出されたジェスチャーの種類
  • 14. class Leap::GestureLeap::Type type() const検出されたジェスチャーの種類(Leap::Gesture::Type)Leap::State state () constジェスチャーの状態(Leap::Gesture::State)
  • 15. enum Leap::Gesture::TypeTYPE_SWIPEスワイプ(指で直線運動するジェスチャー)TYPE_CIRCLEサークル(指で円運動するジェスチャー)TYPE_SCREEN_TAPスクリーンタップ(指で前向きにタッピングするジェスチャー)TYPE_KEY_TAPキータップ(指で下向きにタッピングするジェスチャー)
  • 16. enum Leap::Gesture::StateSTATE_STARTジェスチャーの開始状態STATE_UPDATEジェスチャーの途中状態STATE_STOPジェスチャーの修了状態
  • 17. class Leap::SwipeGesture : Leap::GestureLeap::Vector position() constジェスチャーした位置(x, y, z) [mm]Leap::Vector direction() constジェスチャーの方向float speed() constスワイプの速度 [mm/s]Leap::Vector startPosition() constスワイプの開始位置(x, y, z)
  • 18. class Leap::CircleGesture : Leap::GestureLeap::Vector position() constジェスチャーした位置(x, y, z) [mm]Leap::Vector direction() constジェスチャーの方向(::angleTo)float radius() constサークルの半径 [mm]float progress() constサークルの回転数Leap::Vector center () constサークルの中心位置(x, y, z)
  • 19. class Leap::KeyTapGesture : Leap::GestureLeap::Vector position() constジェスチャーした位置(x, y, z) [mm]Leap::Vector direction() constジェスチャーの方向 class Leap::ScreenTapGesture : Leap::GestureLeap::Vector position() constジェスチャーした位置(x, y, z) [mm]Leap::Vector direction() constジェスチャーの方向
  • 20. ■例:指でマウスポインタを操作する// onFramevoid Listener::onFrame( const Leap::Controller& controller ){ // Get first calibrated Screen const Leap::ScreenList screenList = controller.calibratedScreens(); if( screenList.empty() ){ return; } const Leap::Screen screen = screenList[0]; // Get Frame const Leap::Frame frame = controller.frame(); // Get HandList const Leap::HandList handList = frame.hands(); if( !handList.empty() ){ // Get first Hand const Leap::Hand hand = handList[0];
  • 21. // Get first Finger pointable const Leap::PointableList pointableList = hand.pointables(); if( pointableList.empty() ){ return; } const Leap::Pointable pointable = pointableList[0]; // Get intersection between screen and ray projecting from finger // normalize true : intersect.x 0…1, intersect.y 0…1 const Leap::Vector intersect = screen.intersect( pointable, true, 1.0f ); if( !intersect.isValid() ){ return; } // Set Mouse Pointer unsigned int x = screen.widthPixels() * intersect.x; unsigned int y = screen.heightPixels() * ( 1.0f - intersect.y ); SetCursorPos( x, y ); // SetCursorPos() defined in #include <windows.h> }}
  • 22. ■例:ジェスチャー(スワイプ)で左右キーを操作する// onConnectvoid Listener::onConnect( const Leap::Controller& controller ){ // Enable detect Gesture controller.enableGesture( Leap::Gesture::TYPE_SWIPE );}// onFramevoid Listener::onFrame( const Leap::Controller& controller ){ // Get Gesture const Leap::GestureList gestureList = frame.gestures(); for( int count = 0; count < gestureList.count(); ++count ){ Leap::Gesture gesture = gestureList[count]; // Switch Gesture type switch( gesture.type() ){ // Case of Swipe Gesture case Leap::Gesture::TYPE_SWIPE:
  • 23. Leap::SwipeGesture swipe = gesture;// horizontal swipe// Swipe is horizon if diff is positive, vertical if diff is negative.float diff = std::abs( swipe.direction().x ) - std::abs( swipe.direction().y );if( diff > 0.0f ){ // swipe left ( <- ) if( swipe.direction().x > 0.0f ){ // Check Gesture State Start if( swipe.state() == Leap::Gesture::STATE_START ){ keybd_event( VK_LEFT, 0, 0, 0 ); keybd_event( VK_LEFT, 0, KEYEVENTF_KEYUP, 0 ); } } // swipe right ( -> ) else{ // Check Gesture State Start if( swipe.state() == Leap::Gesture::STATE_START ){ keybd_event( VK_RIGHT, 0, 0, 0 ); keybd_event( VK_RIGHT, 0, KEYEVENTF_KEYUP, 0 ); } }
  • 24. } break; default: break; } }}