「AR(拡張現実)」を利用したAndroidアプリケーションについて調査中

「AR(拡張現実)」を利用したAndroidアプリケーションについて調査。

JAVAでは
NyARToolkit(nyatla ARToolkitの略、
http://d.hatena.ne.jp/nyatla/20080328
作者ブログでも読み方不明とあるwにゃーつーるきっと?)

FLASHではFLARToolKitというAR用のライブラリが公開されているので、
とりあえず使用してみました。

<使用方法>

EclipseAndroidのサンプルプログラム(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

(使用方法)
http://www.android-group.jp/index.php?%BC%B9%C9%AE%2F%BB%A8%BB%EF%2FSD%2F2009%2F03%2F%B2%BE%C1%DB%B8%BD%BC%C2%B4%B6%A1%A6%CB%DC%CA%B8


ちなみに。。
書籍や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"

と横向きのみの仕様だったり、色々悩みました。

参考)
http://labs.techfirm.co.jp/android/cho/1647