Kinectを使用してC++(OpenGL)でアプリを作成しています。OpenGLをクリックするたびに、呼び出される関数は
void myMouseFunction( int button, int state, int mouseX, int mouseY )
{
}
しかし、Kinectを使用してそれらを呼び出すことはできますか?多分それのためにデプスバッファを使わなければならないでしょう、しかしどうやって?
Kinectを使用してC++(OpenGL)でアプリを作成しています。OpenGLをクリックするたびに、呼び出される関数は
void myMouseFunction( int button, int state, int mouseX, int mouseY )
{
}
しかし、Kinectを使用してそれらを呼び出すことはできますか?多分それのためにデプスバッファを使わなければならないでしょう、しかしどうやって?
まず、OpenGLはユーザー入力を処理しないため、「openGLをクリック」しないでください。OpenGLは純粋にレンダリングAPIです。あなたが言及しているのは、おそらくGLUTで使用されるコールバックです。GLUTはOpenGLの一部ではありませんが、独立したフレームワークであり、ユーザー入力イベントの処理も行います。
Kinectは入力イベントを生成しません。Kinectが行うことは、「見る」ものの深度画像を返すことです。この深度画像をなんとかして処理する必要があります。この深度画像を処理し、ジェスチャーデータなどに変換するOpenNIのようなフレームワークがあります。次に、そのようなジェスチャデータを処理し、さらに処理してユーザー入力として解釈できます。
タグで、Kinectのオープンソースドライバーである「openkinect」を参照しました。ただし、OpenKinectはジェスチャの抽出と解釈を行わず、深度画像のみを提供します。もちろん、深度データに対しても簡単なテストを実行できます。たとえば、定義されたボリュームの範囲内にオブジェクトがあることをテストし、これを一種のイベントとして解釈します。
Kinectが実際に何をしているのか混乱していると思います。Kinectは深度とビデオデータをコンピューターに送り、コンピューターはそれを処理する必要があります。Openkinectは、ごく最小限の処理のみを実行します。スケルトンの追跡は行いません。スケルトントラッキングを使用すると、ユーザーの各関節がどこにあるかを3Dで表現できます。
ランダムなハッキングを行っているだけの場合は、KinectSDKに切り替えることができます。ただし、Windowsでのみ開発および展開できることに注意してください。
KinectSDKはOpenGLおよびC++でも動作し、前述のユーザーの「スケルトン」を取得できます。
OpenNI(マルチプラットフォームで自由のように無料)もスケルトントラッキングをサポートしていますが、私はそれを使用したことがないのでお勧めできません。
ある種のスケルトンを追跡した後、ユーザーの手に焦点を合わせ、ユーザーの動きを処理して「マウスクリック」を機能させることができます。ただし、これはGLUTのマウスハンドラーを使用しません。