ARToolKit (2): Visual C++2010環境でビルド、実行
前回:ARToolKit (1): Windows7、Visual C++2010環境でインストール
前回まででARToolKitのインストールは完了しましたので、
Visual C++でプログラムを実行する環境を作りましょう。
下記が準備できていることを前提とします。
Visual C++ 2010 (以下、VC++)
ARToolKit 2.72.1 (C:\ARToolKit\binにパスを通して、msvcp71.dll, msvcr71.dll, glut32.dll を移動済み)
まず、VC++のプロジェクトを立ち上げます。空のプロジェクトを選択します。
次に、メインとなるC++のソースコードを新規作成して、次のコードをコピーペーストします。simpleLite
このままではソースコードの至る所に赤波線が出てコンパイルエラーとなりますので、
さらにメニューから、「プロジェクト」–>「<プロジェクト名>のプロパティ」から、下記のパスを設定していきます。
「構成プロパティ」–>「C/C++」–>「全般」–>「追加のインクルード ディレクトリ」
C:\ARToolKit\include
C:\ARToolKit\DSVL\src
「構成プロパティ」–>「リンカー」–>「全般」–>「追加のライブラリ ディレクトリ」
C:\ARToolKit\lib
C:\ARToolKit\DSVL\lib
「構成プロパティ」–>「リンカー」–>「入力」–>「追加の依存ファイル」
libAR.lib
libARgsub_lite.lib
libARvideo.lib
opengl32.lib
glu32.lib
glut32.lib
そこまで出来たら、プロジェクトをビルドして実行してみましょう。
コマンドプロンプトが一瞬出て終了するはずです。読めないと思いますが、おそらく、そこには、
main(): Unable to set up AR camera.
か
main(): Unable to set up AR marker.
のメッセージが出ているはずです。
カメラやマーカーのデータが読めていないのですね。ソースコードを見てみると、
const char *cparam_name = "Data/camera_para.dat"; char *vconf = "Data/WDM_camera_flipV.xml"; const char *patt_name = "Data/multi/patt.hiro";
のような記述がありますので、これらを読み込めるようにしたらいいですね。
どこにあるかというと、C:\ARToolKit\bin\Data ですね。
Dataのディレクトリごと、
<Visual Studio 2010 Projectsディレクトリ>\<ソリューション名>\<プロジェクト名>
のディレクトリにコピーしておきましょう。
これで出来上がりです。
下記のようになれば、成功です。
キューブをティーポットに変えたければ、ソースコードの
DrawCube();
の部分を
glTranslatef(0.0, 0.0, 0.9); static double angle=0; glRotatef(90.0, 1.0, 0.0, 0.0); glRotatef(angle, 0.0, 1.0, 0.0); angle=angle+2.5; glColor3f(1.0, 0.0, 0.0); glutWireTeapot(1.0);
のように置き換えてみましょう。するとこのようになるはずです。
ところで、写真ではマーカーの枠内の文字が、”hiro”ではなく、”B”になっていますね。
これは、C:\ARToolKit\patterns\pattMulti.pdf を印刷して切り取ったものですが、そのままのプログラムでは認識されません。認識したとすると誤認識です。
“B”を認識させるためには、
const char *patt_name = "Data/patt.hiro";
の部分を、
const char *patt_name = "Data/multi/patt.b";
に変える必要があります。
このように、ARToolKitでは、さまざまなマーカーを、それぞれ違うマーカーとして認識できます。
ちょっと改造すれば、複数同時に認識することも可能となります。今度やってみましょう。
Alaakzaam-information found, problem solved, thanks!
You really found a way to make this whole process eaesir.
What a great roesurce this text is.
ビルドすると
libARvideo.dllがありません。プログラムを再インストールしてください
とでるのですがどうすればいいのでしょうか
kooさんコメントありがとうございます。
「〜.dll がない」というようなエラーでしたら、基本的には「ビルド時」ではなく「実行時」のエラーの間違いだと思われます。
そのため、実行時のエラーと仮定して話を進めますね。
(もし、本当にビルド時のエラーでしたら、私にはちょっと分かりかねます。すみません。)
実行時に.dllがないというエラーが出るという場合、考えられる状況は実行ファイルから.dllが動的に読み込めない場合です。
基本的に実行ファイルは、同じフォルダ内にある.dllしか読むことができません。
そのため、同じフォルダに libARvideo.dll を入れておけば今回の問題は解決するでしょう。
kooさんがvisual studioでお作りになったプロジェクトの中の.exeのファイルの場所を探して、そこに libARvideo.dllをおいてあげてください。
libARvideo.dll自体はC:\ARToolKit\binの中にあるはずです。
libARvideo.dllをおいて実行したあと、再度別の.dllファイルがないといわれた場合も、同様に対応すれば問題ないはずです。
上記がシンプルな解決策ですが、もう1つ方法があります。
それは、環境変数を設定する方法です。
実行ファイルの.exeが必要な.dllを動的に読み込む際に、同じフォルダ内以外にも、環境変数Pathに指定したフォルダもあわせて探します。
(優先順位は「1.同じフォルダ」「2.Pathに指定したフォルダ」の順です。)
実は、前回の記事(http://tsujimotter.info/2012/05/14/artoolkit-1/)でARToolkitのフォルダ(C:\ARToolKit\bin)を環境変数Pathに設定しています。
今回の記事は前回の続き物だったため、その点を省略していたのです。
環境変数PathにARToolkitのフォルダ(C:\ARToolKit\bin)を追加すれば、そのフォルダに入っているはずの、libARvideo.dll は実行ファイルから呼び出されるはずです。
もし、設定後もかわらなければ、PCを再起動してみてください。環境変数の反映に時間がかかる場合があります。
わかりにくければ、再度ご質問くださいませ。
tsujimotter (管理人)
非常にわかりやすい記事をありがとうございます.
前回の記事と合わせてプログラムを実行できるところまできました.
ですが,画面にうつったARマーカーにキューブやポットが乗りません.
マーカーを認識しているかどうかを確認するにはどうすればよいでしょうか.
また,マーカーの画面上の2次元位置を求める方法もわかれば
教えていただけたら嬉しいです.
パターンのイメージが違ったから表示されていなかったようです.
main関数のmulti/patt.bをpatt.hiroに変えたらうまくいきました.
自己解決いたしました.失礼しました.
はじめまして。
エラー LNK2019 未解決の外部シンボル _fprintf が関数 _arSavePatt で参照されました。
というエラーが出てきてしまい動きません。
libARd.libがいけないみたいなのですが、解決方法がわかりません。よろしくお願いします