2010年4月18日日曜日

拡張現実の旅-ARToolKit 編 1泊目

野望成就のため、今回は、ARToolKit を改造するための開発環境を構築する。
野望とは、拡張現実を並列プログラミング技術で高速化すること!!しかも 64bit で!!
なので、ARToolKit を使って何かを作るのではなく、ARToolKit 自身をイジルノダ!

前提環境


全てを 64bit 化するため、ソースからビルドすることにした。
作業の前に 32bit と 64bit アプリの違いについて調べた。
ASCII.jp:32bitアプリを64bit Windows 7で動かす「WOW64」|あなたの知らないWindows
WOW64 - Wikipedia などによると、32bit アプリが、%SystemRoot%\System32 にアクセスしようとすると、%SystemRoot%\SysWOW64 にリダイレクトされるようだ。つまり、32bit の DLL は、SysWOW64 の下に、64bit の DLL は、System32 の下に配置すればいいことになる。これを踏まえて以下の作業を行う。


必要なものをダウンロードする。
ARToolKit Home Page から ARToolKit2.65.zip をダウンロード
Nate Robins - OpenGL - GLUT for Win32 から glut-3.7.6-src.zip をダウンロード


では、はじめに GLUT をコンパイルしていく。
glut-3.7.6-src.zip を解凍する。
Visual C++ で glut.dsw を開く


「すべてはい」ボタンを押す。


「ビルド」メニューから「構成マネージャ」を選択

構成マネージャダイアログが開く。



「アクティブ ソリューション プラットフォーム」ドロップダウンから、「<新規作成...>」を選択。


「新しいプラットフォーム」ドロップダウンで、”x64”を選択し、「OK」ボタンを押す。


「プラットフォーム」が”x64”になっていることを確認したら、「閉じる」ボタンを押す。


次に、ビルド後に自動的に DLL ファイルなどをコピーする設定を変更する。
正しくコピー先を設定してもいいが、コピー時に権限がなくて失敗する。Visual C++ を管理者権限で動かせばいいのかもしれないが、個人的に許容できない。
したがって、ファイルコピーは手動ですることにした。ついでに、ビルド中に生成されるファイルの出力先が、いろいろ気に入らないので、修正する。

「glut32」プロジェクトのプロパティを開く。


「構成プロパティ」-「ビルド イベント」-「ビルド後のイベント」を選択。


「構成」ドロップダウンで”Debug”を選択。
「プラットフォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「コマンド ライン」のcopy $(TargetDir)glut32.dll %WINDIR%\SYSTEM32
copy $(TargetDir)glut32.lib "$(DevEnvDir)..\..\VC98\lib"
copy ..\..\include\GL\glut.h "$(DevEnvDir)..\..\VC98\include\GL"
の全て、および「説明」の設定を消す。

「構成」ドロップダウンで”Release”を選択。
「プラットフォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「コ マンド ライン」のcopy $(TargetDir)glut32.dll %WINDIR%\SYSTEM32
copy $(TargetDir)glut32.lib "$(DevEnvDir)..\..\VC98\lib"
copy ..\..\include\GL\glut.h "$(DevEnvDir)..\..\VC98\include\GL"
の全て、およ び「説明」の設定を消す。
「適用」ボタンを押す。


「構成プロパティ」-「全般」を選択する。
「構成」ドロップダウンから”すべての構成”を 選択。
「プラットフォーム」ドロップダウンから”すべてのプラットフォーム”を選択。
「出力ディレクトリ」 に”$(SolutionDir).build\$(PlatformName)\$(ConfigurationName)”を設定。
「中間ディレクト リ」に”.build\$(PlatformName)\$(ConfigurationName)”を設定。
「OK」ボタンを押す。



「構成プロパティ」-「C/C++」-「プリコンパイル済みヘッダー」を選択する。
「構成」ドロップダウンから”すべての構成”を 選択。
「プラットフォーム」ドロップダウンから”すべてのプラットフォーム”を選択。
「プリコンパイル済みヘッダー ファイル」 に”$(IntDir)\glut32.pch”を設定。
「OK」ボタンを押す。

「構成プロパティ」-「C/C++」-「出力ファイル」を選択する。

