Xcode 4.3.3でOpenNI & NITEのサンプルをビルドする方法。

色々あって、Xtion PRO LIVE関連の開発を行う事になった。
サンプルコードが色々公開されているものの、最新版のXcodeでのビルド方法に関する情報がなかなか見付からなかったので、備忘録としてここに記しておく。

今回ビルドに成功したのは、NiSimpleReadとNiSimpleViewer、あとNITEのSingleControl。
Xcodeで新規C++プロジェクトを作成してから、main.cppを上書きする方法を採った。

いずれもコード本体を改変する必要はないのだが、ビルド設定が重要。

1. NiSimpleReadの場合

TARGETS -> Build Settings -> Other Linker Flags: /usr/lib/libOpenNI.dylib
TARGETS -> Build Settings -> Header Search Paths: /usr/include/ni

2. NiSimpleViewerの場合

TARGETS -> Build Settings -> Header Search Paths: /usr/include/ni
TARGETS -> Build Phases -> Link Binary With Libraries: OpenGL.framework GLUT.framework

3. SingleControlの場合

TARGETS -> Build Settings -> Other Linker Flags: /usr/lib/libOpenNI.dylib /usr/lib/libXnVNite_1_5_2.dylib※バージョンは環境によるので注意
TARGETS -> Build Settings -> Header Search Paths: /usr/include/ni /usr/include/nite

正直な所、NiSimpleViewerでOther Linker Flagsが何故設定不要なのかよく分かっていなかったりするのだが、取り敢えず上記の通り設定すればビルドは通る筈。

あと、Xtion動作させる時はSamplesConfig.xmlなりSample-Tracking.xmlなりを参照する必要があるが、いずれもビルド済バイナリと同一フォルダ内を参照するようにコードを改変して、TARGETS -> Build Phases -> Copy Filesで自動コピーするように設定しておくと便利。
DestinationはProducts Directoryを選択、Subpathは空欄でOK。


SingleControlをちょっといじると、ハンドトラッキングと同時にマウスポインタのコントロールが可能になって楽しい。
main.cppの冒頭に

#import <ApplicationServices/ApplicationServices.h>

を追加して、void XN_CALLBACK_TYPE OnPointUpdateに


CGDirectDisplayID displayID = kCGDirectMainDisplay;
CGPoint p1;
float DispCentX = CGDisplayPixelsWide(displayID) / 2.0;
float DispCentY = CGDisplayPixelsHigh(displayID) / 2.0;
p1.x =  2500.0 * pContext->ptPosition.X / pContext->ptPosition.Z + DispCentX;
p1.y = -2500.0 * pContext->ptPosition.Y / pContext->ptPosition.Z + DispCentY;
CGDisplayMoveCursorToPoint(displayID, p1);

を書き加えればOK。

本当はNITEのPointViewerをカスタマイズしたいのだが、OpenGL ES絡みのエラーでどうしてもビルドが通らない。
Xcode Project形式でサンプル配布してくれれば助かるんだがな…。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>