JavaでARを試してみる

冬休み中にARをやってみようと思い*1、とりあえずサンプルを動かしてみました。

Java で使える AR 用のライブラリを探したところ、ARToolkitJava に移植した NyARToolkit というものがあったので、これを試すことにしました。

NyARToolkit は http://nyatla.jp/nyartoolkit/wiki/index.php から入手しました。「ダウンロード」のリンク先から NyARTookkit for Java の zip ファイル(NyARToolkit-2.4.2.zip)をダウンロードしました。

続いて、ダウンロードした zip ファイルに含まれる readme.ja.txt に従いいくつかのソースフォルダを eclipse のプロジェクトにインポートします。とりあえず JMF + Java3D のサンプルをためそうと思い、以下のフォルダをインポートしました。

そうするとコンパイルエラーがでるので、足りていない JMF と Java3D の jar をプロジェクトに追加します。

JMF は Java で音声やカメラなどを操作するときに使用するAPI です。http://java.sun.com/javase/technologies/desktop/media/jmf/ から入手できます。JMF をインストール後、c:\Program Files\JMF2.1.1e\lib にある jmf.jar をプロジェクトに追加しました。

Java3DJava で 3D オブジェクトをレンダリングするのに使用する API です。http://java.sun.com/javase/technologies/desktop/java3d/ から入手できます*2。こちらもインストール後に c:\Program Files\Java\Java3D\1.5.1\lib\ext にあるすべての jar ファイル - j3dcore.jar, j3dutils.jar, vecmath.jar - をプロジェクトに追加しました。

この時点でコンパイルエラーが無くなったので、試しに jp.nyatla.nyartoolkit.java3d.sample.NyARJava3D を実行してみましたが、データファイルが見つからないらしく例外が発生。なので、Data フォルダもプロジェクト直下にコピーし、jp.nyatla.nyartoolkit.java3d.sample.NyARJava3D 実行時のワークディレクトリが sample/java3d になるように、実行の設定を変更*3

再度サンプルを実行すると、カメラから取り込まれた映像の表示されたウィンドウが開きました。
立方体らしき3Dの物体も描画されています・・・が位置や大きさが一定していません。まだ、マーカーを用意していないので、少しでもマーカーに似ている模様のところに表示されているのかも知れないです。

マーカーは Data フォルダ内にある pattHiro.pdf を使用すればよいようです。なので、印刷してカメラの前にかざしてみました。

ちゃんとマーカーの上に立方体が表示されました。マーカーの向きを変えると、まるでマーカーの紙に張り付いているかのように、立方体も向きを変えました。カメラからの画像自体は二次元であるにもかかわらず、マーカのサイズや辺の向きなどによって、ちゃんと3次元空間にあるかのように振舞ってくれるのが面白いです。

サンプルのソースコード自体は非常に短く、何をやっているのかもわかりやすいです。ライブラリの便利さが実感できます。
明日以降はJava3Dの勉強になるかも・・・自分で何か作るには、3Dの知識が必須っぽいので。

*1:弊社2年目の子が急成長していて、まけてらんないと思いまして・・・

*2:Downloads にある「Java3D 1.5.1 API」を開き、「Download Java 3D 1.5.1 Software」から入手

*3:メニューバーの[Run]→[Run Configurations...]、設定ダイアログで NyARJava3D の Arguments タブを表示し、Working directory の設定を変更する