VC++ 2008 Express EditionでARToolkitをビルドしてみる
Last-modified: 2009-05-06 (水) 23:32:55 (485d)
Top / VC++ 2008 Express EditionでARToolkitをビルドしてみる
Visual C++ 2008 Express Editionで色々ビルドしてみる
ARToolkitをVC++ 2008 Express Editionでビルドするにはいくつか工夫が必要です。 そのメモ。
Visual C++ 2008 Express Editionをインストール †
- Visual C++ 2008 Express EditionはMicrosoftのサイトからダウンロードできます。
Direct X SDKをインストール †
ARToolkitをビルドするためには、DirectShowが必要です。
GLUTのダウンロード †
- http://www.xmission.com/~nate/glut.htmlを開く
- glut-3.7.6-bin.zipをダウンロード
- 適当なディレクトリに展開
glut-3.7.6-binが展開されれば成功。
ARToolkitのダウンロード †
- http://www.hitl.washington.edu/artoolkit/documentation/usersetup.htm#comp_windowsを開く
- ARToolKit-2.72.1-bin-win32.zipをダウンロード
- 適当なディレクトリに展開
- 展開されたARToolkitディレクトリ以下にGLUTのファイルをコピー
- glut-3.7.6-bin/glut32.dll -> ARToolkit/bin, ARToolkit/DSVL/bin
- glut-3.7.6-bin/glut.h -> ARToolkit/include/gl
- glut-3.7.6-bin/glut32.lib -> ARToolkit/lib, ARToolkit/DSVL/lib
- glut-3.7.6-bin/glut.def -> ARToolkit/DSVL/lib
ARToolkitのビルド †
ARToolkit/DSVL/extlib/tinyxmlをビルド †
- ARToolkit/DSVL/extlib/tinyxml/tinyxml.slnを開く
- 「完了」ボタンを押す
- tinyxmlSTLプロジェクトの設定を変更
- 「指定の警告を無効にする」 - 4996
- ソースファイルからtinystr.cppをクリア(実体がないため、警告が発生してしまう)
- ARToolkit/DSVL/extlib/tinyxml/Debug_STL/tinyxmld_STL.lib,
- ARToolkit/DSVL/extlib/tinyxml/Release_STL/tinyxml_STL.libをARToolkit/DSVL/libにコピー
ARToolkit/DSVLをビルド †
- ARToolkit/DSVL/DSVideoLib.slnを開く
- 「完了」ボタンを押す
- いったんソリューションを閉じる
- ARToolkit/DSVL/DSVL.vcprojをテキストエディタで開き、置換 あんまりいい方法ではない気がする・・・別の方法があるような。
- ($DXSDK_DIR) -> C:\Program Files\Microsoft DirectX 9.0 SDK (February 2005)\
- ARToolkit/DSVL/DSVideoLib.slnを開く
- DSVLプロジェクトのプロパティを以下のように変更 (Debug/Releaseすべて)
- 「追加のインクルードディレクトリ」に追加 - C:\WinDDK\6001.18002\inc\crt\atl71
- 「指定の警告を無効にする」を変更 - 4101;4995;4996
- 「追加のライブラリディレクトリ」に追加 - C:\WinDDK\6001.18002\lib\atl\i386
- 「追加の依存ファイル」を変更 - commsupp.lib -> commsuppw.lib (Releaseのみ) dxguid.libを削除
- コードを一部修正
- DSVL_GraphManager::SampleCB
変更前
std::map<unsigned long, MemoryBufferEntry>::iterator iter;
for(iter = mb.begin();
iter != mb.end();
iter++)
{
if((*iter).second.use_count == 0)
{
(*iter).second.media_sample->Release();
std::map<unsigned long, MemoryBufferEntry>::iterator iter2 =
mb.erase(iter);
iter = iter2;
}
}
変更後
bool removed = true;
while(removed) {
removed = false;
std::map<unsigned long, MemoryBufferEntry>::iterator iter;
for(iter = mb.begin();
iter != mb.end();
iter++)
{
if((*iter).second.use_count == 0)
{
(*iter).second.media_sample->Release();
mb.erase(iter);
removed = true;
break;
}
}
}
- 作成したファイルをコピー
- ARToolkit/DSVL/bin/DSVL.dll,DSVLd.dll -> ARToolkit/bin
ARToolkitをビルド †
- ARToolkit/ARToolkit.slnを開く
- 「完了」ボタンを押す
- 全プロジェクトのプロパティを以下のように変更(Debug/Releaseすべて、最低限:libAR,libARgsub,libARvideo)
- 「指定の警告を無効にする」 - 4090;4244;4996;4819;4603;4290;4099;4800
- 「デバッグ」-「作業ディレクトリ」 - ARToolkit/binの絶対パス
サンプルを実行する †
- bin/Data/WDM_camera.xml, bin/Data/WDM_camera_flipV.xmlのfriendly_nameをカメラに合わせて変更
- 自分の場合 "Logicool"
- friendly_nameを含むデバイスがない場合、例外終了するおそれあり -> DSVLでBindToObjectの失敗を考慮できていない??
- videoTestプロジェクトに対して「デバッグ」-「新しいインスタンスを開始」する
映像が出れば成功。
サンプルの概要 †
色々あるが、まずは以下のものを動かすと楽しい。
- simpleTest -> Hiroマーカ(ARToolkit/patterns/pattHiro.pdf)に対して青色矩形を表示
- simpleLite -> Hiroマーカ(ARToolkit/patterns/pattHiro.pdf)に対して虹色矩形を表示