[[執筆/雑誌/SD/2009/03]]


*まず、動かすには。 [#m9555aef]
+JMFをインストールする
++[[JMF 2.1.1e Software>http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html]]より、入手してください。
+Webカメラを接続する
++JMFに対応しているものである必要がありますが、たいていの場合は、大丈夫です。
+カメラサーバを起動する
++ソースコードのWebcamBroadcasterディレクトリのWebcamBroadcasterを実行します。
++コンパイル済みのバイナリがおいてありますので、下記のように実行できます。
+++java WebcamBroadcaster
+母艦PCのIPを調べる
++Androidエミュレータは、qemu上で動いているため、「localhost」によるアクセスは出来ません。そのため、母艦PCに何かしらのIPアドレスが必要になります。
+++プライベートIPでも構いません。
++調査法は、Windows系であれば「ipconfig」、Mac/Linux系であれば「ifconfig」で調べることが出来ます。
+ソースコード一式をEclipseに読み込む
++技術評論社さんの[[特設ページ>http://gihyo.jp/magazine/SD/archive/2009/200903/support]]からダウンロードしてください。
++File⇒Import⇒Existing Projects into Workspace を選択してください。
++「Select root directory」に、解凍先のディレクトリを指定してください。
++「Projects」欄に「NyARtoolkitAndroid」が表示されますので、選択して 「Finish」を押してください。
+ソースコードのIPアドレスの設定を変更する
++res/values/strings.xml 
 <string name="server_addr">192.168.86.1</string>
の 部分を上記で調べたものに変更します。
+マーカーを印刷する
++res/raw/marker.jpg
+++を、印刷してください。
+実行する
++Eclipseから、実行してください。エミュレータが起動して、カメラ画像が表示されるはずです。
++上記で印刷したマーカーを、カメラで写すと、3Dオブジェクト(デフォルトでは、椅子)が表示されます。


**表示させる3Dオブジェクトを変更する [#c61cefeb]
+assetsディレクトリに、読み込ませたい3Dオブジェクトのデータをコピーしてください。
++メタセコイヤ形式ファイルに対応しています。
++Androidの制限により、1MBまでのファイルしか読み出せません。
+ソースコード「NyARToolkitAndroidActivity#onCreate()」
 mRenderer = new ModelRenderer(false, getAssets(), "chair01.mqo", 0.04f);
++の行をコピーしたファイル名に変更してください。
+++最後のfloat値は、倍率です。


**G1やDev Phone 1で動かす [#sa497b75]
+res/values/strings.xml 
 <string name="camera_name">jp.android_group.artoolkit.hardware.SocketCamera</string> 
を、
 <string name="camera_name">jp.android_group.artoolkit.hardware.Dev1Camera</string>
に変更する。


*ソースコードを追いかける(詳細編) [#l85f87e9]
細かい点について、コードを順番に追っていきます。~



**Dev Phone 1モードでの画像の向きについて [#va655ac7]
もしかすると、画面が傾いていませんか?~
本来は、それを制御するためには、OrientationListenerクラスを利用します。~
NyARToolkitAndroidActivity#onCreate(Bundle)内で、

 mOrientationListener = new OrientationListener(this) {
    public void onOrientationChanged(int orientation) {
       mLastOrientation = orientation;
    }
 };

と、インスタンス化しています。~
が、これ、思ったように動いてくれません。Dev Phone 1を、立てているにもかかわらず、『横』の判定になってしまったり、動かしていないのに、縦から横になってしまったりと、いまいち、安定しません。~
そのため、今回は、入れてはおきましたが、使っていません。~

有効にするには、Dev1CameraクラスのインナークラスであるImageCapture#capture()内の

 //final int latchedOrientation = NyARToolkitAndroidActivity.roundOrientation(arActivity.getLastOrientation() + 90 );
 (略)
 parameters.set("rotation", 90);
 //parameters.set("rotation", latchedOrientation);

のコメントアウトをはずしてもらえれば、OKです。~
安定させられた方、是非、ご連絡をお願いします。~


***キャリブレーションについて [#fc051feb]
上記のOrientationListenerによる姿勢制御により、縦横が切り替わったタイミングで画面のサイズが(縦横比)が変わります。そのため、この横サイズにあったARToolkit用のキャリブレーションファイル(res/raw/camera_para.dat)が必要になります。~
今回は、用意していないので、ご自分で用意してください。


*訂正とお知らせ [#m2784785]
**RGBの並びについて [#wdeab5a6]
Camera×Callback×Bitmap節にて、RGBの持ち方に関する記述がありますが、

 ビットマップとOpenGL/ESとのRGBの持ち方の違い

という方が正しいとの、指摘がありましたので、訂正させていただきます。


**NyARToolkitとメタセコの読み出しライブラリについて [#f85c7305]
現在、NyARToolkitのVer.2.0化 と Androidに付属しているfloat系のネイティブライブラリを使用するように変更を行っています。~
それにあわせて公開する予定ですので、少々お待ちください。


*Android Tips [#z4777d8b]
** [#b35317bb]


*おまけ [#hf0515e9]
**本節の1ページ目の写真の手 [#jac05a65]
-手タレとして出演してもらったのは、[[これ>http://yoshiori.org/]]です。