「AR(拡張現実)」を利用したAndroidアプリケーションについて調査中
「AR(拡張現実)」を利用したAndroidアプリケーションについて調査。
JAVAでは
NyARToolkit(nyatla ARToolkitの略、
http://d.hatena.ne.jp/nyatla/20080328
作者ブログでも読み方不明とあるwにゃーつーるきっと?)
FLASHではFLARToolKitというAR用のライブラリが公開されているので、
とりあえず使用してみました。
<使用方法>
EclipseでAndroidのサンプルプログラム(HELLOWORLDなど)
が動作する状態が作られているところからスタート
(0)ソースコードの取得
http://gihyo.jp/magazine/SD/archive/2009/200903/support
のAndroid + AR(拡張現実感)で広がる現実世界のソースコードから
ファイルを取得
(1)ファイルのインポート
ファイル(F)>インポート>既存プロジェクトをワークスペースへ>
ルート・ディレクトリーの選択にNyARToolkitAndroidを選択>OK
(2)Javaのビルドパス設定及び、Javaコンパイラーの設定
プロジェクトを右クリック>プロパティ>Javaのビルドパス>外部JARの追加>C:\android-sdk-windows\platforms\android-7\android.jarを選択
プロジェクトを右クリック>プロパティ>Javaのコンパイラー>コンパイラー標準レベルを1.6に設定
(3)終わり ※も少し書き足します
参考>>
(インストール方法)
http://www.android-group.jp/index.php?%BC%B9%C9%AE%2F%BB%A8%BB%EF%2FSD%2F2009%2F03%2F%C2%E8%A3%B4%BE%CF%2F%B2%BE%C1%DB%B8%BD%BC%C2%B4%B6
(インストール失敗のときに)
http://awwa500.blogspot.com/2010/02/nyartoolkit.html
ちなみに。。
書籍やWEB等の1.6用カメラのサンプルアプリなどでカメラから入力した画像を
画面上でプレビューする機能を実機でデバッグすると
「予期せず停止しました。やり直してください。強制終了」となる。
原因は、surfaceChanged内で使用している
parameters.setPreviewSize(w,h);
が1.6では自由にサイズを渡すことが出来るが、
2.0以降からは、Camera.getSupportedPictureFormatsで
デバイスがサポートするプレビューサイズを使用しなければならないらしい。
//× public void surfaceChanged(SurfaceHolder holder,int format,int w,int h){ Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(w,h); camera.setParameters(parameters); camera.startPreview(); } //〇 public void surfaceChanged(SurfaceHolder holder,int format,int w,int h){ Camera.Parameters parameters = camera.getParameters(); setPreviewSize(width, height); camera.startPreview(); } protected void setPreviewSize(int width, int height) { Camera.Parameters params = camera.getParameters(); //Android 2.0以降の場合、getSupportedPreviewSizesで取得したサイズでないと起動しない List<Camera.Size> supported = params.getSupportedPreviewSizes(); if (supported != null) { for (Camera.Size size : supported) { if (size.width <= width && size.height <= height) { params.setPreviewSize(size.width, size.height); camera.setParameters(params); break; } } } }
その他にも
AndroidManifest.xmlに
と追記が必要だったり、
AndroidManifest.xmlのactivityにandroid:screenOrientation="landscape"
と横向きのみの仕様だったり、色々悩みました。