[[執筆/雑誌/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/]]です。