トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

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をインストール

Direct X SDKをインストール

ARToolkitをビルドするためには、DirectShowが必要です。

GLUTのダウンロード

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)に対して虹色矩形を表示