「構成」ドロップダウンから”Debug”を 選択。
「プラットフォーム」ドロップダウンから”すべてのプラットフォーム”を選択。
「ASM リストの場所」の設定を削除。
「構成」ドロップダウンから”Release”を 選択。
「プラットフォーム」ドロップダウンから”すべてのプラットフォーム”を選択。
「ASM リストの場所」の設定を削除。

「構成」ドロップダウンから”すべての構成”を 選択。
「プラットフォーム」ドロップダウンから”すべてのプラットフォーム”を選択。
「オブジェクト ファイル名」に”$(IntDir)\”を設定。 「プログラム データベース ファイルの名前」に”$(IntDir)\vc90.pdb”を設定。
「適用」ボタンを押す。


「構成プロパティ」-「リンカ」-「全般」を選択。
「構成」ドロップダウンで”すべての構成”を選択。
「プラットフォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「出力ファイル」に”$(OutDir)\glut32.dll”を設定。
「適用」ボタンを押す。



「構成プロパティ」-「リンカ」-「デバッグ」を選択。
「構成」ドロップダウンで”すべての構成”を選択。
「プラット フォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「プログラム データベース ファイルの生成」に”$(TargetDir)$(TargetName).pdb”を設定。
「適用」ボタンを押す。




「構成プロパティ」-「リンカ」-「詳細」を選択。
「構成」ドロップダウンで”すべての構成”を選択。
「プラット フォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「インポート ライブラリ」に”$(TargetDir)\glut32.lib”を設定。
「適用」ボタンを押す。




「構成プロパティ」-「ブラウザ情報」-「全般」を選択。
「構成」ドロップダウンで”すべての構成”を選択。
「プラット フォーム」ドロップダウンで”すべてのプラットフォーム”を選択。
「出力ファイル」に”$(OutDir)\glut32.bsc”を設定。
「適用」ボタンを押す。






では、ビルドしてみる。
一つずつ手動でやってもいいのだが、面倒なのでバッチビルドを行うとこにする。
「ビルド」メニューから「バッチビルド」を選択


「ビルド」チェックボックスを全てチェックする。
「ビルド」ボタンを押す。


中間生成ファイルは、プロジェクトディレクトリ中の .build\プラットフォーム名\構成名 ディレクトリ以下に出力される。(例 : glut-3.7.6\lib\glut\.build\x64\Debug)


最終出力ファイルは、ソリューションディレクトリ中の .build\プラットフォーム名\構成名 ディレクトリ以下に出力される。(例 :glut-3.7.6\.build\x64\Debug)


想定通りにファイルが、出力されていることを確認する。想定通りでない場合は、設定を見直す。


最後に、生成されたファイルを手動で配置していく。

DLL ファイルの配置
glut-3.7.6\.build\Win32\Release\glut32.dll を %SystemRoot%\SysWOW64 ディレクトリにコピー
glut-3.7.6\.build\x64\Release\glut32.dll を %SystemRoot%\System32 ディレクトリにコピー

%SystemRoot% は、コマンドラインで echo %SystemRoot% とすると、実際のパスを知ることが出来る。(私の環境では、”C:\Windows”だった)


LIB ファイルと ヘッダファイルの格納先を確認する。
「glut32」プロジェクトのプロパティを開く。
「構成プロパティ」-「全般」を選択。


「出力ディレクトリ」のドロップダウンから”<編集...>”を選択。


 「マクロ」ボタンを押す。
”VCInstallDir”の値を確認する。(私の環境では、”C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\”だった)
以下 Visual C++ インストールディレクトリを %VCInstallDir% と記載する。


LIB ファイルの配置
glut-3.7.6\.build\Win32\Release\glut32.lib を %VCInstallDir%\lib ディレクトリにコピー
glut-3.7.6\.build\x64\Release\glut32.lib を %VCInstallDir%\lib\amd64 ディレクトリにコピー



ヘッダファイルの配置
glut-3.7.6\include\GL\glut.h を %VCInstallDir%\include\GL ディレクトリを作成してその中にコピー


今回はここまで。次回は、いよいよ ARToolKit 本体をコンパイルする環境を構築していくことにする。


追記:
本体をコンパイルするつもりだったが、あまりにも手順が面倒なので、挫折・・・
その内リベンジする予定・・・・予定は未定・・・・


VC++ 2008 Express EditionでARToolkitをビルドしてみる - やざわラボ Wiki: とかが参考になると思う。